diff --git a/suimangAdmin/src/main/resources/db/migration/V202306271409_voice_material.sql b/suimangAdmin/src/main/resources/db/migration/V202306271409_voice_material.sql new file mode 100644 index 0000000..5886196 --- /dev/null +++ b/suimangAdmin/src/main/resources/db/migration/V202306271409_voice_material.sql @@ -0,0 +1,2 @@ +ALTER TABLE `mallink_suimang_test`.`voice_material` +ADD COLUMN `type` int NULL COMMENT '1-上传、2-录音' AFTER `type`; \ No newline at end of file diff --git a/suimangAdmin/src/main/resources/db/migration/V202306281655_photo_speak_video.sql b/suimangAdmin/src/main/resources/db/migration/V202306281655_photo_speak_video.sql new file mode 100644 index 0000000..4d60bed --- /dev/null +++ b/suimangAdmin/src/main/resources/db/migration/V202306281655_photo_speak_video.sql @@ -0,0 +1,2 @@ +ALTER TABLE `mallink_suimang_test`.`photo_speak_video` + ADD COLUMN `save_dir` varchar(255) NULL COMMENT '超分的视频路径' AFTER `music_id`; \ No newline at end of file diff --git a/suimangAdmin/src/main/resources/db/migration/V202306291619_voice_info.sql b/suimangAdmin/src/main/resources/db/migration/V202306291619_voice_info.sql new file mode 100644 index 0000000..ef6c979 --- /dev/null +++ b/suimangAdmin/src/main/resources/db/migration/V202306291619_voice_info.sql @@ -0,0 +1,8 @@ +ALTER TABLE `mallink_suimang_test`.`photo_speak_video` + ADD COLUMN `video_hy_status` smallint DEFAULT 0 NULL COMMENT '视频超分状态' AFTER `video_status`; + +ALTER TABLE `mallink_suimang_test`.`voice_info` + ADD COLUMN `age_type` smallint NULL COMMENT '年纪类型 EnumAgeType' AFTER `sex`; + +ALTER TABLE `mallink_suimang_test`.`photo_speak_video` + ADD COLUMN `is_hy` smallint NULL DEFAULT 0 COMMENT '是否超分(1、是,2、否)' AFTER `video_hy_status`, \ No newline at end of file diff --git a/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java b/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java index 4a6ff0e..293c50d 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java @@ -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; @@ -64,6 +63,9 @@ public class PhotoSpeakVideoController extends BaseController { @Autowired private MusicInfoService musicInfoService; + @Autowired + private VoiceMaterialService voiceMaterialService; + @ApiOperation("分页列表接口") @GetMapping("list") @ApiImplicitParams({ @@ -94,6 +96,10 @@ public class PhotoSpeakVideoController extends BaseController { VoiceInfo voiceInfo = voiceInfoService.getById(photoSpeakVideo.getVoiceMouldId()); photoSpeakVideo.setVoiceInfo(voiceInfo); } + if(photoSpeakVideo.getVoiceMaterialId() != null){ + VoiceMaterial voiceMaterial = voiceMaterialService.getById(photoSpeakVideo.getVoiceMaterialId()); + photoSpeakVideo.setVoiceMaterial(voiceMaterial); + } return new ResultData(photoSpeakVideo); } @@ -301,10 +307,103 @@ 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 music = musicInfoService.music(); + public ResultData music(@ModelAttribute MusicInfo record, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] UserMouldVideoController::userList"); + if (record == null) record = new MusicInfo(); + PageInfo music = musicInfoService.music(pageNum, pageSize, record); + return new ResultData(music); + } + + @GetMapping(value = "/userMusic") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + @ApiOperation("获取用户音乐") + public ResultData userMusic(@ModelAttribute MusicInfo record, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] UserMouldVideoController::userMusic"); + if (record == null) record = new MusicInfo(); + record.setUserId(getMemberId()); + PageInfo music = musicInfoService.userMusic(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()); + if (record.getTitle() == null) { + record.setTitle("用户自建"); + } + return musicInfoService.saveOrUpdate(record); + } + + @ApiOperation("根据id删除接口") + @GetMapping("/delete") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData delete(Long id) { + logger.debug("[" + getIpAddr() + "] PersonPhotoController::delete"); + if(id == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数为空"); + } + MusicInfo musicInfo = musicInfoService.getById(id); + if(musicInfo == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到数据"); + } + if(!musicInfo.getUserId().equals(getMemberId())){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到用户数据"); + } + musicInfoService.deleteById(id); + return new ResultData(); + } + + @ApiOperation("视频超分") + @GetMapping("/videoHy") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData videoHy(Long id) { + logger.debug("[" + getIpAddr() + "] PersonPhotoController::videoHy"); + if(id == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数为空"); + } + PhotoSpeakVideo speakVideo = photoSpeakVideoService.getById(id); + if(speakVideo == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到数据"); + } + if (StringUtils.isEmpty(speakVideo.getSaveDir())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"save_dir为空"); + } + if(!speakVideo.getUserId().equals(getMemberId())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未找到用户数据"); + } + + if(!EnumVideoStatus.upload_success.getCode().equals(speakVideo.getVideoStatus())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"原始视频生成未完成"); + } + + if(EnumVideoStatus.ing.getCode().equals(speakVideo.getVideoHyStatus()) + || EnumVideoStatus.success.getCode().equals(speakVideo.getVideoHyStatus()) + || EnumVideoStatus.upload_ing.getCode().equals(speakVideo.getVideoHyStatus()) + || EnumVideoStatus.upload_fail.getCode().equals(speakVideo.getVideoHyStatus())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"高清晰度视频生成中"); + } + if(EnumVideoStatus.upload_success.getCode().equals(speakVideo.getVideoHyStatus())){ + //上传阿里云状态 生成成功 + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"高清晰度视频已生成完成"); + } + + speakVideo.setVideoStatus(EnumVideoStatus.ing.getCode()); + speakVideo.setVideoMsg(""); + speakVideo.setUpdateDate(new Date()); + photoSpeakVideoService.updateById(speakVideo); + + photoSpeakVideoService.videoHy(speakVideo,true); + return new ResultData(); + } + } diff --git a/suimangCApi/src/main/java/com/iformall/controller/SDKController.java b/suimangCApi/src/main/java/com/iformall/controller/SDKController.java new file mode 100644 index 0000000..1a8aee2 --- /dev/null +++ b/suimangCApi/src/main/java/com/iformall/controller/SDKController.java @@ -0,0 +1,107 @@ +package com.iformall.controller; + +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; +import com.iformall.domain.po.sm.PhotoSpeakVideo; +import com.iformall.domain.po.sm.PreviewParam; +import com.iformall.enums.EnumVideoStatus; +import com.iformall.service.sm.PhotoSpeakVideoService; +import com.iformall.service.sm.PersonPhotoService; +import com.iformall.service.sm.VoiceInfoService; +import com.iformall.sm.AiPreviewParam; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +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 java.util.Date; + +/** + * 对外开放的 API 接口 + */ +@RestController +@RequestMapping("/api/open") +@Api(description = "对外开放的 API 接口") +public class SDKController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private PersonPhotoService personPhotoService; + @Autowired + private VoiceInfoService voiceInfoService; + @Autowired + private PhotoSpeakVideoService photoSpeakVideoService; + + @ApiOperation("图片质量审核接口") + @PostMapping("checkPhoto") + @ApiImplicitParam(name = "material", value = "material", dataType = "String", paramType = "query", required = true) + public ResultData checkPhoto(String material) { + logger.debug("[" + getIpAddr() + "] SDKController::checkPhoto"); + if (StringUtils.isBlank(material)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "素材为空"); + } + ResultData data = personPhotoService.checkPhoto(material); + if (data.code == 2000) { + return new ResultData(); + } + return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), data.message); + } + + @ApiOperation("TTS音色预览") + @PostMapping("/preview") + public ResultData voicePreview(@RequestBody PreviewParam previewParam) { + logger.debug("[" + getIpAddr() + "] SDKController::voicePreview"); + if (previewParam.getVoiceId() == null) { + return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "音色ID不能为空"); + } + if (StringUtils.isBlank(previewParam.getGenTxt())) { + return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "需要生成的文字不能为空"); + } + AiPreviewParam param = new AiPreviewParam(); + param.setVoice_id(previewParam.getVoiceId()); + param.setVoice_style(previewParam.getVoiceStyle()); + param.setGen_txt(previewParam.getGenTxt()); + param.setGender(previewParam.getGender()); + return new ResultData(voiceInfoService.voicePreview(param)); + } + + @ApiOperation("生成视频") + @PostMapping("/createVideo") + public ResultData create(@RequestBody PhotoSpeakVideo record) { + logger.debug("[" + getIpAddr() + "] MouldPatchController::saveOrUpdate"); + if (record.getId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + PhotoSpeakVideo mouldVideo = photoSpeakVideoService.getById(record.getId()); + logger.info("TEST--" + JSONObject.toJSONString(mouldVideo)); + if (mouldVideo == null || !mouldVideo.getUserId().equals(getMemberId())) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "未找到用户数据"); + } + if (EnumVideoStatus.ing.getCode().equals(mouldVideo.getVideoStatus()) + || EnumVideoStatus.success.getCode().equals(mouldVideo.getVideoStatus()) + || EnumVideoStatus.upload_ing.getCode().equals(mouldVideo.getVideoStatus()) + || EnumVideoStatus.upload_fail.getCode().equals(mouldVideo.getVideoStatus())) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "视频生成中"); + } + if (EnumVideoStatus.upload_success.getCode().equals(mouldVideo.getVideoStatus())) { + //上传阿里云状态 生成成功 + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "视频已生成完成"); + } + PhotoSpeakVideo mouldVideoUpd = new PhotoSpeakVideo(); + mouldVideoUpd.setId(record.getId()); + mouldVideoUpd.setVideoStatus(EnumVideoStatus.ing.getCode()); + mouldVideoUpd.setVideoMsg(""); + mouldVideoUpd.setCreateVideoDate(new Date()); + photoSpeakVideoService.saveOrUpdate(mouldVideoUpd); + photoSpeakVideoService.createVideo(mouldVideo, true); + return new ResultData(); + } +} diff --git a/suimangCApi/src/main/java/com/iformall/controller/VoiceMaterialController.java b/suimangCApi/src/main/java/com/iformall/controller/VoiceMaterialController.java index 29b5017..8fa90ec 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/VoiceMaterialController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/VoiceMaterialController.java @@ -69,7 +69,7 @@ public class VoiceMaterialController extends BaseController { public ResultData save(@RequestBody VoiceMaterial record) { logger.debug("[" + getIpAddr() + "] VoiceMaterialController::save"); if(record == null)record = new VoiceMaterial(); - record.setSendType(EnumMouldSendType.build.getCode()); +// record.setSendType(EnumMouldSendType.build.getCode()); record.setUserId(getMemberId()); if(StringUtils.isBlank(record.getVideoId())){ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"音频为空"); @@ -77,6 +77,9 @@ public class VoiceMaterialController extends BaseController { if(record.getTitle() == null){ record.setTitle("用户自建"); } + if(record.getSendType() == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"上传音频类型不能为空"); + } record.setPrice(0); record.setSalePrice(0); record.setStatus(EnumaMouldPatchStatus.put_on.getCode()); diff --git a/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 68988d4..6b3190d 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -12,6 +12,7 @@ import com.iformall.service.*; import com.iformall.service.cuser.CUserServiceFactory; import com.iformall.service.sm.InviteCodeInfoService; import com.iformall.service.sm.InviteCodeService; +import com.iformall.service.sm.UserConsumptionPackageService; import com.iformall.service.sm.UserCreateVideoNumService; import com.iformall.utils.Constant; import com.iformall.utils.PasswordHelper; @@ -95,6 +96,9 @@ public class WxUserGrantController extends BaseController { @Autowired private InviteCodeInfoService inviteCodeInfoService; + @Autowired + private UserConsumptionPackageService userConsumptionPackageService; + @AuthIgnore @ApiOperation("验证码") @GetMapping("/captcha.jpg") @@ -361,6 +365,7 @@ 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(), "初始化创建视频时间表失败"); @@ -409,6 +414,7 @@ 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(), "初始化创建视频时间表失败"); @@ -709,4 +715,12 @@ public class WxUserGrantController extends BaseController { return new ResultData(userBasicInfo); } + @AuthIgnore + @ApiOperation("套餐档次查询") + @GetMapping("/getPackageInfo") + public ResultData getPackageInfo() { + logger.debug("[" + getIpAddr() + "] WxUserGrantController::getPackageInfo"); + return new ResultData(userConsumptionPackageService.getPackageInfo()); + } + } diff --git a/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java b/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java index 9dde223..a7d01f8 100644 --- a/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java +++ b/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java @@ -112,26 +112,49 @@ public class PhotoSpeakSchedule { /** - * 统计用户创建视频成功的时长 + * 获取超分时长和大小 */ - @Scheduled(cron = "0 */30 * * * *?") // 每半小时检查一次 - public void userCreateVideoTimeSchedule() { - List videos = photoSpeakVideoService.getUploadSuccessList(); + @Scheduled(cron = "0 1/5 * * * *?") // 每五分钟检查一次 + public void userVideoHyDetailSchedule() { + List videos = photoSpeakVideoService.getUpLoadHyIngList(); if (videos != null && videos.size() > 0) { - HashMap map = new HashMap<>(); for (PhotoSpeakVideo video : videos) { try { - if (map.get(video.getUserId()) == null) { - map.put(video.getUserId(), Long.parseLong(video.getVideoTime())); - } else { - Long time = map.get(video.getUserId()); - map.put(video.getUserId(), Long.parseLong(video.getVideoTime()) + time); + VideUploadResult videoDetail = videoFactory.getExcutor(videoType).getVideoDetailWithCache(video.getVideoId()); + if (videoDetail.isSuccess() + && StringUtils.isNotBlank(videoDetail.getDuration()) + && !"0.0".equals(videoDetail.getDuration())) { + video.setCoverImg(videoDetail.getCoverURL()); + video.setVideoPlayUrl(videoDetail.getVideoUrl()); + video.setVideoTime(videoDetail.getDuration()); + video.setVideoSize(videoDetail.getSize()); + video.setVideoHyStatus(EnumVideoStatus.upload_success.getCode()); + photoSpeakVideoService.updateById(video); } } catch (Exception e) { - logger.error("TtCouponVideoSchedule error.couponVideoSchedule:" + video.getId(), e); + logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); + } + } + } + } + + /** + * 超分生成视频 + */ + @Scheduled(cron = "0 20/30 * * * *?") // 每半小时检查一次 + public void photoSpeakCreateHySchedule() { + PhotoSpeakVideo videoUpd = new PhotoSpeakVideo(); + videoUpd.setVideoStartDate(DateUtils.getHourDateBefore(2,new Date())); + videoUpd.setVideoHyStatus(EnumVideoStatus.fail.getCode()); + List list = photoSpeakVideoService.findList(videoUpd); + if (list != null && list.size() > 0) { + for (PhotoSpeakVideo video : list) { + try { + photoSpeakVideoService.videoHy(video,false); + } catch (Exception e) { + logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); } } - userCreateVideoNumService.uploadUserCreateVideoNum(map); } } } \ No newline at end of file diff --git a/suimangService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java b/suimangService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java index eb5e62f..a09a0bf 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java +++ b/suimangService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java @@ -215,6 +215,10 @@ public class WxCUserBasicInfo extends TenantEntityWithoutFinalTenantId { @io.swagger.annotations.ApiModelProperty(value="操作人ID",name="operatorId") private Long operatorId; + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="套餐类型(1、基础版,2、专业版,3、加强版)",name="packageType") + private Integer packageType; + public void protectInfos() { if(StringUtils.isNotBlank(this.password)) { setPassword("保密"); diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/MusicInfo.java b/suimangService/src/main/java/com/iformall/domain/po/sm/MusicInfo.java index 63cd9d1..59be1b3 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/MusicInfo.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/MusicInfo.java @@ -1,34 +1,36 @@ package com.iformall.domain.po.sm; +import com.baomidou.mybatisplus.annotation.TableField; 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; + /** * 音乐链接 */ @@ -37,12 +39,12 @@ public class MusicInfo implements Serializable { /** * 音乐大小 */ - private Integer size; + private Long size; /** * 音乐时长(s) */ - private Integer time; + private Double time; /** * 创建时间 @@ -59,4 +61,9 @@ public class MusicInfo implements Serializable { */ private Integer isDel; + private String title; + + @TableField(exist = false) + private String voiceId; + } diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java b/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java index d47e883..145604c 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java @@ -152,5 +152,11 @@ public class PhotoSpeakVideo extends TenantEntity { private List videoStatuss; private Long musicId; + + private String saveDir; + + private Integer videoHyStatus; + + private Integer isHy;//是否超分(1、是,0、否) } diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/PreviewParam.java b/suimangService/src/main/java/com/iformall/domain/po/sm/PreviewParam.java new file mode 100644 index 0000000..6dfd06b --- /dev/null +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/PreviewParam.java @@ -0,0 +1,11 @@ +package com.iformall.domain.po.sm; + +import lombok.Data; + +@Data +public class PreviewParam { + private String genTxt; + private String voiceId; + private String voiceStyle; + private String gender; +} \ No newline at end of file diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/UserConsumptionPackage.java b/suimangService/src/main/java/com/iformall/domain/po/sm/UserConsumptionPackage.java new file mode 100644 index 0000000..707b3c0 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/UserConsumptionPackage.java @@ -0,0 +1,122 @@ +package com.iformall.domain.po.sm; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; +import java.io.Serializable; +import lombok.Data; +import java.math.BigDecimal; +import java.util.List; + + +/** + * @Description + * @Author LRH + * @Date 2023-06-15 + */ +@Data +@TableName("user_consumption_package" ) +public class UserConsumptionPackage implements Serializable { + + private static final long serialVersionUID = 7987400196899039170L; + + /** + * 主键ID + */ + @TableId + private Integer id; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 父租户ID + */ + private String parentTenantId; + + /** + * 套餐类型(1、基础版,2、专业版,3、加强版) + */ + private Integer type; + @TableField(exist = false) + private String typeDesc; + + /** + * 英文名字 + */ + private String englishName; + + /** + * 美元 + */ + private BigDecimal dollar; + + /** + * 人民币 + */ + private BigDecimal rmb; + + /** + * 积分 + */ + private Integer credit; + + /** + * 有效期时长(天) + */ + private Integer validityDuration; + + /** + * 邀请用户送的积分 + */ + private Integer inviteUserCredit; + + /** + * 照片说话单价(积分) + */ + private Integer videoPrice; + + /** + * ai生成照片单价(积分) + */ + private Integer photoPrice; + + /** + * 口播的单价(积分) + */ + private Integer talkPrice; + + /** + * 照片说话单价、口播的单价收费时长 + */ + private Integer chargeTime; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 更新时间 + */ + private Date updateDate; + + /** + * 是否删除1是0否 + */ + private Integer isDel; + + /** + * 套餐颜色 + */ + private String color; + + /** + * 详细配置信息 + */ + @TableField(exist = false) + List userPackageDetails; +} diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/UserCreateVideoNum.java b/suimangService/src/main/java/com/iformall/domain/po/sm/UserCreateVideoNum.java index 38e1c2f..2730523 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/UserCreateVideoNum.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/UserCreateVideoNum.java @@ -1,77 +1,126 @@ package com.iformall.domain.po.sm; - import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; +import java.io.Serializable; import lombok.Data; -import java.io.Serializable; -import java.util.Date; /** - * @author LRH - * @date Wed Jun 07 17:06:17 CST 2023 - * @describe 用户创建视频时间表 + * @Description + * @Author LRH + * @Date 2023-06-15 */ @Data -@TableName("user_create_video_num") +@TableName("user_create_video_num" ) public class UserCreateVideoNum implements Serializable { - private static final long serialVersionUID = 6845742086152117203L; - /** - * 主键ID - */ + + private static final long serialVersionUID = 4995993777308528646L; + + /** + * 主键ID + */ @TableId - private Long id; - /** - * 租户ID - */ - private String tenantId; - /** - * 父租户ID - */ - private String parentTenantId; - /** - * 用户id(wx_c_user_basic_info.id) - */ - private Long userId; - /** - * 剩余条数 - */ - private Integer residueNum; - /** - * 总条数 - */ - private Integer residueTotal; - /** - * 用户生成视频的个数 - */ - private Integer createNum; - /** - * 用户生成视频的总时长(s) - */ - private Long createAllTime; - /** - * 总时长(单位:s) - */ - private Long totalTime; - /** - * 剩余时长(单位:s) - */ - private Long residueTime; - /** - * 有效期 - */ - private Date effectiveDate; - /** - * 创建时间 - */ - private Date createDate; - /** - * 更新时间 - */ - private Date updateDate; - /** - * 是否删除1是0否 - */ - private long isDel; + private Long id; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 父租户ID + */ + private String parentTenantId; + + /** + * 用户id(wx_c_user_basic_info.id) + */ + private Long userId; + + /** + * 套餐id(user_consumption_package.id) + */ + private Integer packageId; + + /** + * 剩余条数 + */ + private Integer residueNum; + + /** + * 总条数 + */ + private Integer residueTotal; + + /** + * 用户生成视频的个数 + */ + private Integer createNum; + + /** + * 用户生成视频的总时长(s) + */ + private float createAllTime; + + /** + * 用户拥有总时长(单位:s) + */ + private Long totalTime; + + /** + * 用户剩余时长(单位:s) + */ + private Long residueTime; + + /** + * 有效期 + */ + private Date effectiveDate; + + /** + * 用户总积分 + */ + private Integer userCredits; + /** + * 用户剩余积分 + */ + private Integer residueCredits; + + /** + * 邀请人送的基础积分(暂时默认每个档次都是10积分) + */ + private Integer inviteBaseCredits; + + /** + * 照片说话的单价/min + */ + private Integer videoPrice; + + /** + * ai生成照片的单价/min + */ + private Integer photoPrice; + + /** + * 生成口播的单价/min + */ + private Integer talkPrice; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 更新时间 + */ + private Date updateDate; + + /** + * 是否删除1是0否 + */ + private Integer isDel; + } diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/UserCreditLog.java b/suimangService/src/main/java/com/iformall/domain/po/sm/UserCreditLog.java new file mode 100644 index 0000000..650d038 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/UserCreditLog.java @@ -0,0 +1,84 @@ +package com.iformall.domain.po.sm; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; +import java.io.Serializable; + +import io.swagger.models.auth.In; +import lombok.Data; + + +/** + * @Description + * @Author LRH + * @Date 2023-06-15 + */ +@Data +@TableName("user_credit_log" ) +public class UserCreditLog implements Serializable { + + private static final long serialVersionUID = 8595480777599856051L; + + /** + * 主键ID + */ + @TableId + private Long id; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 父租户ID + */ + private String parentTenantId; + + /** + * 用户id(wx_c_user_basic_info.id) + */ + private Long userId; + + /** + * 视频id 或者 图片id 或者 口播id + */ + private Long videoOrPhotoOrTalkId; + + /** + * 订单id + */ + private Integer orderId; + + /** + * 类型(1、注册,2、邀请新用户,3、套餐增加,4、照片说话,5、AI生成照片,6、口播) + */ + private Integer type; + + /** + * 积分加减情况 + */ + private float credits; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 更新时间 + */ + private Date updateDate; + + /** + * 是否删除1是0否 + */ + private Integer isDel; + +} diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/UserPackageDetail.java b/suimangService/src/main/java/com/iformall/domain/po/sm/UserPackageDetail.java new file mode 100644 index 0000000..6d654c5 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/UserPackageDetail.java @@ -0,0 +1,124 @@ +package com.iformall.domain.po.sm; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; +import java.io.Serializable; +import lombok.Data; + + +/** + * @Description + * @Author LRH + * @Date 2023-06-16 + */ +@Data +@TableName("user_package_detail" ) +public class UserPackageDetail implements Serializable { + + private static final long serialVersionUID = 8868339443558940187L; + + /** + * 主键ID + */ + @TableId + private Integer id; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 父租户ID + */ + private String parentTenantId; + + /** + * 套餐类型(1、图片说话,2、口播) + */ + private Integer detailType; + @TableField(exist = false) + private String detailTypeDesc; + + /** + * 套餐id(user_consumption_package.id) + */ + private Integer packageId; + + /** + * 是否有水印(1-是,2-否) + */ + private Integer watermark; + @TableField(exist = false) + private String watermarkDesc; + + /** + * 语言(1:50+语言) + */ + private Integer language; + @TableField(exist = false) + private String languageDesc; + + /** + * 声音(1:400+声音) + */ + private Integer sound; + @TableField(exist = false) + private String soundDesc; + + /** + * 单个视频时长(s) + */ + private Integer videoTime; + + /** + * AI生成人像(1-是、2-否) + */ + private Integer aiPortrait; + @TableField(exist = false) + private String aiPortraitDesc; + + /** + * 照片唱歌(1-是、2-否) + */ + private Integer photoSing; + @TableField(exist = false) + private String photoSingDesc; + + /** + * AI生成脚本次数 + */ + private Integer aiCreateTime; + + /** + * 视频分辨率(1:720p、2:1080p) + */ + private Integer resolutionRatio; + @TableField(exist = false) + private String resolutionRatioDesc; + + /** + * 数字人模板(1-免费,2-VIP) + */ + private Integer humanTemplate; + @TableField(exist = false) + private String humanTemplateDesc; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 更新时间 + */ + private Date updateDate; + + /** + * 是否删除1是0否 + */ + private Integer isDel; + +} diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/UserTimeConfig.java b/suimangService/src/main/java/com/iformall/domain/po/sm/UserTimeConfig.java new file mode 100644 index 0000000..68f8465 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/UserTimeConfig.java @@ -0,0 +1,46 @@ +package com.iformall.domain.po.sm; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; +import java.io.Serializable; + +import io.swagger.models.auth.In; +import lombok.Data; + + +/** + * @Description + * @Author LRH + * @Date 2023-06-13 + */ +@Data +@TableName("user_time_config" ) +public class UserTimeConfig implements Serializable { + + private static final long serialVersionUID = 2953038588956565523L; + + @TableId + private Integer id; + + /** + * 用户类型(0-注册用户,1-邀请用户) + */ + private Integer userType; + + /** + * 默认时长(s) + */ + private Long time; + + private String tenantId; + + private String parentTenantId; + + private Date createDate; + + private Date updateDate; + + private Integer isDel; + +} diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceInfo.java b/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceInfo.java index 15dc6b6..2c99ba0 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceInfo.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceInfo.java @@ -2,7 +2,11 @@ package com.iformall.domain.po.sm; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.domain.po.base.TenantEntity; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import java.util.Date; import java.util.List; @@ -10,8 +14,11 @@ import java.util.List; /** * 声音表 */ +@TableName(value = "voice_info") @Data -public class VoiceInfo { +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class VoiceInfo extends TenantEntity { /** * 主键ID */ @@ -21,14 +28,6 @@ public class VoiceInfo { */ private Long languageId; /** - * 租户ID - */ - private String tenantId; - /** - * 父租户ID - */ - private String parentTenantId; - /** * 性别 */ private Integer sex; @@ -74,4 +73,8 @@ public class VoiceInfo { * 是否删除1是0否 */ private Integer isDel; + /** + * 年纪类型 EnumAgeType + */ + private Integer ageType; } diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceLanguage.java b/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceLanguage.java index ca5ef2d..d2799f7 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceLanguage.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceLanguage.java @@ -1,7 +1,11 @@ package com.iformall.domain.po.sm; +import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.domain.po.base.TenantEntity; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import java.util.Date; import java.util.Objects; @@ -9,21 +13,16 @@ import java.util.Objects; /** * 语种表 */ +@TableName(value = "voice_language") @Data -public class VoiceLanguage implements Comparable { +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class VoiceLanguage extends TenantEntity { /** * 主键ID */ private Long id; - /** - * 租户ID - */ - private String tenantId; - /** - * 父租户ID - */ - private String parentTenantId; /** * 国家code */ @@ -40,6 +39,10 @@ public class VoiceLanguage implements Comparable { * */ private String name; + /** + * + */ + private String chineseName; /** * 图片 */ @@ -57,19 +60,4 @@ public class VoiceLanguage implements Comparable { */ private Integer isDel; - @Override - public int compareTo(Object obj) { - // 判断是否是学生类型 - if (obj instanceof VoiceLanguage) { - VoiceLanguage s = (VoiceLanguage) obj; - // 如果是学生类型,如果学号相等,则不加入Set - if (Objects.equals(s.getLanguage(), this.getLanguage()) && Objects.equals(s.getCountry(), this.getCountry())) { - return 0; - } else { - return 1; - } - } else { - return 0; - } - } } diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceMaterial.java b/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceMaterial.java index 583cb97..06bb829 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceMaterial.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceMaterial.java @@ -118,5 +118,7 @@ public class VoiceMaterial extends TenantEntity { @TableField(exist = false) private List sendTypes; - + + private Integer type; + } diff --git a/suimangService/src/main/java/com/iformall/enums/sm/EnumHumanTemplateType.java b/suimangService/src/main/java/com/iformall/enums/sm/EnumHumanTemplateType.java new file mode 100644 index 0000000..b25320e --- /dev/null +++ b/suimangService/src/main/java/com/iformall/enums/sm/EnumHumanTemplateType.java @@ -0,0 +1,34 @@ +package com.iformall.enums.sm; + +/** + * 数字人模板 + */ +public enum EnumHumanTemplateType { + FREE(1, "免费"), + VIP(2, "VIP"); + + public static EnumHumanTemplateType getEnum(Integer code) { + for (EnumHumanTemplateType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumHumanTemplateType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/suimangService/src/main/java/com/iformall/enums/sm/EnumLanguageType.java b/suimangService/src/main/java/com/iformall/enums/sm/EnumLanguageType.java new file mode 100644 index 0000000..c55fd2c --- /dev/null +++ b/suimangService/src/main/java/com/iformall/enums/sm/EnumLanguageType.java @@ -0,0 +1,33 @@ +package com.iformall.enums.sm; + +/** + * 语言 + */ +public enum EnumLanguageType { + LANGUAGE(1, "50+"); + + public static EnumLanguageType getEnum(Integer code) { + for (EnumLanguageType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumLanguageType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/suimangService/src/main/java/com/iformall/enums/sm/EnumLogType.java b/suimangService/src/main/java/com/iformall/enums/sm/EnumLogType.java new file mode 100644 index 0000000..831aa20 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/enums/sm/EnumLogType.java @@ -0,0 +1,38 @@ +package com.iformall.enums.sm; + +/** + * 日志类型 + */ +public enum EnumLogType { + REGISTER_USER(1, "注册"), + INVITE_USER(2, "邀请新用户"), + BUY_PACKAGE(3, "套餐增加"), + PHOTO_SPEAK(4, "照片说话"), + AI_PHOTO(5, "AI生成照片"), + TALK(6, "口播"); + + public static EnumLogType getEnum(Integer code) { + for (EnumLogType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumLogType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/suimangService/src/main/java/com/iformall/enums/sm/EnumPackageDetailType.java b/suimangService/src/main/java/com/iformall/enums/sm/EnumPackageDetailType.java new file mode 100644 index 0000000..cdeaa2e --- /dev/null +++ b/suimangService/src/main/java/com/iformall/enums/sm/EnumPackageDetailType.java @@ -0,0 +1,34 @@ +package com.iformall.enums.sm; + +/** + * 套餐详细类型 + */ +public enum EnumPackageDetailType { + PHOTO_SPEAK(1, "照片说话"), + TALK(2, "口播"); + + public static EnumPackageDetailType getEnum(Integer code) { + for (EnumPackageDetailType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPackageDetailType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/suimangService/src/main/java/com/iformall/enums/sm/EnumPackageType.java b/suimangService/src/main/java/com/iformall/enums/sm/EnumPackageType.java new file mode 100644 index 0000000..59ca2b2 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/enums/sm/EnumPackageType.java @@ -0,0 +1,36 @@ +package com.iformall.enums.sm; + +/** + * 套餐类型 + */ +public enum EnumPackageType { + BASIC(1, "基础版"), + MAJOR(2, "专业版"), + ENHANCE(3, "加强版") + ; + + public static EnumPackageType getEnum(Integer code) { + for (EnumPackageType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPackageType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/suimangService/src/main/java/com/iformall/enums/sm/EnumResolutionRatioType.java b/suimangService/src/main/java/com/iformall/enums/sm/EnumResolutionRatioType.java new file mode 100644 index 0000000..7bbb7dd --- /dev/null +++ b/suimangService/src/main/java/com/iformall/enums/sm/EnumResolutionRatioType.java @@ -0,0 +1,34 @@ +package com.iformall.enums.sm; + +/** + * 分辨率 + */ +public enum EnumResolutionRatioType { + RESOLUTION_RATIO_720P(1, "720p"), + RESOLUTION_RATIO_1080P(2, "1080p"); + + public static EnumResolutionRatioType getEnum(Integer code) { + for (EnumResolutionRatioType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumResolutionRatioType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/suimangService/src/main/java/com/iformall/enums/sm/EnumSoundType.java b/suimangService/src/main/java/com/iformall/enums/sm/EnumSoundType.java new file mode 100644 index 0000000..04711ab --- /dev/null +++ b/suimangService/src/main/java/com/iformall/enums/sm/EnumSoundType.java @@ -0,0 +1,33 @@ +package com.iformall.enums.sm; + +/** + * 声音 + */ +public enum EnumSoundType { + SOUND(1, "400+"); + + public static EnumSoundType getEnum(Integer code) { + for (EnumSoundType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumSoundType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/suimangService/src/main/java/com/iformall/mapper/InviteCodeMapper.java b/suimangService/src/main/java/com/iformall/mapper/InviteCodeMapper.java index 9dfc638..69e6ed7 100644 --- a/suimangService/src/main/java/com/iformall/mapper/InviteCodeMapper.java +++ b/suimangService/src/main/java/com/iformall/mapper/InviteCodeMapper.java @@ -4,11 +4,13 @@ import com.iformall.common.CommonMapper; import com.iformall.domain.po.AliBusinessCircleOrder; import com.iformall.domain.po.sm.InviteCode; import com.iformall.service.sm.InviteCodeService; +import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -public interface InviteCodeMapper extends CommonMapper { +public interface InviteCodeMapper extends CommonMapper { + void addUseTotal(@Param("id") Long id, @Param("total") Integer total); } diff --git a/suimangService/src/main/java/com/iformall/mapper/MusicInfoServiceMapper.java b/suimangService/src/main/java/com/iformall/mapper/MusicInfoServiceMapper.java index f409cff..196903b 100644 --- a/suimangService/src/main/java/com/iformall/mapper/MusicInfoServiceMapper.java +++ b/suimangService/src/main/java/com/iformall/mapper/MusicInfoServiceMapper.java @@ -3,6 +3,15 @@ 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 org.apache.ibatis.annotations.Param; + +import java.util.List; public interface MusicInfoServiceMapper extends CommonMapper { + List findList(MusicInfo record); + + void deleteById(@Param("id")Long id); + + List userMusic(MusicInfo record); } diff --git a/suimangService/src/main/java/com/iformall/mapper/UserConsumptionPackageMapper.java b/suimangService/src/main/java/com/iformall/mapper/UserConsumptionPackageMapper.java new file mode 100644 index 0000000..861c007 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/mapper/UserConsumptionPackageMapper.java @@ -0,0 +1,10 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.sm.UserConsumptionPackage; + + +public interface UserConsumptionPackageMapper extends CommonMapper { + + +} diff --git a/suimangService/src/main/java/com/iformall/mapper/UserCreateVideoNumMapper.java b/suimangService/src/main/java/com/iformall/mapper/UserCreateVideoNumMapper.java index e0b27e3..d5b60f4 100644 --- a/suimangService/src/main/java/com/iformall/mapper/UserCreateVideoNumMapper.java +++ b/suimangService/src/main/java/com/iformall/mapper/UserCreateVideoNumMapper.java @@ -7,5 +7,5 @@ import org.apache.ibatis.annotations.Param; public interface UserCreateVideoNumMapper extends CommonMapper { - Boolean addOrSubtractNumberOfTimes(@Param("type") Integer type,@Param("createVideoNum") UserCreateVideoNum createVideoNum); + Boolean addOrSubtractNumberOfTimes(@Param("type") Integer type, @Param("createVideoNum") UserCreateVideoNum createVideoNum, @Param("useCredit") Double useCredit, @Param("time") Double videoTime); } diff --git a/suimangService/src/main/java/com/iformall/mapper/UserCreditLogMapper.java b/suimangService/src/main/java/com/iformall/mapper/UserCreditLogMapper.java new file mode 100644 index 0000000..f511b14 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/mapper/UserCreditLogMapper.java @@ -0,0 +1,11 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.sm.UserConsumptionPackage; +import com.iformall.domain.po.sm.UserCreditLog; + + +public interface UserCreditLogMapper extends CommonMapper { + + +} diff --git a/suimangService/src/main/java/com/iformall/mapper/UserPackageDetailMapper.java b/suimangService/src/main/java/com/iformall/mapper/UserPackageDetailMapper.java new file mode 100644 index 0000000..93ec958 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/mapper/UserPackageDetailMapper.java @@ -0,0 +1,11 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.sm.UserCreditLog; +import com.iformall.domain.po.sm.UserPackageDetail; + + +public interface UserPackageDetailMapper extends CommonMapper { + + +} diff --git a/suimangService/src/main/java/com/iformall/mapper/UserTimeConfigServiceMapper.java b/suimangService/src/main/java/com/iformall/mapper/UserTimeConfigServiceMapper.java new file mode 100644 index 0000000..2133364 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/mapper/UserTimeConfigServiceMapper.java @@ -0,0 +1,7 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.sm.UserTimeConfig; + +public interface UserTimeConfigServiceMapper extends CommonMapper { +} diff --git a/suimangService/src/main/java/com/iformall/mapper/VoiceLanguageMapper.java b/suimangService/src/main/java/com/iformall/mapper/VoiceLanguageMapper.java index b8777a8..1d5e054 100644 --- a/suimangService/src/main/java/com/iformall/mapper/VoiceLanguageMapper.java +++ b/suimangService/src/main/java/com/iformall/mapper/VoiceLanguageMapper.java @@ -7,7 +7,7 @@ import org.apache.ibatis.annotations.Param; import java.util.HashSet; -public interface VoiceLanguageMapper extends CommonMapper { +public interface VoiceLanguageMapper extends CommonMapper { void saveBatch(@Param("set") HashSet set); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/MusicInfoService.java b/suimangService/src/main/java/com/iformall/service/sm/MusicInfoService.java index df1f241..a33ee64 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/MusicInfoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/MusicInfoService.java @@ -1,13 +1,19 @@ 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 music(); - MusicInfo getById(Long voiceMaterialId); + + PageInfo music(Integer pageNum, Integer pageSize, MusicInfo record); + ResultData saveOrUpdate(MusicInfo record); + + void deleteById(Long id); + + PageInfo userMusic(Integer pageNum, Integer pageSize, MusicInfo record); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/PhotoSpeakVideoService.java b/suimangService/src/main/java/com/iformall/service/sm/PhotoSpeakVideoService.java index 5cde9e4..b2e4d1c 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/PhotoSpeakVideoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/PhotoSpeakVideoService.java @@ -59,4 +59,10 @@ public interface PhotoSpeakVideoService { int updateById(PhotoSpeakVideo video); + void videoHy(PhotoSpeakVideo speakVideo,Boolean flag); + + void uploadHyVideo(PhotoSpeakVideo mouldVideo); + + List getUpLoadHyIngList(); + } diff --git a/suimangService/src/main/java/com/iformall/service/sm/UserConsumptionPackageService.java b/suimangService/src/main/java/com/iformall/service/sm/UserConsumptionPackageService.java new file mode 100644 index 0000000..131f0d7 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/service/sm/UserConsumptionPackageService.java @@ -0,0 +1,15 @@ +package com.iformall.service.sm; + +import com.iformall.domain.po.sm.UserConsumptionPackage; + +import java.util.List; + +public interface UserConsumptionPackageService { + + UserConsumptionPackage getPackageInfoByType(Integer enumPackageType); + + List getPackageInfo(); + + UserConsumptionPackage getPackageInfoById(Integer id); + +} diff --git a/suimangService/src/main/java/com/iformall/service/sm/UserCreateVideoNumService.java b/suimangService/src/main/java/com/iformall/service/sm/UserCreateVideoNumService.java index 07d21ca..f5cbded 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/UserCreateVideoNumService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/UserCreateVideoNumService.java @@ -11,9 +11,11 @@ public interface UserCreateVideoNumService { Boolean initializationUserCreateVideoNum(Long id); - Boolean addOrSubtractNumberOfTimes(Integer type, UserCreateVideoNum createVideoNum); + Boolean addOrSubtractNumberOfTimes(Integer type, UserCreateVideoNum createVideoNum,Double useCredit,Double videoTime); UserCreateVideoNum queryInfoByUserId(Long userId); void uploadUserCreateVideoNum(Map collect); + + void inviteUserAddCreatTime(Long id); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/UserCreditLogService.java b/suimangService/src/main/java/com/iformall/service/sm/UserCreditLogService.java new file mode 100644 index 0000000..cb8eb71 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/service/sm/UserCreditLogService.java @@ -0,0 +1,8 @@ +package com.iformall.service.sm; + +import com.iformall.domain.po.sm.UserCreditLog; + +public interface UserCreditLogService { + + void insertLog(UserCreditLog log); +} diff --git a/suimangService/src/main/java/com/iformall/service/sm/UserPackageDetailService.java b/suimangService/src/main/java/com/iformall/service/sm/UserPackageDetailService.java new file mode 100644 index 0000000..1d8d2f8 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/service/sm/UserPackageDetailService.java @@ -0,0 +1,11 @@ +package com.iformall.service.sm; + + +import com.iformall.domain.po.sm.UserPackageDetail; + +import java.util.List; + +public interface UserPackageDetailService { + List getDetailInfo(); + +} diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeInfoServiceImpl.java index aaad6fa..37e74f2 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeInfoServiceImpl.java @@ -8,10 +8,17 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.sm.InviteCode; import com.iformall.domain.po.sm.InviteCodeInfo; +import com.iformall.domain.po.sm.UserCreateVideoNum; +import com.iformall.domain.po.sm.UserCreditLog; +import com.iformall.enums.sm.EnumLogType; import com.iformall.mapper.InviteCodeInfoMapper; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.sm.InviteCodeInfoService; import com.iformall.service.sm.InviteCodeService; +import com.iformall.service.sm.UserCreateVideoNumService; +import com.iformall.service.sm.UserCreditLogService; +import lombok.Data; +import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -32,6 +39,12 @@ public class InviteCodeInfoServiceImpl implements InviteCodeInfoService { @Autowired private WxCUserBasicInfoService wxCUserBasicInfoService; + @Autowired + private UserCreateVideoNumService userCreateVideoNumService; + + @Autowired + private UserCreditLogService userCreditLogService; + /** * 使用邀请码 * @@ -64,7 +77,22 @@ public class InviteCodeInfoServiceImpl implements InviteCodeInfoService { codeInfo.setPhone(codeInfo.getPhone()); inviteCodeInfoMapper.insert(codeInfo); - inviteCodeService.addUseTotal(info.getId(), info.getTotal()); + //邀请码最多使用10次 + if (info.getTotal() < 10){ + inviteCodeService.addUseTotal(info.getId(), info.getTotal()); + userCreateVideoNumService.inviteUserAddCreatTime(info.getId()); + + //根据用户id获取邀请的时候送多少积分 + UserCreateVideoNum videoNum = userCreateVideoNumService.queryInfoByUserId(cUser.getId()); + //插入日志信息 + UserCreditLog log = new UserCreditLog(); + log.setId(IdWorker.get().nextId()); + log.setUserId(cUser.getId()); + log.setCredits(videoNum.getInviteBaseCredits()); + log.setType(EnumLogType.INVITE_USER.getCode()); + log.setRemark(EnumLogType.INVITE_USER.getMessage()); + userCreditLogService.insertLog(log); + } return new ResultData(); } else { return new ResultData(ErrorCode.SYS_PARAMETER_ERROR, "邀请码不存在"); diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeServiceImpl.java index 8543abc..17d5ac4 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeServiceImpl.java @@ -53,9 +53,6 @@ public class InviteCodeServiceImpl implements InviteCodeService { @Override public void addUseTotal(Long id, Integer total) { - InviteCode code = new InviteCode(); - code.setId(id); - code.setTotal(total + 1); - inviteCodeMapper.updateById(code); + inviteCodeMapper.addUseTotal(id, total); } } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/MusicInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/MusicInfoServiceImpl.java index 1832ec4..20b9829 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/MusicInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/MusicInfoServiceImpl.java @@ -1,15 +1,24 @@ 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.ErrorCode; +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 +28,60 @@ public class MusicInfoServiceImpl implements MusicInfoService { @Autowired private MusicInfoServiceMapper musicInfoServiceMapper; - @Override - public List music() { - return musicInfoServiceMapper.selectList(new LambdaQueryWrapper().eq(MusicInfo::getIsDel, 0)); - } + @Autowired + VideoFactory videoFactory; + + @Autowired + String videoType; @Override public MusicInfo getById(Long voiceMaterialId) { return musicInfoServiceMapper.selectById(voiceMaterialId); } + + @Override + public PageInfo 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.getVoiceId()); + if (videoDetail.isSuccess() + && StringUtils.isNotBlank(videoDetail.getDuration()) + && !"0.0".equals(videoDetail.getDuration()) + && StringUtils.isNotBlank(videoDetail.getTitle()) + && StringUtils.isNotBlank(videoDetail.getVideoUrl())) { + record.setTime(Double.valueOf(videoDetail.getDuration())); + record.setSize(videoDetail.getSize()); + record.setUrl(videoDetail.getVideoUrl()); + record.setName(videoDetail.getTitle().split("\\.")[0]); + } + + if (StringUtils.isBlank(record.getUrl())) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "素材为空"); + } + + 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); + } + + @Override + public void deleteById(Long id) { + musicInfoServiceMapper.deleteById(id); + } + + @Override + public PageInfo userMusic(Integer pageNum, Integer pageSize, MusicInfo record) { + return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> musicInfoServiceMapper.userMusic(record)); + } } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java index c374dfb..1a659d2 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java @@ -9,10 +9,13 @@ import com.iformall.common.IdWorker; import com.iformall.common.ResultData; import com.iformall.domain.po.sm.*; import com.iformall.enums.*; +import com.iformall.enums.sm.EnumLogType; +import com.iformall.enums.sm.EnumPackageType; import com.iformall.mapper.PhotoSpeakVideoMapper; import com.iformall.service.sm.*; import com.iformall.sm.*; import com.iformall.utils.Base64Util; +import com.iformall.utils.DateUtils; import com.iformall.video.VideoFactory; import com.iformall.video.entity.VideUploadResult; import org.apache.commons.lang3.StringUtils; @@ -66,6 +69,13 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { @Autowired private MusicInfoService musicInfoService; + @Autowired + private UserConsumptionPackageService userConsumptionPackageService; + + @Autowired + private UserCreditLogService userCreditLogService; + + private final static String str = "\uD83D\uDD57"; @Override public PageInfo listAsPage(PhotoSpeakVideo record, Integer pageIndex, Integer pageSize) { @@ -115,8 +125,9 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { voiceMouldObject.put("personTypeStr","default"); voiceMouldObject.put("speakType",0); voiceMouldObject.put("speakTypeStr","default"); + EnumSpeakType speakType = null; if(StringUtils.isNotBlank(record.getSpeakTypeStr())){ - EnumSpeakType speakType = EnumSpeakType.getEnumByMsg(record.getSpeakTypeStr()); + speakType = EnumSpeakType.getEnumByMsg(record.getSpeakTypeStr()); if(speakType == null){ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"声音类型信息错误"); } @@ -205,6 +216,24 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { Integer voiceFrom = photoSpeakVideo.getVoiceFrom(); String voiceMouldSmId = null; String voiceType = "default";//默认 + 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); +// } +// } String voiceMaterialUrl = null; if(EnumVoiceFrom.FROM_MOULD.getCode().equals(voiceFrom)){ @@ -213,6 +242,7 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { voiceMouldSmId = personMouldObject.getString("mouldSmId"); Integer speakType = personMouldObject.getInteger("speakType"); Integer personType = personMouldObject.getInteger("personType"); + sex = personMouldObject.getInteger("sex"); if(speakType != null && speakType > 0){ voiceType = EnumSpeakType.getEnum(speakType).getMessage(); }else if(personType != null && personType > 0){ @@ -223,10 +253,24 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { if(StringUtils.isBlank(voiceMouldSmId)){ msg = "参数错误,未找到声音模板数据"; } + + //获取视频时长 + AiPreviewParam param = new AiPreviewParam(); + if (StringUtils.isBlank(photoSpeakVideo.getPaperwork())){ + msg = "未填写视频文案数据"; + } + param.setGen_txt(photoSpeakVideo.getPaperwork().replaceAll(str, "[*]")); + param.setGender(sex == 1 ? "male" : "female"); + param.setVoice_id(voiceMouldSmId); + param.setVoice_style(voiceType); + AiPreviewResult result = AiVideoHelper.voicePreview(param); + if (result.isSuccess()) { + videoTime = result.getTime(); + } }else if(EnumVoiceFrom.FROM_UPD.getCode().equals(voiceFrom)){ voiceMaterialUrl = photoSpeakVideo.getVoiceMaterialUrl(); + VoiceMaterial voiceMaterial = voiceMaterialService.getById(photoSpeakVideo.getVoiceMaterialId()); if(StringUtils.isBlank(voiceMaterialUrl)){ - VoiceMaterial voiceMaterial = voiceMaterialService.getById(photoSpeakVideo.getVoiceMaterialId()); voiceMaterialService.handVideoUrl(voiceMaterial); voiceMaterialUrl = voiceMaterial.getMaterial(); videoUpd.setVoiceMaterialUrl(voiceMaterialUrl); @@ -234,20 +278,54 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { if(StringUtils.isBlank(voiceMaterialUrl)){ msg = "未找到上传声音文件"; } + + //判断用户时长是否够创建该视频 + VideUploadResult videoDetail = videoFactory.getExcutor(videoType).getVideoDetailWithCache(voiceMaterial.getVideoId()); + if (videoDetail.isSuccess() && StringUtils.isNotBlank(videoDetail.getDuration()) && !"0.0".equals(videoDetail.getDuration())) { + String duration = videoDetail.getDuration(); + videoTime = Double.valueOf(duration); + } } else if (EnumVoiceFrom.MUSIC.getCode().equals(voiceFrom)) { Long musicId = photoSpeakVideo.getMusicId(); MusicInfo musicInfo = musicInfoService.getById(musicId); - if (ObjectUtils.isEmpty(musicInfo)){ + if (ObjectUtils.isEmpty(musicInfo)) { msg = "未找到音乐文件"; } voiceMaterialUrl = musicInfo.getUrl(); if (StringUtils.isBlank(voiceMaterialUrl)) { msg = "音乐文件错误"; } + videoTime = Double.valueOf(musicInfo.getTime()); } else { msg = "声音数据异常"; } + //判断获取创建的视频时长 + if (videoTime == null){ + videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); + videoUpd.setVideoMsg("获取创建的视频时长失败"); + 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); +// } + videoUpd.setVideoTime(String.valueOf(videoTime)); + if(StringUtils.isBlank(voiceMouldSmId) && StringUtils.isBlank(voiceMaterialUrl)){ videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); videoUpd.setVideoMsg(msg); @@ -263,87 +341,79 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { return new AsyncResult<>(0); } - UserCreateVideoNum createVideoNum = new UserCreateVideoNum(); + double useCredit = 0; + //修改用户创建视频时间表 if (flag) { - //修改用户生成视频次数 - createVideoNum = userCreateVideoNumService.queryInfoByUserId(photoSpeakVideo.getUserId()); - if (ObjectUtils.isEmpty(createVideoNum)) { - return new AsyncResult<>("用户没有生成视频次数"); - } else { - //剩余条数 - Integer residueNum = createVideoNum.getResidueNum(); - if (residueNum.intValue() <= 0) { - return new AsyncResult<>("剩余生成视频次数不足"); - } else { - //减去生成视频次数 - Boolean times = userCreateVideoNumService.addOrSubtractNumberOfTimes(1, createVideoNum); - if (!times) { - return new AsyncResult<>("剩余生成视频次数不足"); - } - } - } +// //每秒消耗的积分 +// 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); } try { - AiPreviewParam previewParam = new AiPreviewParam(); - previewParam.setVoice_id(voiceMouldSmId); - AiPhotoSpeakParam param = new AiPhotoSpeakParam(); param.setImg(Base64Util.imageUrlToBase64(photoSpeakVideo.getPersonPhotoUrl())); - param.setVoice_id(voiceMouldSmId); + param.setVoice_id(voiceMouldSmId == null ? "default" : voiceMouldSmId); String voiceMouldSm = photoSpeakVideo.getVoiceMouldSm(); - JSONObject jsonObject = JSON.parseObject(voiceMouldSm); - Integer speakTypeStr = jsonObject.getInteger("speakType"); - param.setVoice_style(StringUtils.isBlank(voiceType) ? "default" : EnumSpeakType.getEnum(speakTypeStr).getType()); - - previewParam.setVoice_style(StringUtils.isBlank(voiceType) ? "default" : EnumSpeakType.getEnum(speakTypeStr).getType()); + Integer speakType = 0; + if (!StringUtils.isBlank(voiceMouldSm)) { + JSONObject jsonObject = JSON.parseObject(voiceMouldSm); + speakType = jsonObject.getInteger("speakType"); + } + param.setVoice_style(EnumSpeakType.getEnum(speakType).getType()); - Integer sex = jsonObject.getInteger("sex"); if (EnumVoiceFrom.FROM_MOULD.getCode().equals(voiceFrom)) { - param.setGen_txt(paperwork); - previewParam.setGen_txt(paperwork); + param.setGen_txt(paperwork.replaceAll(str, "[*]")); if (sex == 1){ param.setGender("male"); - previewParam.setGender("male"); }else if (sex == 2){ param.setGender("female"); - previewParam.setGender("female"); }else { param.setGender("unknown"); - previewParam.setGender("unknown"); } param.setUrl("None"); } else if (EnumVoiceFrom.FROM_UPD.getCode().equals(voiceFrom)) { param.setGen_txt("None"); param.setGender("None"); param.setUrl(voiceMaterialUrl); - } - - //TTS音色预览 - AiPreviewResult result = AiVideoHelper.voicePreview(previewParam); - if (!result.isSuccess()) { - videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); - videoUpd.setVideoMsg(result.getMsgInfo(result.getCode(), result.getMsg())); - videoUpd.setCreateVideoDate(new Date()); - this.saveOrUpdate(videoUpd); - - if (flag) { - //如果生成视频失败了,就把创建视频的次数加回去 - userCreateVideoNumService.addOrSubtractNumberOfTimes(2, createVideoNum); - } - return new AsyncResult<>(0); + }else if (EnumVoiceFrom.MUSIC.getCode().equals(voiceFrom)){ + param.setGen_txt("None"); + param.setGender("None"); + param.setUrl(voiceMaterialUrl); } AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); if (video.isSuccess()) { videoUpd.setVideoPath(video.getUrl()); + videoUpd.setSaveDir(video.getSaveDir()); videoUpd.setVideoStatus(EnumVideoStatus.success.getCode()); videoUpd.setVideoMsg("success"); videoUpd.setCreateVideoDate(new Date()); this.saveOrUpdate(videoUpd); 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); + this.uploadVideo(videoUpd); return new AsyncResult<>(1); @@ -353,17 +423,17 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { this.saveOrUpdate(videoUpd); if (flag) { - //如果生成视频失败了,就把创建视频的次数加回去 - userCreateVideoNumService.addOrSubtractNumberOfTimes(2, createVideoNum); + //如果生成视频失败了,就把创建视频积分加回去 + userCreateVideoNumService.addOrSubtractNumberOfTimes(2, videoNum, useCredit, videoTime); } return new AsyncResult<>(0); } catch (Exception e) { - e.printStackTrace(); if (flag) { - //如果生成视频失败了,就把创建视频的次数加回去 - userCreateVideoNumService.addOrSubtractNumberOfTimes(2, createVideoNum); + //如果生成视频失败了,就把创建视频积分加回去 + userCreateVideoNumService.addOrSubtractNumberOfTimes(2, videoNum, useCredit, videoTime); } + e.printStackTrace(); videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); videoUpd.setVideoMsg("请求异常"); this.saveOrUpdate(videoUpd); @@ -421,4 +491,45 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { return photoSpeakVideoMapper.updateById(video); } + @Override + public void videoHy(PhotoSpeakVideo speakVideo,Boolean flag) { + AiVideoHqParam param = new AiVideoHqParam(); + param.setSave_dir(speakVideo.getSaveDir()); + AiVideoHqResult result = AiVideoHelper.videoHq(param); + if(result.isSuccess()){ + speakVideo.setVideoHyStatus(EnumVideoStatus.success.getCode()); + speakVideo.setVideoMsg("超分视频生成成功"); + speakVideo.setIsHy(EnumYesOrNo.YES.getCode()); + this.updateById(speakVideo); + + this.uploadHyVideo(speakVideo); + } + + speakVideo.setVideoHyStatus(EnumVideoStatus.fail.getCode()); + speakVideo.setVideoMsg("超分视频失败"); + this.updateById(speakVideo); + } + + @Override + public void uploadHyVideo(PhotoSpeakVideo mouldVideo){ + if(EnumVideoStatus.success.getCode().equals(mouldVideo.getVideoHyStatus()) + || EnumVideoStatus.upload_fail.getCode().equals(mouldVideo.getVideoHyStatus())){ + String url = mouldVideo.getPhotoSpeakPathUri() + mouldVideo.getVideoPath(); + VideUploadResult result = videoFactory.getExcutor(videoType).uploadVideoPath(mouldVideo.getTitle(), url); + if(result.isSuccess()){ + PhotoSpeakVideo videoUpd = new PhotoSpeakVideo(); + videoUpd.setId(mouldVideo.getId()); + videoUpd.setVideoId(result.getVideoId()); + videoUpd.setVideoHyStatus(EnumVideoStatus.upload_ing.getCode()); + this.saveOrUpdate(videoUpd); + } + } + } + + @Override + public List getUpLoadHyIngList() { + PhotoSpeakVideo umVideoQ = new PhotoSpeakVideo(); + umVideoQ.setVideoHyStatus(EnumVideoStatus.upload_ing.getCode()); + return photoSpeakVideoMapper.getSortList(umVideoQ); + } } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/UserConsumptionPackageImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/UserConsumptionPackageImpl.java new file mode 100644 index 0000000..c20f0c1 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/UserConsumptionPackageImpl.java @@ -0,0 +1,78 @@ +package com.iformall.service.sm.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.iformall.domain.po.sm.UserConsumptionPackage; +import com.iformall.domain.po.sm.UserPackageDetail; +import com.iformall.enums.EnumLanguages; +import com.iformall.enums.EnumYesOrNo; +import com.iformall.enums.sm.*; +import com.iformall.mapper.UserConsumptionPackageMapper; +import com.iformall.service.sm.UserConsumptionPackageService; +import com.iformall.service.sm.UserPackageDetailService; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class UserConsumptionPackageImpl implements UserConsumptionPackageService { + + @Autowired + private UserConsumptionPackageMapper userConsumptionPackageMapper; + + @Autowired + private UserPackageDetailService userPackageDetailService; + + @Override + public UserConsumptionPackage getPackageInfoByType(Integer packageType) { + return userConsumptionPackageMapper + .selectOne(new LambdaQueryWrapper() + .eq(UserConsumptionPackage::getIsDel, 0) + .eq(UserConsumptionPackage::getType, packageType)); + } + + @Override + public UserConsumptionPackage getPackageInfoById(Integer id) { + return userConsumptionPackageMapper + .selectOne(new LambdaQueryWrapper() + .eq(UserConsumptionPackage::getIsDel, 0) + .eq(UserConsumptionPackage::getId, id)); + } + + @Override + public List getPackageInfo() { + List consumptionPackages = userConsumptionPackageMapper.selectList(new LambdaQueryWrapper().eq(UserConsumptionPackage::getIsDel, 0)); + List detailInfo = userPackageDetailService.getDetailInfo(); + if (CollectionUtils.isEmpty(consumptionPackages) || CollectionUtils.isEmpty(detailInfo)) { + return consumptionPackages; + } + + for (UserConsumptionPackage consumptionPackage : consumptionPackages) { + consumptionPackage.setTypeDesc(EnumPackageType.getEnum(consumptionPackage.getType()).getMessage()); + List list = new ArrayList<>(); + for (UserPackageDetail detail : detailInfo) { + if (consumptionPackage.getId().equals(detail.getPackageId())) { + detail.setDetailTypeDesc(EnumPackageDetailType.getEnum(detail.getDetailType()).getMessage()); + detail.setWatermarkDesc(EnumYesOrNo.getEnum(detail.getWatermark()).getMessage()); + detail.setLanguageDesc(EnumLanguageType.getEnum(detail.getLanguage()).getMessage()); + detail.setSoundDesc(EnumSoundType.getEnum(detail.getSound()).getMessage()); + detail.setResolutionRatioDesc(EnumResolutionRatioType.getEnum(detail.getResolutionRatio()).getMessage()); + + if (detail.getDetailType().equals(EnumPackageDetailType.PHOTO_SPEAK.getCode())) { + detail.setAiPortraitDesc(EnumYesOrNo.getEnum(detail.getAiPortrait()).getMessage()); + detail.setPhotoSingDesc(EnumYesOrNo.getEnum(detail.getPhotoSing()).getMessage()); + } + + if (detail.getDetailType().equals(EnumPackageDetailType.TALK.getCode())) { + detail.setHumanTemplateDesc(EnumHumanTemplateType.getEnum(detail.getHumanTemplate()).getMessage()); + } + list.add(detail); + } + } + consumptionPackage.setUserPackageDetails(list); + } + return consumptionPackages; + } +} diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/UserCreateVideoNumServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/UserCreateVideoNumServiceImpl.java index eb55df1..1c95494 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/UserCreateVideoNumServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/UserCreateVideoNumServiceImpl.java @@ -2,17 +2,23 @@ package com.iformall.service.sm.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.iformall.common.IdWorker; +import com.iformall.domain.po.sm.UserConsumptionPackage; import com.iformall.domain.po.sm.UserCreateVideoNum; +import com.iformall.domain.po.sm.UserCreditLog; +import com.iformall.enums.sm.EnumLogType; +import com.iformall.enums.sm.EnumPackageType; import com.iformall.mapper.UserCreateVideoNumMapper; +import com.iformall.service.sm.UserConsumptionPackageService; import com.iformall.service.sm.UserCreateVideoNumService; -import io.swagger.models.auth.In; +import com.iformall.service.sm.UserCreditLogService; +import com.iformall.utils.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; import java.util.Date; import java.util.Map; @@ -24,11 +30,15 @@ public class UserCreateVideoNumServiceImpl implements UserCreateVideoNumService @Autowired private UserCreateVideoNumMapper userCreateVideoNumMapper; - //总条数初始值 - private static final Integer RESIDUE_TOTAL = 10; + + @Autowired + private UserConsumptionPackageService userConsumptionPackageService; + + @Autowired + private UserCreditLogService userCreditLogService; /** - * 初始化注册用户创建视频的次数 + * 初始化注册用户创建视频的时长 * * @param id 用户id * @Author LWH @@ -36,26 +46,55 @@ public class UserCreateVideoNumServiceImpl implements UserCreateVideoNumService * @date: 2023/6/8 10:23 */ public Boolean initializationUserCreateVideoNum(Long id) { + //注册即送最基础版的积分 + UserConsumptionPackage packageInfo = userConsumptionPackageService.getPackageInfoByType(EnumPackageType.BASIC.getCode()); UserCreateVideoNum createVideoNum = new UserCreateVideoNum(); - createVideoNum.setId(IdWorker.get().nextId()); - createVideoNum.setUserId(id); - createVideoNum.setResidueNum(RESIDUE_TOTAL); - createVideoNum.setResidueTotal(RESIDUE_TOTAL); - Date date = new Date(); - createVideoNum.setCreateDate(date); - createVideoNum.setUpdateDate(date); - createVideoNum.setIsDel(0); - return userCreateVideoNumMapper.insert(createVideoNum) > 0; + if (!ObjectUtils.isEmpty(packageInfo)) { + createVideoNum.setId(IdWorker.get().nextId()); + createVideoNum.setUserId(id); + //有效期 + createVideoNum.setEffectiveDate(DateUtils.getTimeAfterDays(packageInfo.getValidityDuration(), new Date())); + //积分 + createVideoNum.setUserCredits(packageInfo.getCredit()); + createVideoNum.setResidueCredits(packageInfo.getCredit()); + + createVideoNum.setInviteBaseCredits(packageInfo.getInviteUserCredit()); + createVideoNum.setVideoPrice(packageInfo.getVideoPrice()); + createVideoNum.setPhotoPrice(packageInfo.getPhotoPrice()); + createVideoNum.setTalkPrice(packageInfo.getTalkPrice()); + //插入类型 + createVideoNum.setPackageId(packageInfo.getId()); + + Date date = new Date(); + createVideoNum.setCreateDate(date); + createVideoNum.setUpdateDate(date); + createVideoNum.setIsDel(0); + + //插入日志信息 + UserCreditLog log = new UserCreditLog(); + log.setId(IdWorker.get().nextId()); + log.setUserId(id); + log.setCredits(packageInfo.getCredit()); + log.setType(EnumLogType.REGISTER_USER.getCode()); + log.setRemark(EnumLogType.REGISTER_USER.getMessage()); + userCreditLogService.insertLog(log); + + return userCreateVideoNumMapper.insert(createVideoNum) > 0; + } + return false; } @Override - public Boolean addOrSubtractNumberOfTimes(Integer type, UserCreateVideoNum createVideoNum) { - return userCreateVideoNumMapper.addOrSubtractNumberOfTimes(type,createVideoNum); + public Boolean addOrSubtractNumberOfTimes(Integer type, UserCreateVideoNum createVideoNum, Double useCredit, Double videoTime) { + return userCreateVideoNumMapper.addOrSubtractNumberOfTimes(type, createVideoNum, useCredit, videoTime); } @Override public UserCreateVideoNum queryInfoByUserId(Long userId) { - return userCreateVideoNumMapper.selectOne(new LambdaQueryWrapper().eq(UserCreateVideoNum::getUserId, userId)); + return userCreateVideoNumMapper + .selectOne(new LambdaQueryWrapper() + .eq(UserCreateVideoNum::getIsDel, 0) + .eq(UserCreateVideoNum::getUserId, userId)); } @Override @@ -66,8 +105,20 @@ public class UserCreateVideoNumServiceImpl implements UserCreateVideoNumService videoNum.setCreateAllTime(entry.getValue()); userCreateVideoNumMapper.update(videoNum, new LambdaUpdateWrapper() - .eq(UserCreateVideoNum::getIsDel, 0) - .eq(UserCreateVideoNum::getUserId, entry.getKey())); + .eq(UserCreateVideoNum::getIsDel, 0) + .eq(UserCreateVideoNum::getUserId, entry.getKey())); + } + } + + /** + * 使用邀请码用户增加时长 + */ + @Override + public void inviteUserAddCreatTime(Long id) { + UserCreateVideoNum videoNum = queryInfoByUserId(id); + if (!ObjectUtils.isEmpty(videoNum)) { + videoNum.setUserCredits(videoNum.getUserCredits() + videoNum.getInviteBaseCredits()); + userCreateVideoNumMapper.updateById(videoNum); } } } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/UserCreditLogServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/UserCreditLogServiceImpl.java new file mode 100644 index 0000000..bd42126 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/UserCreditLogServiceImpl.java @@ -0,0 +1,19 @@ +package com.iformall.service.sm.impl; + +import com.iformall.domain.po.sm.UserCreditLog; +import com.iformall.mapper.UserCreditLogMapper; +import com.iformall.service.sm.UserCreditLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class UserCreditLogServiceImpl implements UserCreditLogService { + + @Autowired + private UserCreditLogMapper userCreditLogMapper; + + @Override + public void insertLog(UserCreditLog log) { + userCreditLogMapper.insert(log); + } +} diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/UserPackageDetailServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/UserPackageDetailServiceImpl.java new file mode 100644 index 0000000..22423c5 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/UserPackageDetailServiceImpl.java @@ -0,0 +1,23 @@ +package com.iformall.service.sm.impl; + + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.iformall.domain.po.sm.UserPackageDetail; +import com.iformall.mapper.UserPackageDetailMapper; +import com.iformall.service.sm.UserPackageDetailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class UserPackageDetailServiceImpl implements UserPackageDetailService { + + @Autowired + private UserPackageDetailMapper userPackageDetailMapper; + + @Override + public List getDetailInfo() { + return userPackageDetailMapper.selectList(new LambdaQueryWrapper().eq(UserPackageDetail::getIsDel, 0)); + } +} diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java index 2f02512..283cc21 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java @@ -27,9 +27,11 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { @Autowired private VoiceMapper voiceMapper; + private final static String str = "\uD83D\uDD57"; + @Override public List chooseType(Long id) { - List voiceInfos = voiceMapper.selectList(new LambdaQueryWrapper().eq(VoiceInfo::getLanguageId, id).orderByAsc(VoiceInfo::getDisplayName).select(VoiceInfo::getId, VoiceInfo::getDisplayName, VoiceInfo::getStyleList)); + List voiceInfos = voiceMapper.selectList(new LambdaQueryWrapper().eq(VoiceInfo::getLanguageId, id).orderByAsc(VoiceInfo::getDisplayName).select(VoiceInfo::getId, VoiceInfo::getDisplayName, VoiceInfo::getStyleList,VoiceInfo::getSex,VoiceInfo::getAgeType)); voiceInfos.forEach(x -> { if (StringUtils.isNotEmpty(x.getStyleList())) { List strings = JSON.parseArray(x.getStyleList(), String.class); @@ -40,6 +42,7 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { x.setStyle(list); } else { x.setStyle(Lists.newArrayList()); + } }); return voiceInfos; @@ -52,15 +55,14 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { @Override public ResultData voicePreview(AiPreviewParam aiPreviewParam) { - if (aiPreviewParam.getVoice_id() == null || StringUtils.isBlank(aiPreviewParam.getGen_txt())) { - return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "参数不能为空"); - } VoiceInfo voiceInfo = voiceMapper.selectOne(new LambdaQueryWrapper().eq(VoiceInfo::getIsDel, 0).eq(VoiceInfo::getId, aiPreviewParam.getVoice_id())); - + if (ObjectUtils.isEmpty(voiceInfo)){ + return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "声音信息不存在"); + } AiPreviewParam param = new AiPreviewParam(); - param.setGen_txt(aiPreviewParam.getGen_txt()); + param.setGen_txt(aiPreviewParam.getGen_txt().replaceAll(str,"[*]")); param.setVoice_id(voiceInfo.getMouldSmId()); - param.setVoice_style(StringUtils.isBlank(aiPreviewParam.getVoice_style()) ? "default" : aiPreviewParam.getVoice_style()); + param.setVoice_style(StringUtils.isBlank(aiPreviewParam.getVoice_style()) ? EnumSpeakType.default_0.getMessage() : aiPreviewParam.getVoice_style()); param.setGender(voiceInfo.getSex() == 1 ? "male" : "female"); AiPreviewResult result = AiVideoHelper.voicePreview(param); if (result.isSuccess()){ diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceLanguageServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceLanguageServiceImpl.java index 0b436dd..e52501e 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceLanguageServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceLanguageServiceImpl.java @@ -20,7 +20,7 @@ public class VoiceLanguageServiceImpl implements VoiceLanguageService { @Override public List voiceTotal() { - List languages = voiceLanguageMapper.selectList(new LambdaQueryWrapper().eq(VoiceLanguage::getIsDel, 0).orderByAsc(VoiceLanguage::getName).select(VoiceLanguage::getId, VoiceLanguage::getName, VoiceLanguage::getImg)); + List languages = voiceLanguageMapper.selectList(new LambdaQueryWrapper().eq(VoiceLanguage::getIsDel, 0).orderByAsc(VoiceLanguage::getLocal)); return CollectionUtils.isEmpty(languages) ? Lists.newArrayList() : languages; } } diff --git a/suimangService/src/main/java/com/iformall/sm/AiPhotoSpeakResult.java b/suimangService/src/main/java/com/iformall/sm/AiPhotoSpeakResult.java index 3fe72ff..a96e1f8 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiPhotoSpeakResult.java +++ b/suimangService/src/main/java/com/iformall/sm/AiPhotoSpeakResult.java @@ -8,6 +8,7 @@ public class AiPhotoSpeakResult { private boolean success; private String msg; private String url; + private String saveDir; public String getMsgInfo(Integer code, String msg) { if (code == 4000 && msg.equals("success")) { diff --git a/suimangService/src/main/java/com/iformall/sm/AiPreviewResult.java b/suimangService/src/main/java/com/iformall/sm/AiPreviewResult.java index 7814170..2d8735f 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiPreviewResult.java +++ b/suimangService/src/main/java/com/iformall/sm/AiPreviewResult.java @@ -10,6 +10,7 @@ public class AiPreviewResult { private Integer code; private String msg; private String url; + private Double time; public String getMsgInfo(Integer code, String msg) { if (code == 3000 && msg.equals("success")) { diff --git a/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java b/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java index 65dfa20..86f0362 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java +++ b/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java @@ -35,6 +35,7 @@ public class AiVideoHelper { public static String photo_speak_suffix = "/img_talking"; public static String image_quality_suffix = "/image_qualit"; public static String voice_preview = "/tts_wav"; + public static String video_hq = "/video_hq"; public static String doPost(String url, String params) { return HttpUtil.doAiVideoPost(url,params); @@ -123,8 +124,10 @@ public class AiVideoHelper { if (code.intValue() == 4000) { JSONObject data = jsonObject.getJSONObject("data"); String videoUrl = data.getString("url"); + String saveDir = data.getString("save_dir"); result.setSuccess(true); result.setUrl(videoUrl); + result.setSaveDir(saveDir); String resultMsg = result.getMsgInfo(code, msg); result.setMsg(resultMsg); } else { @@ -181,6 +184,13 @@ public class AiVideoHelper { JSONObject jsonObject = JSON.parseObject(response); JSONObject status = jsonObject.getJSONObject("status"); JSONObject data = jsonObject.getJSONObject("data"); + String strURL = null; + String time = null; + if (data != null){ + strURL = data.getString("url"); + time = data.getString("time"); + } + Integer code = status.getInteger("code"); String msg = status.getString("msg"); if (code == null) { @@ -191,7 +201,48 @@ public class AiVideoHelper { if (code.intValue() == 3000) { result.setCode(200); result.setSuccess(true); - result.setUrl(url + data.getString("url")); + result.setUrl(url + strURL); + result.setTime(Double.valueOf(time)); + String resultMsg = result.getMsgInfo(code, msg); + result.setMsg(resultMsg); + } else { + result.setCode(code); + result.setSuccess(false); + String resultMsg = result.getMsgInfo(code, msg); + result.setMsg(resultMsg); + } + return result; + } + + public static AiVideoHqResult videoHq(AiVideoHqParam param) { + String response = doPost(url + video_hq, JSONObject.toJSONString(param)); + log.info("视频超分 end response:" + response); + AiVideoHqResult result = new AiVideoHqResult(); + + if (StringUtils.isBlank(response)) { + result.setSuccess(false); + result.setMsg("视频超分失败,请稍后重试"); + return result; + } + JSONObject jsonObject = JSON.parseObject(response); + JSONObject status = jsonObject.getJSONObject("status"); + JSONObject data = jsonObject.getJSONObject("data"); + String strURL = null; + if (data != null){ + strURL = data.getString("url"); + } + + Integer code = status.getInteger("code"); + String msg = status.getString("msg"); + if (code == null) { + result.setSuccess(false); + result.setMsg("视频超分异常,请稍后重试"); + return result; + } + if (code.intValue() == 3000) { + result.setCode(200); + result.setSuccess(true); + result.setUrl(url + strURL); String resultMsg = result.getMsgInfo(code, msg); result.setMsg(resultMsg); } else { @@ -229,11 +280,11 @@ public class AiVideoHelper { param.setGen_txt("人多泰达股份冲冠怒发代发"); param.setImg(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/digitalperson/16760216806604820_cSHoijDX_matting.png")); param.setGender("male"); - param.setVoice_id("zh-CN-YunxiNeural"); - param.setVoice_style("sad"); + param.setVoice_id("zh-CN-YunyangNeural"); + param.setVoice_style("default"); param.setUrl("None"); AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); -// + // AiCheckPhotoParam param = new AiCheckPhotoParam(); // String img = Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/personmould/16760216806604820_cSHoijDX_grace_1080.jpg"); // param.setImg(img); @@ -242,11 +293,16 @@ public class AiVideoHelper { // // AiPreviewParam param = new AiPreviewParam(); // param.setGen_txt("今天是个好日子"); -// param.setVoice_id("zh-CN-YunyangNeural"); +// param.setVoice_id("ar-DZ-AminaNeural"); // param.setVoice_style("default"); -// param.setGender("male"); +// param.setGender("female"); // AiPreviewResult result = AiVideoHelper.voicePreview(param); +// System.out.println(result); +// AiVideoHqParam param = new AiVideoHqParam(); +// param.setSave_dir(); +// AiVideoHqResult result = AiVideoHelper.videoHq(param); +// System.out.println(result); } diff --git a/suimangService/src/main/java/com/iformall/sm/AiVideoHqParam.java b/suimangService/src/main/java/com/iformall/sm/AiVideoHqParam.java new file mode 100644 index 0000000..b369b88 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/sm/AiVideoHqParam.java @@ -0,0 +1,9 @@ +package com.iformall.sm; + +import lombok.Data; + +@Data +public class AiVideoHqParam { + private String save_dir; + +} diff --git a/suimangService/src/main/java/com/iformall/sm/AiVideoHqResult.java b/suimangService/src/main/java/com/iformall/sm/AiVideoHqResult.java new file mode 100644 index 0000000..3e2fe07 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/sm/AiVideoHqResult.java @@ -0,0 +1,19 @@ +package com.iformall.sm; + +import lombok.Data; + +@Data +public class AiVideoHqResult { + private boolean success; + private Integer code; + private String msg; + private String url; + + public String getMsgInfo(Integer code, String msg) { + if (code == 5000 && msg.equals("success")) { + return "成功"; + } + return msg; + } + +} diff --git a/suimangService/src/main/resources/mapper/InviteCodeMapper.xml b/suimangService/src/main/resources/mapper/InviteCodeMapper.xml new file mode 100644 index 0000000..7753993 --- /dev/null +++ b/suimangService/src/main/resources/mapper/InviteCodeMapper.xml @@ -0,0 +1,10 @@ + + + + + + UPDATE invite_code + SET total = #{total} + 1 + WHERE id = #{id} + + diff --git a/suimangService/src/main/resources/mapper/MusicServiceMapper.xml b/suimangService/src/main/resources/mapper/MusicServiceMapper.xml new file mode 100644 index 0000000..a7cc116 --- /dev/null +++ b/suimangService/src/main/resources/mapper/MusicServiceMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + update music_info set is_del = 1,update_date = now() where id = #{id} + + + diff --git a/suimangService/src/main/resources/mapper/PhotoSpeakVideoMapper.xml b/suimangService/src/main/resources/mapper/PhotoSpeakVideoMapper.xml index 661a8ae..08fcdae 100644 --- a/suimangService/src/main/resources/mapper/PhotoSpeakVideoMapper.xml +++ b/suimangService/src/main/resources/mapper/PhotoSpeakVideoMapper.xml @@ -27,6 +27,11 @@ + + + + + @@ -35,7 +40,8 @@ `id`, `tenant_id`, `parent_tenant_id`, `user_id`, `person_photo_id`, `person_photo_url`, `voice_from`, `voice_mould_id`, `voice_mould_sm`, `paperwork`, `voice_material_id`, `voice_material_url`, - `title`, `cover_img`, `remark`, `video_id`, `video_path`, `video_play_url`, `video_time`, `video_size`, `video_status`, `video_msg`, `create_video_date`, `create_date`, `update_date` + `title`, `cover_img`, `remark`, `video_id`, `video_path`, `video_play_url`, `video_time`, `video_size`, `video_status`, `video_msg`, `create_video_date`, `create_date`, `update_date`, + `is_hy`,`video_hy_status`,`music_id`,`save_dir` @@ -59,6 +65,15 @@ and `voice_from` = #{voiceFrom} + + and `is_hy` = #{isHy} + + + and `music_id` = #{musicId} + + + and `save_dir` = #{saveDir} + and `voice_mould_id` = #{voiceMouldId} @@ -71,6 +86,9 @@ and `video_status` = #{videoStatus} + + and `video_hy_status` = #{videoHyStatus} + and create_date >= #{startDate} @@ -119,7 +137,7 @@ `id`, `paperwork`, `title`, `cover_img`, `remark`, `video_id`, `video_path`, `video_play_url`, `video_time`, `video_size`, `video_status`,`video_msg`, - `create_video_date`, `create_date`, `update_date` + `create_video_date`, `create_date`, `update_date`,`is_hy` from photo_speak_video diff --git a/suimangService/src/main/resources/mapper/UserCreateVideoNumMapper.xml b/suimangService/src/main/resources/mapper/UserCreateVideoNumMapper.xml index 30d4704..7fee966 100644 --- a/suimangService/src/main/resources/mapper/UserCreateVideoNumMapper.xml +++ b/suimangService/src/main/resources/mapper/UserCreateVideoNumMapper.xml @@ -7,10 +7,14 @@ UPDATE user_create_video_num - residue_num = #{createVideoNum.residueNum} - 1,create_num = #{createVideoNum.createNum} + 1 + + create_num = create_num + 1, + create_all_time = create_all_time + #{time} - residue_num = #{createVideoNum.residueNum} + 1,create_num = #{createVideoNum.createNum} - 1 + + create_num =create_num - 1, + create_all_time = create_all_time - #{time} WHERE user_id = #{createVideoNum.userId}