| @@ -0,0 +1,33 @@ | |||
| /* | |||
| Navicat Premium Data Transfer | |||
| Source Server : photo | |||
| Source Server Type : MySQL | |||
| Source Server Version : 80026 (8.0.26) | |||
| Source Host : 182.92.151.30:3306 | |||
| Source Schema : mallink_suimang_test | |||
| Target Server Type : MySQL | |||
| Target Server Version : 80026 (8.0.26) | |||
| File Encoding : 65001 | |||
| Date: 13/07/2023 18:41:44 | |||
| */ | |||
| SET NAMES utf8mb4; | |||
| SET FOREIGN_KEY_CHECKS = 0; | |||
| -- ---------------------------- | |||
| -- Table structure for wx_c_author | |||
| -- ---------------------------- | |||
| DROP TABLE IF EXISTS `wx_c_author`; | |||
| CREATE TABLE `wx_c_author` ( | |||
| `id` int NOT NULL COMMENT '用户id', | |||
| `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '用户名', | |||
| `type` int NULL DEFAULT NULL COMMENT '权限类型数字人0声纹1', | |||
| `resource_id` int NULL DEFAULT NULL COMMENT '对应资源id(数字人id or 声纹id)', | |||
| `expire_time` datetime NULL DEFAULT NULL COMMENT '资源权限到期时间', | |||
| PRIMARY KEY (`id`) USING BTREE | |||
| ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; | |||
| SET FOREIGN_KEY_CHECKS = 1; | |||
| @@ -0,0 +1,35 @@ | |||
| /* | |||
| Navicat Premium Data Transfer | |||
| Source Server : photo | |||
| Source Server Type : MySQL | |||
| Source Server Version : 80026 (8.0.26) | |||
| Source Host : 182.92.151.30:3306 | |||
| Source Schema : mallink_suimang_test | |||
| Target Server Type : MySQL | |||
| Target Server Version : 80026 (8.0.26) | |||
| File Encoding : 65001 | |||
| Date: 13/07/2023 18:41:55 | |||
| */ | |||
| SET NAMES utf8mb4; | |||
| SET FOREIGN_KEY_CHECKS = 0; | |||
| -- ---------------------------- | |||
| -- Table structure for wx_c_avatar | |||
| -- ---------------------------- | |||
| DROP TABLE IF EXISTS `wx_c_avatar`; | |||
| CREATE TABLE `wx_c_avatar` ( | |||
| `id` int NOT NULL COMMENT '数字人id', | |||
| `class` int NULL DEFAULT NULL COMMENT '共享0定制1', | |||
| `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '数字人名称', | |||
| `image` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '数字人图像', | |||
| `demo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '数字人视频样例', | |||
| `model` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '数字人视频模板文件', | |||
| `preinfo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '数字人预处理文件', | |||
| PRIMARY KEY (`id`) USING BTREE | |||
| ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; | |||
| SET FOREIGN_KEY_CHECKS = 1; | |||
| @@ -0,0 +1,32 @@ | |||
| /* | |||
| Navicat Premium Data Transfer | |||
| Source Server : photo | |||
| Source Server Type : MySQL | |||
| Source Server Version : 80026 (8.0.26) | |||
| Source Host : 182.92.151.30:3306 | |||
| Source Schema : mallink_suimang_test | |||
| Target Server Type : MySQL | |||
| Target Server Version : 80026 (8.0.26) | |||
| File Encoding : 65001 | |||
| Date: 18/07/2023 12:14:57 | |||
| */ | |||
| SET NAMES utf8mb4; | |||
| SET FOREIGN_KEY_CHECKS = 0; | |||
| -- ---------------------------- | |||
| -- Table structure for wx_c_user_live_basic_info | |||
| -- ---------------------------- | |||
| DROP TABLE IF EXISTS `wx_c_user_live_basic_info`; | |||
| CREATE TABLE `wx_c_user_live_basic_info` ( | |||
| `id` bigint NOT NULL, | |||
| `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, | |||
| `version` int NULL DEFAULT NULL, | |||
| `expire_time` datetime NULL DEFAULT NULL, | |||
| PRIMARY KEY (`id`) USING BTREE | |||
| ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; | |||
| SET FOREIGN_KEY_CHECKS = 1; | |||
| @@ -0,0 +1,34 @@ | |||
| /* | |||
| Navicat Premium Data Transfer | |||
| Source Server : photo | |||
| Source Server Type : MySQL | |||
| Source Server Version : 80026 (8.0.26) | |||
| Source Host : 182.92.151.30:3306 | |||
| Source Schema : mallink_suimang_test | |||
| Target Server Type : MySQL | |||
| Target Server Version : 80026 (8.0.26) | |||
| File Encoding : 65001 | |||
| Date: 19/07/2023 10:37:00 | |||
| */ | |||
| SET NAMES utf8mb4; | |||
| SET FOREIGN_KEY_CHECKS = 0; | |||
| -- ---------------------------- | |||
| -- Table structure for wx_c_voice | |||
| -- ---------------------------- | |||
| DROP TABLE IF EXISTS `wx_c_voice`; | |||
| CREATE TABLE `wx_c_voice` ( | |||
| `id` int NOT NULL COMMENT '声纹id', | |||
| `localel_id` int NULL DEFAULT NULL COMMENT '地区id', | |||
| `voice_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '声纹名称', | |||
| `voice_display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '声纹显示名称', | |||
| `gender` int NULL DEFAULT NULL COMMENT '男1女0', | |||
| `class` int NULL DEFAULT NULL COMMENT '共享0定制1', | |||
| PRIMARY KEY (`id`) USING BTREE | |||
| ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; | |||
| SET FOREIGN_KEY_CHECKS = 1; | |||
| @@ -0,0 +1,31 @@ | |||
| /* | |||
| Navicat Premium Data Transfer | |||
| Source Server : photo | |||
| Source Server Type : MySQL | |||
| Source Server Version : 80026 (8.0.26) | |||
| Source Host : 182.92.151.30:3306 | |||
| Source Schema : mallink_suimang_test | |||
| Target Server Type : MySQL | |||
| Target Server Version : 80026 (8.0.26) | |||
| File Encoding : 65001 | |||
| Date: 19/07/2023 10:37:08 | |||
| */ | |||
| SET NAMES utf8mb4; | |||
| SET FOREIGN_KEY_CHECKS = 0; | |||
| -- ---------------------------- | |||
| -- Table structure for wx_c_voice_local | |||
| -- ---------------------------- | |||
| DROP TABLE IF EXISTS `wx_c_voice_local`; | |||
| CREATE TABLE `wx_c_voice_local` ( | |||
| `id` int NOT NULL COMMENT '地区id', | |||
| `local_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '地区名称', | |||
| `local_display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '地区名称显示', | |||
| PRIMARY KEY (`id`) USING BTREE | |||
| ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; | |||
| SET FOREIGN_KEY_CHECKS = 1; | |||
| @@ -0,0 +1,33 @@ | |||
| /* | |||
| Navicat Premium Data Transfer | |||
| Source Server : photo | |||
| Source Server Type : MySQL | |||
| Source Server Version : 80026 (8.0.26) | |||
| Source Host : 182.92.151.30:3306 | |||
| Source Schema : mallink_suimang_test | |||
| Target Server Type : MySQL | |||
| Target Server Version : 80026 (8.0.26) | |||
| File Encoding : 65001 | |||
| Date: 19/07/2023 10:37:19 | |||
| */ | |||
| SET NAMES utf8mb4; | |||
| SET FOREIGN_KEY_CHECKS = 0; | |||
| -- ---------------------------- | |||
| -- Table structure for wx_c_voice_style | |||
| -- ---------------------------- | |||
| DROP TABLE IF EXISTS `wx_c_voice_style`; | |||
| CREATE TABLE `wx_c_voice_style` ( | |||
| `id` int NOT NULL COMMENT '风格', | |||
| `voice_id` int NULL DEFAULT NULL COMMENT '声纹id', | |||
| `style_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '风格名称', | |||
| `style_display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '风格显示名称', | |||
| `style_demo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '样例视频', | |||
| PRIMARY KEY (`id`) USING BTREE | |||
| ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; | |||
| SET FOREIGN_KEY_CHECKS = 1; | |||
| @@ -0,0 +1,3 @@ | |||
| ALTER TABLE `mallink_suimang_test`.`photo_speak_video` | |||
| ADD COLUMN `subtitle_enabled` smallint(1) COMMENT '字幕开关' AFTER `person_photo_url`, | |||
| ADD COLUMN `subtitle_params` json COMMENT '字幕参数' AFTER `subtitle_enabled`; | |||
| @@ -168,5 +168,7 @@ | |||
| </configuration> | |||
| </plugin> | |||
| </plugins> | |||
| </build> | |||
| </project> | |||
| @@ -35,8 +35,7 @@ import java.io.OutputStream; | |||
| import java.net.URL; | |||
| import java.net.URLEncoder; | |||
| import java.nio.charset.StandardCharsets; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import java.util.*; | |||
| @RestController | |||
| @@ -178,27 +177,22 @@ public class PhotoSpeakVideoController extends BaseController { | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"视频已生成完成"); | |||
| } | |||
| PhotoSpeakVideo videoUpd = new PhotoSpeakVideo(); | |||
| videoUpd.setId(record.getId()); | |||
| // PhotoSpeakVideo videoUpd = new PhotoSpeakVideo(); | |||
| // videoUpd.setId(record.getId()); | |||
| if (mouldVideo.getPersonPhotoId() == null) { | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到人物照片"); | |||
| } | |||
| if(StringUtils.isBlank(mouldVideo.getPersonPhotoUrl())){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到人物照片地址"); | |||
| } | |||
| videoUpd.setPersonPhotoId(mouldVideo.getPersonPhotoId()); | |||
| videoUpd.setPersonPhotoUrl(mouldVideo.getPersonPhotoUrl()); | |||
| Integer voiceFrom = mouldVideo.getVoiceFrom(); | |||
| videoUpd.setVoiceFrom(voiceFrom); | |||
| if(EnumVoiceFrom.FROM_MOULD.getCode().equals(voiceFrom)){ | |||
| String voiceMouldSmId = null; | |||
| try{ | |||
| JSONObject personMouldObject = JSONObject.parseObject(mouldVideo.getVoiceMouldSm()); | |||
| voiceMouldSmId = personMouldObject.getString("mouldSmId"); | |||
| videoUpd.setVoiceMouldSm(voiceMouldSmId); | |||
| videoUpd.setPaperwork(mouldVideo.getPaperwork()); | |||
| videoUpd.setVoiceMouldSm(mouldVideo.getVoiceMouldSm()); | |||
| }catch(Exception e){ | |||
| logger.info(e.getMessage()); | |||
| } | |||
| @@ -220,7 +214,7 @@ public class PhotoSpeakVideoController extends BaseController { | |||
| if(StringUtils.isBlank(voiceMaterialUrl)){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未找到上传声音文件"); | |||
| } | |||
| videoUpd.setVoiceMaterialUrl(voiceMaterialUrl); | |||
| mouldVideo.setVoiceMaterialUrl(voiceMaterialUrl); | |||
| // videoUpd.setVideoTime(String.valueOf(voiceMaterial.getTime())); | |||
| } else if (EnumVoiceFrom.MUSIC.getCode().equals(voiceFrom)) { | |||
| Long musicId = mouldVideo.getMusicId(); | |||
| @@ -234,7 +228,7 @@ public class PhotoSpeakVideoController extends BaseController { | |||
| if(musicInfo.getTime() == null){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"音乐时长为空"); | |||
| } | |||
| videoUpd.setVoiceMaterialUrl(musicInfo.getUrl()); | |||
| mouldVideo.setVoiceMaterialUrl(musicInfo.getUrl()); | |||
| // videoUpd.setVideoTime(String.valueOf(musicInfo.getTime())); | |||
| } else { | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"声音数据异常"); | |||
| @@ -244,9 +238,10 @@ public class PhotoSpeakVideoController extends BaseController { | |||
| mouldVideoUpd.setVideoStatus(EnumVideoStatus.ing.getCode()); | |||
| mouldVideoUpd.setVideoMsg(""); | |||
| mouldVideoUpd.setCreateVideoDate(new Date()); | |||
| photoSpeakVideoService.saveOrUpdate(mouldVideoUpd); | |||
| photoSpeakVideoService.createVideo(videoUpd); | |||
| photoSpeakVideoService.createVideo(mouldVideo); | |||
| return new ResultData(); | |||
| } | |||
| @@ -1,11 +1,18 @@ | |||
| package com.iformall.controller; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.fasterxml.jackson.databind.ObjectMapper; | |||
| import com.google.gson.JsonObject; | |||
| import com.iformall.annotation.AuthIgnore; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.WxCVoiceTable; | |||
| import com.iformall.domain.po.sm.PhotoSpeakVideo; | |||
| import com.iformall.domain.po.sm.PreviewParam; | |||
| import com.iformall.enums.EnumVideoStatus; | |||
| import com.iformall.service.WxCVoiceService; | |||
| import com.iformall.service.sm.PhotoSpeakVideoService; | |||
| import com.iformall.service.sm.PersonPhotoService; | |||
| import com.iformall.service.sm.VoiceInfoService; | |||
| @@ -21,7 +28,11 @@ import org.springframework.util.ObjectUtils; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import org.springframework.web.multipart.MultipartFile; | |||
| import java.io.*; | |||
| import java.net.HttpURLConnection; | |||
| import java.net.URL; | |||
| import java.util.Date; | |||
| import java.util.Map; | |||
| /** | |||
| * 对外开放的 API 接口 | |||
| @@ -38,6 +49,8 @@ public class SDKController extends BaseController { | |||
| private VoiceInfoService voiceInfoService; | |||
| @Autowired | |||
| private PhotoSpeakVideoService photoSpeakVideoService; | |||
| @Autowired | |||
| private WxCVoiceService wxCVoiceService; | |||
| @ApiOperation("图片质量审核接口") | |||
| @PostMapping("checkPhoto") | |||
| @@ -103,4 +116,89 @@ public class SDKController extends BaseController { | |||
| photoSpeakVideoService.createVideo(mouldVideo); | |||
| return new ResultData(); | |||
| } | |||
| /** | |||
| * 生成音频文件 | |||
| */ | |||
| @AuthIgnore | |||
| @PostMapping("/audiotts") | |||
| @ApiOperation(value = "视频模板列表", notes = "{\"username\",\"string\",\"voicename\",\"string\",\"stylename\",\"string\",\"speed\",\"int\",\"text\",\"string\"}") | |||
| public String audioList(@RequestBody Map<String, String> params) { | |||
| String username = params.get("username"); | |||
| String voiceName = params.get("voicename"); | |||
| String styleName = params.get("stylename"); | |||
| Integer speed = Integer.valueOf(params.get("speed")); | |||
| String text = params.get("text"); | |||
| try { | |||
| // 构建请求参数JSON对象 | |||
| JSONObject jsonParams = new JSONObject(); | |||
| jsonParams.put("username", username); | |||
| jsonParams.put("voicename", voiceName); | |||
| jsonParams.put("stylename", styleName); | |||
| jsonParams.put("speed", speed); | |||
| jsonParams.put("text", text); | |||
| //请求url | |||
| String requestUrl = ""; | |||
| // 创建URL对象 | |||
| URL url = new URL(requestUrl); | |||
| HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | |||
| // 设置请求方法 | |||
| connection.setRequestMethod("POST"); | |||
| // 设置请求头 | |||
| connection.setRequestProperty("Content-Type", "application/json"); | |||
| connection.setRequestProperty("Accept", "application/json"); | |||
| // 允许输出请求内容 | |||
| connection.setDoOutput(true); | |||
| // 将参数写入请求体 | |||
| OutputStream outputStream = connection.getOutputStream(); | |||
| outputStream.write(jsonParams.toString().getBytes()); | |||
| outputStream.flush(); | |||
| outputStream.close(); | |||
| // 发送请求并获取响应 | |||
| int responseCode = connection.getResponseCode(); | |||
| // 读取响应内容 | |||
| BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); | |||
| StringBuilder response = new StringBuilder(); | |||
| String line; | |||
| while ((line = reader.readLine()) != null) { | |||
| response.append(line); | |||
| } | |||
| reader.close(); | |||
| // 处理响应结果 | |||
| if (responseCode == HttpURLConnection.HTTP_OK) { | |||
| // 解析响应内容 | |||
| JSONObject jsonResponse = new JSONObject(Boolean.parseBoolean(response.toString())); | |||
| // 获取ttsurl生成的音频文件链接 | |||
| String ttsUrl = jsonResponse.getString("ttsurl"); | |||
| System.out.println("音频文件链接: " + ttsUrl); | |||
| return ttsUrl; | |||
| } else { | |||
| System.out.println("请求失败,错误代码: " + responseCode); | |||
| } | |||
| // 断开连接 | |||
| connection.disconnect(); | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| } | |||
| return null; | |||
| } | |||
| } | |||
| @@ -0,0 +1,416 @@ | |||
| package com.iformall.controller; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.google.code.kaptcha.Producer; | |||
| import com.iformall.annotation.AuthIgnore; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.WxCUserBasicInfo; | |||
| import com.iformall.domain.po.WxCVideoTable; | |||
| import com.iformall.domain.po.sm.PhotoSpeakVideo; | |||
| import com.iformall.domain.po.sm.PreviewParam; | |||
| import com.iformall.domain.po.sm.VoiceInfo; | |||
| import com.iformall.domain.vo.WxCLiveLoginVo; | |||
| import com.iformall.enums.EnumVideoStatus; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.service.*; | |||
| import com.iformall.service.sm.VoiceInfoService; | |||
| import com.iformall.sm.AiPreviewParam; | |||
| import com.iformall.utils.Constant; | |||
| import com.iformall.utils.PasswordHelper; | |||
| import com.iformall.utils.RedisCacheUtils; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.SneakyThrows; | |||
| import org.apache.commons.io.IOUtils; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.beans.factory.annotation.Qualifier; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import springfox.documentation.spring.web.json.Json; | |||
| import javax.imageio.ImageIO; | |||
| import javax.servlet.ServletOutputStream; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.awt.image.BufferedImage; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.io.OutputStream; | |||
| import java.net.URL; | |||
| import java.net.URLEncoder; | |||
| import java.nio.charset.StandardCharsets; | |||
| import java.util.*; | |||
| @RestController | |||
| @RequestMapping("/api/live") | |||
| @Api(description = "直播相关接口") | |||
| public class UserLiveController extends BaseController { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| private Producer producer; | |||
| @Autowired | |||
| @Qualifier("objectCommonRedisTemplate") | |||
| RedisTemplate<String, Object> redisTemplate; | |||
| @Autowired | |||
| private WxCUserBasicInfoService wxCUserBasicInfoService; | |||
| @Autowired | |||
| private WxCLiveUserBasicInfoService wxCLiveUserBasicInfoService; | |||
| @Autowired | |||
| private WxCVideoService wxCVideoService; | |||
| @Autowired | |||
| private WxCVoiceService wxCVoiceService; | |||
| @Autowired | |||
| private WxCUserAuthorityService wxCUserAuthorityService; | |||
| @Autowired | |||
| private VoiceInfoService voiceInfoService; | |||
| @AuthIgnore | |||
| @PostMapping("/login") | |||
| @ApiOperation(value = "用户登录", notes = "{\"username\":\"string\",\"password\":\"string\",\"code\":\"string\",\"status\":\"int\"}") | |||
| public Map<String,Object> login(@RequestBody Map<String, String> map, HttpServletResponse response) { | |||
| Map<String,Object> wxCLiveLoginVos = new HashMap<>(); | |||
| String ipAddr = getIpAddr(); | |||
| logger.debug("[" + ipAddr + "] WxUserGrantController::login"); | |||
| String phone = map.get("username"); | |||
| String password = map.get("password"); | |||
| if (StringUtils.isBlank(phone) || StringUtils.isBlank(password)) { | |||
| HashMap<Object, Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.SYS_PARAMETER_ERROR.getCode()); | |||
| status.put("message","手机号或密码为空"); | |||
| wxCLiveLoginVos.put("status",status); | |||
| return wxCLiveLoginVos; | |||
| // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "手机号或密码为空"); | |||
| } | |||
| WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone); | |||
| if (basicInfo == null) { | |||
| HashMap<Object, Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.USER_IS_EMPTY); | |||
| status.put("message","用户不存在"); | |||
| wxCLiveLoginVos.put("status",status); | |||
| return wxCLiveLoginVos; | |||
| // return new ResultData(ErrorCode.USER_IS_EMPTY); | |||
| } | |||
| String encryptPassword = new PasswordHelper().encryptPassword(password); | |||
| if (!encryptPassword.equals(basicInfo.getPassword())) { | |||
| HashMap<Object, Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.USER_PASSWD_ERR.getCode()); | |||
| status.put("message","手机号或密码错误"); | |||
| wxCLiveLoginVos.put("status",status); | |||
| return wxCLiveLoginVos; | |||
| // return new ResultData(ErrorCode.USER_PASSWD_ERR.getCode(), "手机号或密码错误"); | |||
| } | |||
| int statu = Integer.parseInt(map.get("status")); | |||
| if (statu == 0) { | |||
| WxCUserBasicInfo basicLiveInfo = wxCLiveUserBasicInfoService.getById(basicInfo.getId()); | |||
| if (basicLiveInfo.getCode() != null && !map.get("code").equals(basicLiveInfo.getCode())) { | |||
| HashMap<Object, Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.USER_ALREADY_LOGIN.getCode()); | |||
| status.put("message","用户已在其他设备登录"); | |||
| wxCLiveLoginVos.put("status",status); | |||
| return wxCLiveLoginVos; | |||
| // return new ResultData(ErrorCode.USER_ALREADY_LOGIN.getCode(), "用户已在其他设备登录"); | |||
| } | |||
| if (basicLiveInfo.getCode() == null) { | |||
| wxCLiveUserBasicInfoService.updateCode(basicInfo.getId(), map.get("code")); | |||
| } | |||
| } | |||
| if (statu == -1) { | |||
| wxCLiveUserBasicInfoService.updateCode(basicInfo.getId(), null); | |||
| basicInfo.setStatus(-2); | |||
| HashMap<Object, Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.USER_CANCEL_MCODE.getCode()); | |||
| status.put("message","设备已注销"); | |||
| wxCLiveLoginVos.put("status",status); | |||
| return wxCLiveLoginVos; | |||
| // return new ResultData(ErrorCode.USER_CANCEL_MCODE.getCode(), "设备已注销"); | |||
| } | |||
| wxCUserBasicInfoService.handleLoginUser(basicInfo); | |||
| WxCUserBasicInfo basicLiveInfo = wxCLiveUserBasicInfoService.getById(basicInfo.getId()); | |||
| WxCLiveLoginVo wxCLiveLoginVo = new WxCLiveLoginVo(); | |||
| wxCLiveLoginVo.setCode(Integer.parseInt(map.get("code"))); | |||
| //wxCLiveLoginVo.setVersion(basicLiveInfo.getVersion()); | |||
| wxCLiveLoginVo.setUsername(map.get("username")); | |||
| //wxCLiveLoginVo.setStatus(0); | |||
| //wxCLiveLoginVo.setCurrent_time(new Date(System.currentTimeMillis() / 1000)); | |||
| // wxCLiveLoginVo.setExpire_time(basicLiveInfo.getExpireTime().getTime() / 1000); | |||
| //生成一个token | |||
| String token = UUID.randomUUID().toString().replace("-",""); | |||
| //将token和用户信息绑定放到redis redis--key:user:info:token value:用户信息 | |||
| redisTemplate.opsForValue().set("user:login"+token,JSON.toJSONString(wxCLiveLoginVo)); | |||
| //返回给前端 | |||
| wxCLiveLoginVo.setToken(token); | |||
| Map<String, Object> info = new HashMap(); | |||
| Map<String, Object> data = new HashMap(); | |||
| Map<Object, Object> status = new HashMap<>(); | |||
| status.put("code",1000); | |||
| status.put("message","success"); | |||
| data.put("status",0); | |||
| data.put("version",basicLiveInfo.getVersion()); | |||
| data.put("current_time",new Date(System.currentTimeMillis() / 1000)); | |||
| data.put("expire_time",basicLiveInfo.getExpireTime().getTime() / 1000); | |||
| info.put("log_id", basicInfo.getId()); | |||
| info.put("server_type","user login"); | |||
| info.put("username", basicInfo.getPhone()); | |||
| wxCLiveLoginVos.put("data",data); | |||
| wxCLiveLoginVos.put("info",info); | |||
| wxCLiveLoginVo.setData(data); | |||
| wxCLiveLoginVo.setInfo(info); | |||
| wxCLiveLoginVos.put("status",status); | |||
| wxCLiveLoginVos.put("token",token); | |||
| System.out.println("wxCLiveLoginVo.getToken() = " + wxCLiveLoginVo.getToken()); | |||
| return wxCLiveLoginVos; | |||
| // return new ResultData(1000,"success",wxCLiveLoginVo); | |||
| } | |||
| /** | |||
| * 视频模板列表 | |||
| */ | |||
| @AuthIgnore | |||
| @PostMapping("/avatarList") | |||
| @ApiOperation(value = "视频模板列表", notes = "{\"username\",\"string\",\"code\",\"string\"}") | |||
| public Map<String,Object> avatarList(@RequestBody Map<String, String> params) throws Exception { | |||
| Map<String,Object> avatarVos = new HashMap<>(); | |||
| String ipaddress = getIpAddr(); | |||
| logger.debug("[" + ipaddress + "] WxUserGrantController::getAvatarList"); | |||
| String phone = params.get("username"); | |||
| WxCUserBasicInfo infoByPhone = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone); | |||
| Long id = infoByPhone.getId(); | |||
| System.out.println("id = " + id); | |||
| //鉴权 | |||
| WxCUserBasicInfo basicLiveInfo = wxCLiveUserBasicInfoService.getById(id); | |||
| if (basicLiveInfo.getCode() != null && !params.get("code").equals(basicLiveInfo.getCode())) { | |||
| HashMap<Object, Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.USER_ALREADY_LOGIN.getCode()); | |||
| status.put("message","用户已在其他设备登录"); | |||
| avatarVos.put("status",status); | |||
| return avatarVos; | |||
| } | |||
| Map<Object, Object> status = new HashMap<>(); | |||
| status.put("code",1000); | |||
| status.put("msg","success"); | |||
| // long id = getMemberId(); | |||
| // System.out.println("id = " + id); | |||
| // WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.getById(infoByPhone.getId()); | |||
| avatarVos.put("status",status); | |||
| return wxCVideoService.getById(infoByPhone.getId()); | |||
| // return new ResultData(1000,"success",wxCVideoService.getById(infoByPhone.getId())); | |||
| } | |||
| /** | |||
| * 音频模板列表 | |||
| */ | |||
| @AuthIgnore | |||
| @PostMapping("/audioList") | |||
| @ApiOperation(value = "音频模板列表", notes = "{\"username\",\"string\",\"code\",\"string\"}") | |||
| public Map<String,Object> audioList(@RequestBody Map<String, String> params) { | |||
| Map<String,Object> resultMap = new HashMap<>(); | |||
| String ipaddress = getIpAddr(); | |||
| logger.debug("[" + ipaddress + "] WxUserGrantController::getAudioList"); | |||
| String phone = params.get("username"); | |||
| WxCUserBasicInfo infoByPhone = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone); | |||
| Long id = infoByPhone.getId(); | |||
| System.out.println("id = " + id); | |||
| WxCUserBasicInfo basicLiveInfo = wxCLiveUserBasicInfoService.getById(id); | |||
| if (basicLiveInfo.getCode() != null && !params.get("code").equals(basicLiveInfo.getCode())) { | |||
| HashMap<Object, Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.USER_ALREADY_LOGIN.getCode()); | |||
| status.put("message","用户已在其他设备登录"); | |||
| resultMap.put("status",status); | |||
| return resultMap; | |||
| } | |||
| // long id = getMemberId(); | |||
| return wxCVoiceService.getById(id); | |||
| } | |||
| /** | |||
| * 资源权限查询 | |||
| */ | |||
| @AuthIgnore | |||
| @ApiOperation(value = "资源权限查询", notes = "{\"username\",\"string\",\"code\",\"string\",\"type\",\"int\",\"resource_id\",\"long\"}") | |||
| @PostMapping("/author") | |||
| public Map<String,Object> getAuthor(@RequestBody Map<String, String> params) { | |||
| Map<String,Object> resultMap = new HashMap<>(); | |||
| String ipaddress = getIpAddr(); | |||
| logger.debug("[" + ipaddress + "] WxUserGrantController::getAuthor"); | |||
| String phone = params.get("username"); | |||
| WxCUserBasicInfo infoByPhone = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone); | |||
| Long id = infoByPhone.getId(); | |||
| System.out.println("id = " + id); | |||
| WxCUserBasicInfo basicLiveInfo = wxCLiveUserBasicInfoService.getById(id); | |||
| if (basicLiveInfo.getCode() != null && !params.get("code").equals(basicLiveInfo.getCode())) { | |||
| HashMap<Object, Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.USER_ALREADY_LOGIN.getCode()); | |||
| status.put("message","用户已在其他设备登录"); | |||
| resultMap.put("status",status); | |||
| return resultMap; | |||
| } | |||
| //long id = getMemberId(); | |||
| String username = params.get("username"); | |||
| String code = params.get("code"); | |||
| Integer type = Integer.parseInt(params.get("type")); | |||
| Long resourceId = Long.valueOf(params.get("resource_id")); | |||
| return wxCUserAuthorityService.getAuthor(id, code, type, resourceId); | |||
| } | |||
| @AuthIgnore | |||
| @ApiOperation(value = "tts", notes = "{\"username\",\"string\",\"gen_txt\",\"string\",\"voice_id\",\"string\",\"voice_style\",\"string\",\"speed\",\"int\"}") | |||
| @PostMapping("/audiotts") | |||
| public Map<String,Object> voicePreview(@RequestBody Map<String, String> params) { | |||
| logger.debug("[" + getIpAddr() + "] UserLiveController::voicePreview"); | |||
| String phone = params.get("username"); | |||
| WxCUserBasicInfo infoByPhone = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone); | |||
| Long id = infoByPhone.getId(); | |||
| AiPreviewParam param = new AiPreviewParam(); | |||
| if (params.get("voice_id") == null) { | |||
| Map<String,Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.SYS_SERVER_ERROR.getCode()); | |||
| status.put("msg","音色ID不能为空"); | |||
| return status; | |||
| // return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "音色ID不能为空"); | |||
| } | |||
| if (StringUtils.isBlank(params.get("gen_txt"))) { | |||
| Map<String,Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.SYS_SERVER_ERROR.getCode()); | |||
| status.put("msg","需要生成的文字不能为空"); | |||
| return status; | |||
| //return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "需要生成的文字不能为空"); | |||
| }if (Integer.parseInt(params.get("speed"))==-1){ | |||
| param.setSpeed(0); | |||
| } | |||
| param.setSpeed(Integer.parseInt(params.get("speed"))); | |||
| param.setVoice_id(params.get("voice_id")); | |||
| param.setVoice_style(params.get("voice_style")); | |||
| param.setGen_txt(params.get("gen_txt")); | |||
| Map<String, Object> resultMap = wxCVoiceService.voicePreview(param); | |||
| Map<String,Object> info = new HashMap<>(); | |||
| info.put("log_id",id); | |||
| info.put("server_type","audio tts"); | |||
| resultMap.put("info",info); | |||
| return resultMap; | |||
| } | |||
| @AuthIgnore | |||
| @SneakyThrows | |||
| @ApiOperation(value = "tts", notes = "{\"username\",\"string\",\"gen_txt\",\"string\",\"voice_id\",\"string\",\"voice_style\",\"string\",\"speed\",\"int\"}") | |||
| @GetMapping("exportVideo") | |||
| public void exportVideo(@RequestBody Map<String, String> params , HttpServletRequest request, HttpServletResponse response) { | |||
| logger.debug("[" + getIpAddr() + "] UserLiveController::exportVideo"); | |||
| response.reset(); | |||
| File tmpFile = null; | |||
| OutputStream outputStream = null; | |||
| WxCUserBasicInfo infoByPhone = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), params.get("username")); | |||
| Long id = infoByPhone.getId(); | |||
| try { | |||
| outputStream = response.getOutputStream(); | |||
| } catch (IOException e) { | |||
| throw new MallinkException(ErrorCode.SYS_SERVER_ERROR); | |||
| } | |||
| try{ | |||
| if(id == null){ | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||
| } | |||
| WxCVideoTable videoTable = wxCVideoService.selectOne(id,Long.parseLong(params.get("resource_id"))); | |||
| //获取响应的输出流 | |||
| InputStream inputStream = new URL(videoTable.getDemo()).openStream(); | |||
| response.setHeader("Content-Disposition", "attachment; filename=" | |||
| + URLEncoder.encode(videoTable.getId()+".mp4", "UTF-8")); | |||
| //解决编码问题 | |||
| response.setCharacterEncoding("UTF-8"); | |||
| response.setHeader("Content-Type","application/octet-stream"); | |||
| byte[] cache = new byte[1024 * 300]; | |||
| int flag; | |||
| while ((flag = inputStream.read(cache))!=-1){ | |||
| outputStream.write(cache, 0, flag); | |||
| } | |||
| // } | |||
| }catch(MallinkException e){ | |||
| ResultData resultData = new ResultData(e.getErrorCode(), e.getMessage()); | |||
| //解决编码问题 | |||
| response.setCharacterEncoding("UTF-8"); | |||
| response.setHeader("Content-Type","application/json"); | |||
| outputStream.write(JSONObject.toJSONString(resultData).getBytes(StandardCharsets.UTF_8)); | |||
| }finally { | |||
| if (tmpFile != null) { | |||
| tmpFile.delete(); | |||
| } | |||
| outputStream.flush(); | |||
| outputStream.close(); | |||
| } | |||
| } | |||
| @AuthIgnore | |||
| @ApiOperation("选择声音选择风格") | |||
| @GetMapping("/chooseType") | |||
| @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | |||
| public ResultData chooseType(Long id) { | |||
| logger.debug("[" + getIpAddr() + "] MouldPatchController::chooseType"); | |||
| List<VoiceInfo> voiceInfos = wxCVoiceService.chooseType(id); | |||
| System.out.println("voiceInfos = " + voiceInfos); | |||
| return new ResultData(wxCVoiceService.chooseType(id)); | |||
| } | |||
| } | |||
| @@ -1,7 +1,10 @@ | |||
| package com.iformall.controller; | |||
| import com.iformall.annotation.AuthIgnore; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.WxCVideoTable; | |||
| import com.iformall.service.WxCVideoService; | |||
| import com.iformall.video.VideoFactory; | |||
| import com.iformall.video.entity.VideUploadResult; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| @@ -20,16 +23,19 @@ import java.util.Map; | |||
| * @author gongbiao | |||
| */ | |||
| @RestController | |||
| @RequestMapping("api/video") | |||
| @RequestMapping("/api/video") | |||
| public class VideoController extends BaseController { | |||
| private Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| VideoFactory videoFactory; | |||
| @Autowired | |||
| String videoType; | |||
| @Autowired | |||
| private WxCVideoService wxCVideoService; | |||
| /** | |||
| * 上传视频 | |||
| * | |||
| @@ -62,7 +68,7 @@ public class VideoController extends BaseController { | |||
| return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | |||
| } | |||
| } | |||
| /** | |||
| * 上传视频 | |||
| * | |||
| @@ -83,7 +89,7 @@ public class VideoController extends BaseController { | |||
| return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | |||
| } | |||
| } | |||
| /** | |||
| * 上传视频 | |||
| * | |||
| @@ -119,4 +125,6 @@ public class VideoController extends BaseController { | |||
| } | |||
| } | |||
| } | |||
| @@ -12,6 +12,7 @@ import com.iformall.domain.po.sm.VoiceMould; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.language.LanguageDetect; | |||
| import com.iformall.mapper.VoiceLanguageMapper; | |||
| import com.iformall.service.WxCVoiceService; | |||
| import com.iformall.service.sm.*; | |||
| import com.iformall.sm.AiPreviewParam; | |||
| import io.swagger.annotations.Api; | |||
| @@ -27,6 +28,7 @@ import org.springframework.web.bind.annotation.*; | |||
| import java.util.HashMap; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| @RestController | |||
| @@ -50,6 +52,9 @@ public class VoiceMouldController extends BaseController { | |||
| @Autowired | |||
| private VoiceLanguageService voiceLanguageService; | |||
| @Autowired | |||
| private WxCVoiceService wxCVoiceService; | |||
| @AuthIgnore | |||
| @ApiOperation("获取语种") | |||
| @GetMapping("getLanguages") | |||
| @@ -84,15 +89,15 @@ public class VoiceMouldController extends BaseController { | |||
| public ResultData findById(Long id) { | |||
| logger.debug("[" + getIpAddr() + "] MouldPatchController::findById"); | |||
| VoiceMould voiceMould = voiceMouldService.getDetailById(id); | |||
| if(voiceMould != null | |||
| && voiceMould.getParentId() == 0l && voiceMould.getCountSub() > 0){ | |||
| if (voiceMould != null | |||
| && voiceMould.getParentId() == 0l && voiceMould.getCountSub() > 0) { | |||
| VoiceMould voiceQ = new VoiceMould(); | |||
| voiceQ.setParentId(voiceMould.getId()); | |||
| voiceQ.setVoiceType(EnumVoiceType.speak.getCode());//目前只查询说话风格 | |||
| voiceQ.setStatus(EnumaMouldPatchStatus.put_on.getCode()); | |||
| voiceQ.setSortColumns(BaseEntity.SortField.UpdateDate_DESC); | |||
| List<VoiceMould> sublist = voiceMouldService.getClist(voiceQ); | |||
| if(sublist != null && !sublist.isEmpty()){ | |||
| if (sublist != null && !sublist.isEmpty()) { | |||
| voiceMould.setSubVoiceMould(sublist); | |||
| } | |||
| } | |||
| @@ -110,20 +115,20 @@ public class VoiceMouldController extends BaseController { | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||
| } | |||
| Integer sex = null; | |||
| if(record.getPersonMouldId() != null){ | |||
| if (record.getPersonMouldId() != null) { | |||
| PersonMould personMode = personMouldService.getDetailById(record.getPersonMouldId()); | |||
| if(personMode == null){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"选择模板不存在"); | |||
| if (personMode == null) { | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "选择模板不存在"); | |||
| } | |||
| sex = personMode.getSex(); | |||
| } | |||
| String detect = LanguageDetect.detect(record.getPaperwork()); | |||
| if(StringUtils.isBlank(detect)){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"语种识别失败"); | |||
| if (StringUtils.isBlank(detect)) { | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "语种识别失败"); | |||
| } | |||
| EnumLanguages anEnum = EnumLanguages.getEnum(detect); | |||
| if(anEnum == null){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"暂不支持该语种"); | |||
| if (anEnum == null) { | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "暂不支持该语种"); | |||
| } | |||
| VoiceMould voiceMould = new VoiceMould(); | |||
| @@ -163,4 +168,6 @@ public class VoiceMouldController extends BaseController { | |||
| logger.debug("[" + getIpAddr() + "] MouldPatchController::voicePreview"); | |||
| return new ResultData(voiceInfoService.voicePreview(aiPreviewParam)); | |||
| } | |||
| } | |||
| @@ -36,6 +36,7 @@ import javax.servlet.ServletOutputStream; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.awt.image.BufferedImage; | |||
| import java.io.IOException; | |||
| import java.util.Date; | |||
| import java.util.HashMap; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| @@ -98,6 +99,9 @@ public class WxUserGrantController extends BaseController { | |||
| @Autowired | |||
| private UserConsumptionPackageService userConsumptionPackageService; | |||
| @Autowired | |||
| private WxCUserAuthorityService wxCUserAuthorityService; | |||
| @AuthIgnore | |||
| @ApiOperation("验证码") | |||
| @@ -128,6 +132,8 @@ public class WxUserGrantController extends BaseController { | |||
| } | |||
| } | |||
| /** | |||
| * 用户登录 | |||
| * | |||
| @@ -289,11 +295,17 @@ public class WxUserGrantController extends BaseController { | |||
| return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode); | |||
| } | |||
| /** | |||
| * 需要效验用户及图片验证码 | |||
| * @param phone | |||
| * @return | |||
| */ | |||
| /** | |||
| * 需要效验用户及图片验证码 | |||
| * @param phone | |||
| * @return | |||
| */ | |||
| @AuthIgnore | |||
| @ApiOperation("发送修改密码验证码") | |||
| @GetMapping("sendPhoneCode") | |||
| @@ -189,7 +189,7 @@ logging: | |||
| path: ./logs/c | |||
| photo: | |||
| url: http://111.198.0.15:22299 | |||
| url: http://nas.pucao.cn:2002 | |||
| hy_url: http://111.198.0.15:22288 | |||
| talk: http://111.198.0.15:22266 | |||
| callbackUrl: https://phototest.metavatar.cc/C | |||
| @@ -192,7 +192,7 @@ logging: | |||
| path: ./logs/s | |||
| photo: | |||
| url: http://111.198.0.15:22299 | |||
| url: http://nas.pucao.cn:2002 | |||
| hy_url: http://111.198.0.15:22288 | |||
| talk: http://111.198.0.15:22266 | |||
| callbackUrl: https://phototest.metavatar.cc/C | |||
| @@ -97,6 +97,8 @@ public enum ErrorCode{ | |||
| USER_NAME_IS_FOUND(2008,"用户名已存在"), | |||
| USER_PHONE_IS_FOUND(2009,"手机号已存在"), | |||
| MEMBER_IS_LOCKED(2010, "当前会员已被锁定"), | |||
| USER_ALREADY_LOGIN(2011,"用户已在其他端登入"), | |||
| USER_CANCEL_MCODE(2012,"用户已在其他端登入"), | |||
| USER_BIRTHDATE_AFTER(2109, "出生日期大于当前日期"), | |||
| USER_APPINFO_NOT_EXIST(2110,"当前登录用户APP为空"), | |||
| USER_APPINFO_NOFUND_PAYACCOUNT(2111,"当前app找不到payAccount"), | |||
| @@ -0,0 +1,28 @@ | |||
| package com.iformall.domain.po; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import lombok.ToString; | |||
| @TableName(value = "wx_c_voice") | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| public class WxCUserAuthority { | |||
| @TableField(exist = false) | |||
| private String userName; | |||
| @TableField(exist = false) //数字人 0 声纹 1 | |||
| private int type; | |||
| @TableField(exist = false) | |||
| private String resourceId; | |||
| //共享 0 定制 1 | |||
| private int classType; | |||
| @TableField(exist = false) | |||
| private String currentTime; | |||
| @TableField(exist = false) | |||
| private String expireTime; | |||
| } | |||
| @@ -64,6 +64,10 @@ public class WxCUserBasicInfo extends TenantEntityWithoutFinalTenantId { | |||
| @io.swagger.annotations.ApiModelProperty(value="密码",name="password") | |||
| private String password; | |||
| @io.swagger.annotations.ApiModelProperty(value="用户名") | |||
| @TableField(exist = false) | |||
| private String username; | |||
| @Excel(name="微信昵称",width = 20,orderNum = "5") | |||
| @io.swagger.annotations.ApiModelProperty(value="用户昵称",name="nickName") | |||
| private String nickName; | |||
| @@ -157,14 +161,18 @@ public class WxCUserBasicInfo extends TenantEntityWithoutFinalTenantId { | |||
| @io.swagger.annotations.ApiModelProperty(value = "状态0正常1锁定", name = "status") | |||
| private Integer status; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value = "机器码", name = "code") | |||
| private String code; | |||
| /*用户登录用token**/ | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="用户登录用token",name="token") | |||
| protected String token; | |||
| /*用户过期时间**/ | |||
| // @io.swagger.annotations.ApiModelProperty(value="用户过期时间",name="expireTime") | |||
| // protected Date expireTime; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="用户过期时间",name="expireTime") | |||
| protected Date expireTime; | |||
| @TableField(exist = false) | |||
| @Excel(name="标签",width = 50,orderNum = "15") | |||
| @@ -200,10 +208,10 @@ public class WxCUserBasicInfo extends TenantEntityWithoutFinalTenantId { | |||
| @TableField(exist = false) | |||
| private Date creditEndTime; | |||
| @TableField(exist = false) | |||
| private Integer begin; | |||
| @TableField(exist = false) | |||
| private Integer limit; | |||
| @@ -218,6 +226,10 @@ public class WxCUserBasicInfo extends TenantEntityWithoutFinalTenantId { | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="套餐类型(1、基础版,2、专业版,3、加强版)",name="packageType") | |||
| private Integer packageType; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="套餐类型(1、基础版,2、专业版,3、加强版)",name="packageType") | |||
| private Integer version; | |||
| public void protectInfos() { | |||
| if(StringUtils.isNotBlank(this.password)) { | |||
| @@ -0,0 +1,54 @@ | |||
| package com.iformall.domain.po; | |||
| import cn.afterturn.easypoi.excel.annotation.Excel; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.iformall.domain.po.base.TenantEntityWithoutFinalTenantId; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.ToString; | |||
| import java.util.ArrayList; | |||
| import java.util.Date; | |||
| @TableName(value ="wx_c_author") | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class WxCVideoTable extends TenantEntityWithoutFinalTenantId { | |||
| @TableField(exist = false) | |||
| private String userName; | |||
| @TableField(exist = false) | |||
| private String currentTime; | |||
| @TableField(exist = false) | |||
| private String expireTime; | |||
| @io.swagger.annotations.ApiModelProperty(value="数字人id",name="id") | |||
| private int id; | |||
| @io.swagger.annotations.ApiModelProperty(value="套餐0共享 1定制",name="class") | |||
| private int classType; | |||
| @io.swagger.annotations.ApiModelProperty(value="数字人名称",name="name") | |||
| private String name; | |||
| @io.swagger.annotations.ApiModelProperty(value="数字人封面图片链接",name="image") | |||
| private String image; | |||
| @io.swagger.annotations.ApiModelProperty(value="数字人样例视频链接",name="demo") | |||
| private String demo; | |||
| @io.swagger.annotations.ApiModelProperty(value="数字人样例视频链接",name="model") | |||
| private String model; | |||
| @io.swagger.annotations.ApiModelProperty(value="数字人模板预处理信息文件链接",name="preinfo") | |||
| private String preInfo; | |||
| @io.swagger.annotations.ApiModelProperty(value="数字人模板预处理信息文件链接",name="model_path") | |||
| private String modelPath; | |||
| @io.swagger.annotations.ApiModelProperty(value="数字人模板预处理信息文件链接",name="preInfo_path") | |||
| private String preInfoPath; | |||
| } | |||
| @@ -0,0 +1,58 @@ | |||
| package com.iformall.domain.po; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import lombok.ToString; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| @TableName(value = "voice_info") | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| public class WxCVoiceTable { | |||
| @TableField(exist = false) | |||
| private String userName; | |||
| @TableField(exist = false) | |||
| private String currentTime; | |||
| @TableField(exist = false) | |||
| private String expireTime; | |||
| @io.swagger.annotations.ApiModelProperty(value = "地区名称", name = "local_name") | |||
| private String localelName; | |||
| @io.swagger.annotations.ApiModelProperty(value = "地区显示名称", name = "local_display_name") | |||
| private String localDisPlayName; | |||
| @io.swagger.annotations.ApiModelProperty(value = "声纹ID", name = "id") | |||
| private int voiceId; | |||
| @io.swagger.annotations.ApiModelProperty(value = "声纹名称(用于调微软接口)", name = "local_name") | |||
| private String voiceName; | |||
| @io.swagger.annotations.ApiModelProperty(value = "声纹展示名称", name = "display_name") | |||
| private String voiceDisplayName; | |||
| @io.swagger.annotations.ApiModelProperty(value = "性别(男1 女0)", name = "sex") | |||
| private int gender; | |||
| @io.swagger.annotations.ApiModelProperty(value = "声纹类型 共享:0 定制:1", name = "class") | |||
| private int voiceType; | |||
| @io.swagger.annotations.ApiModelProperty(value = "声纹列表", name = "mould_sm_id") | |||
| private String MouldSmId; | |||
| @io.swagger.annotations.ApiModelProperty(value = "声纹列表", name = "style_list") | |||
| private String styleList ; | |||
| @io.swagger.annotations.ApiModelProperty(value = "声纹风格名称(用于微软接口)", name = "style_name") | |||
| private String styleName; | |||
| @io.swagger.annotations.ApiModelProperty(value = "声纹风格展示名称", name = "style_display_name") | |||
| private String styleDisplayName; | |||
| @io.swagger.annotations.ApiModelProperty(value = "声纹风格样例文件链接", name = "style_demo") | |||
| private String styleDemo; | |||
| } | |||
| @@ -41,12 +41,16 @@ public class PersonMould extends TenantEntity { | |||
| @io.swagger.annotations.ApiModelProperty(value="EnumVideoType",name="videoType") | |||
| private Integer videoType; | |||
| @io.swagger.annotations.ApiModelProperty(value="封面图",name="coverImg") | |||
| private String coverImg; | |||
| @io.swagger.annotations.ApiModelProperty(value="多封面图",name="coverPicture") | |||
| private String coverPicture; | |||
| @io.swagger.annotations.ApiModelProperty(value="详情多图",name="detailPicture") | |||
| private String detailPicture; | |||
| @io.swagger.annotations.ApiModelProperty(value="名称",name="title") | |||
| @Excel(name="名称",width = 20,orderNum = "1") | |||
| private String title; | |||
| @@ -135,5 +139,5 @@ public class PersonMould extends TenantEntity { | |||
| } | |||
| return priceStr; | |||
| } | |||
| } | |||
| @@ -51,6 +51,12 @@ public class PhotoSpeakVideo extends TenantEntity { | |||
| @TableField(exist = false) | |||
| private PersonPhoto personPhoto; | |||
| @io.swagger.annotations.ApiModelProperty(value="字幕开关",name="subtitleEnabled") | |||
| private Integer subtitleEnabled; | |||
| @io.swagger.annotations.ApiModelProperty(value="字幕参数",name="subtitleParams") | |||
| private String subtitleParams; | |||
| @io.swagger.annotations.ApiModelProperty(value="EnumVoiceFrom 声音来源",name="voiceFrom") | |||
| private Integer voiceFrom; | |||
| @@ -147,5 +153,5 @@ public class PhotoSpeakVideo extends TenantEntity { | |||
| private Integer videoHyStatus; | |||
| private Integer isHy;//是否超分(1、是,0、否) | |||
| } | |||
| @@ -8,4 +8,6 @@ public class PreviewParam { | |||
| private String voiceId; | |||
| private String voiceStyle; | |||
| private String gender; | |||
| } | |||
| private int speed; | |||
| } | |||
| @@ -0,0 +1,29 @@ | |||
| package com.iformall.domain.vo; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| @Data | |||
| public class WxCLiveLoginVo { | |||
| private String token; //令牌 | |||
| private String username; //令牌 | |||
| // private int status; //用户登录状态 2设备注销,1登陆失败,0登陆成功 | |||
| // private int version; //用户购买的软件套餐 | |||
| // private Date current_time;//服务器当前时间 | |||
| // private long expire_time;//套餐过期时间 | |||
| private int code; //机器码 | |||
| @ApiModelProperty(value = "响应") | |||
| private Map<String,Object> data = new HashMap<>(); | |||
| // @ApiModelProperty(value = "响应") | |||
| //private Map<String,Object> Status = new HashMap<>(); | |||
| @ApiModelProperty(value = "信息") | |||
| private Map<String,Object> info = new HashMap<>(); | |||
| } | |||
| @@ -0,0 +1,44 @@ | |||
| package com.iformall.enums; | |||
| public enum EnumClassType { | |||
| SHARE(0, "共享"), | |||
| CUSTOMIZATION(1, "定制"), | |||
| ; | |||
| public static EnumClassType getEnum(Integer code) { | |||
| for (EnumClassType value : values()) { | |||
| if (value.getCode().equals(code)) { | |||
| return value; | |||
| } | |||
| } | |||
| return null; | |||
| } | |||
| private EnumClassType(Integer code, String message) { | |||
| this.code = code; | |||
| this.message = message; | |||
| } | |||
| private Integer code; | |||
| private String message; | |||
| public String getMessage() { | |||
| return message; | |||
| } | |||
| public void setMessage(String message) { | |||
| this.message = message; | |||
| } | |||
| public Integer getCode() { | |||
| return code; | |||
| } | |||
| public void setCode(Integer code) { | |||
| this.code = code; | |||
| } | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxCUserBasicInfo; | |||
| public interface WxCLiveUserBasicInfoMapper extends CommonMapper<WxCUserBasicInfo, String> { | |||
| WxCUserBasicInfo selectById(Long id); | |||
| void updateCode(Long id, String code); | |||
| } | |||
| @@ -0,0 +1,15 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxCUserAuthority; | |||
| import java.util.List; | |||
| public interface WxCUserAuthorityMapper extends CommonMapper<WxCUserAuthority, String> { | |||
| List<WxCUserAuthority> getAuthorAvatar(Long id, int i, Long resourceId); | |||
| List<WxCUserAuthority> getAuthorVoice(Long id, int i, Long resourceId); | |||
| } | |||
| @@ -65,5 +65,9 @@ public interface WxCUserBasicInfoMapper extends CommonMapper<WxCUserBasicInfo, S | |||
| List<Long> findIdByFilter(WxCUserBasicInfoDto wxCUserBasicInfoDto); | |||
| long getTotalCreditAmount(@Param("tenantId")String tenantId, @Param("finalTenantId")String finalTenantId); | |||
| //WxCUserBasicInfo selectById1(Long id); | |||
| //void updateCode(Long id, String mcode); | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxCUserTags; | |||
| import com.iformall.domain.po.WxCVideoTable; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import java.util.List; | |||
| public interface WxCVideoMapper extends CommonMapper<WxCVideoTable, String> { | |||
| List<WxCVideoTable> getById(Long id); | |||
| WxCVideoTable selectOne(Long id, long resource_id); | |||
| } | |||
| @@ -0,0 +1,13 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxCVideoTable; | |||
| import com.iformall.domain.po.WxCVoiceTable; | |||
| import java.util.List; | |||
| public interface WxCVoiceMapper extends CommonMapper<WxCVoiceTable, String> { | |||
| List<WxCVoiceTable> getById(Long id); | |||
| } | |||
| @@ -0,0 +1,9 @@ | |||
| package com.iformall.service; | |||
| import com.iformall.domain.po.WxCUserBasicInfo; | |||
| public interface WxCLiveUserBasicInfoService { | |||
| WxCUserBasicInfo getById(Long id); | |||
| void updateCode(Long id, String code); | |||
| } | |||
| @@ -0,0 +1,9 @@ | |||
| package com.iformall.service; | |||
| import com.iformall.common.ResultData; | |||
| import java.util.Map; | |||
| public interface WxCUserAuthorityService { | |||
| Map<String,Object> getAuthor(Long id, String code, Integer type, Long resourceId); | |||
| } | |||
| @@ -200,5 +200,10 @@ public interface WxCUserBasicInfoService { | |||
| void sendTicketEmail(WxCUserBasicInfo basicInfo, EnumMsgModel type); | |||
| void updUserInfo(WxCUserBasicInfo cUser, Long memberId); | |||
| // WxCUserBasicInfo getById1(Long id); | |||
| // void updateCode(Long id, String mcode); | |||
| } | |||
| @@ -0,0 +1,14 @@ | |||
| package com.iformall.service; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.WxCVideoTable; | |||
| import java.util.Map; | |||
| public interface WxCVideoService { | |||
| Map<String,Object> getById(Long id) throws Exception; | |||
| WxCVideoTable selectOne(Long id, long resource_id); | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| package com.iformall.service; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.sm.VoiceInfo; | |||
| import com.iformall.sm.AiPreviewParam; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| public interface WxCVoiceService { | |||
| Map<String,Object> getById(Long id); | |||
| List<VoiceInfo> chooseType(Long id); | |||
| Map<String,Object> voicePreview(AiPreviewParam aiPreviewParam); | |||
| } | |||
| @@ -0,0 +1,27 @@ | |||
| package com.iformall.service.impl; | |||
| import com.iformall.domain.po.WxCUserBasicInfo; | |||
| import com.iformall.mapper.WxCLiveUserBasicInfoMapper; | |||
| import com.iformall.service.WxCLiveUserBasicInfoService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| @Service | |||
| public class WxCLiveUserBasicInfoServiceImpl implements WxCLiveUserBasicInfoService { | |||
| @Autowired | |||
| WxCLiveUserBasicInfoMapper wxCLiveUserBasicInfoMapper; | |||
| @Override | |||
| public WxCUserBasicInfo getById(Long id) { | |||
| return wxCLiveUserBasicInfoMapper.selectById(id); | |||
| } | |||
| @Override | |||
| public void updateCode(Long id, String code) { | |||
| wxCLiveUserBasicInfoMapper.updateCode(id,code); | |||
| } | |||
| } | |||
| @@ -0,0 +1,85 @@ | |||
| package com.iformall.service.impl; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.WxCUserAuthority; | |||
| import com.iformall.enums.EnumClassType; | |||
| import com.iformall.mapper.WxCUserAuthorityMapper; | |||
| import com.iformall.service.WxCUserAuthorityService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.*; | |||
| @Service | |||
| public class WxCUserAuthorityServiceImpl implements WxCUserAuthorityService { | |||
| @Autowired | |||
| private WxCUserAuthorityMapper wxCUserAuthorityMapper; | |||
| @Override | |||
| public Map<String,Object> getAuthor(Long id, String code, Integer type, Long resourceId) { | |||
| List<WxCUserAuthority> resultList = new ArrayList<WxCUserAuthority>(); | |||
| HashMap<String, Object> authorVos = new HashMap<>(); | |||
| if (type==0){ | |||
| //查询数字人相关权限 | |||
| resultList = wxCUserAuthorityMapper.getAuthorAvatar(id,0,resourceId); | |||
| } | |||
| if (type==1){ | |||
| //查询声纹相关权限 | |||
| resultList = wxCUserAuthorityMapper.getAuthorVoice(id,1,resourceId); | |||
| } | |||
| if (resourceId==null||resourceId==-1){ | |||
| //若资源id没有传入那就展示所有当前类型资源权限 | |||
| HashMap<String, Object> info = new HashMap<>(); | |||
| HashMap<String, Object> status = new HashMap<>(); | |||
| List authorList = new ArrayList(); | |||
| for (WxCUserAuthority wxCUserAuthority : resultList) { | |||
| HashMap<String, Object> data = new HashMap<>(); | |||
| data.put("username",wxCUserAuthority.getUserName()); | |||
| data.put("type",wxCUserAuthority.getType()); | |||
| data.put("resource_id",wxCUserAuthority.getResourceId()); | |||
| data.put("class",wxCUserAuthority.getClassType()); | |||
| data.put("current_time",new Date(System.currentTimeMillis())); | |||
| data.put("expire_time",wxCUserAuthority.getExpireTime()); | |||
| authorList.add(data); | |||
| } | |||
| authorVos.put("authorList",authorList); | |||
| info.put("log_id",id); | |||
| info.put("server_type","author"); | |||
| authorVos.put("info",info); | |||
| status.put("code",1000); | |||
| status.put("msg","success"); | |||
| authorVos.put("status",status); | |||
| return authorVos; | |||
| } | |||
| HashMap<String, Object> data = new HashMap<>(); | |||
| HashMap<String, Object> info = new HashMap<>(); | |||
| HashMap<String, Object> status = new HashMap<>(); | |||
| for (WxCUserAuthority wxCUserAuthority : resultList) { | |||
| data.put("username",wxCUserAuthority.getUserName()); | |||
| data.put("type",wxCUserAuthority.getType()); | |||
| data.put("resource_id",wxCUserAuthority.getResourceId()); | |||
| if (String.valueOf(wxCUserAuthority.getClassType())!=null){ | |||
| data.put("class",wxCUserAuthority.getClassType()); | |||
| } | |||
| data.put("class", EnumClassType.SHARE.getCode()); | |||
| data.put("current_time",new Date(System.currentTimeMillis())); | |||
| data.put("expire_time",wxCUserAuthority.getExpireTime()); | |||
| } | |||
| authorVos.put("data",data); | |||
| info.put("log_id",id); | |||
| info.put("server_type","author"); | |||
| authorVos.put("info",info); | |||
| status.put("code",1000); | |||
| status.put("msg","success"); | |||
| authorVos.put("status",status); | |||
| return authorVos; | |||
| } | |||
| } | |||
| @@ -629,7 +629,8 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc | |||
| @Override | |||
| public PageInfo<WxCUserBasicInfo> listAsPage(WxCUserBasicInfo record, Integer pageIndex, Integer pageSize) { | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserBasicInfoMapper.findList(record)); | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo( | |||
| () -> wxCUserBasicInfoMapper.findList(record)); | |||
| } | |||
| @Override | |||
| @@ -666,7 +667,8 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc | |||
| WxCUserBasicInfo basicQ = new WxCUserBasicInfo(); | |||
| basicQ.setFinalTenantId(tenantEntity.getFinalTenantId()); | |||
| basicQ.setPhone(phone); | |||
| List<WxCUserBasicInfo> basicInfos = wxCUserBasicInfoMapper.selectList(new QueryWrapper(basicQ)); | |||
| List<WxCUserBasicInfo> basicInfos = wxCUserBasicInfoMapper.selectList( | |||
| new QueryWrapper(basicQ)); | |||
| if (basicInfos != null && basicInfos.size() > 0) { | |||
| WxCUserBasicInfo wxCUserBasicInfo = basicInfos.get(0); | |||
| if (wxCUserBasicInfo.getPoins() != null) { | |||
| @@ -953,6 +955,17 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc | |||
| update(info); | |||
| } | |||
| // @Override | |||
| // public WxCUserBasicInfo getById1(Long id) { | |||
| // return wxCUserBasicInfoMapper.selectById1(id); | |||
| // } | |||
| // @Override | |||
| // public void updateCode(Long id, String mcode) { | |||
| // | |||
| // wxCUserBasicInfoMapper.updateCode(id,mcode); | |||
| // } | |||
| @Override | |||
| public WxCUserBasicInfo getById(Long id,String finalTenantId) { | |||
| @@ -0,0 +1,165 @@ | |||
| package com.iformall.service.impl; | |||
| import cn.afterturn.easypoi.handler.inter.IExcelExportServer; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.WxCUserBasicInfo; | |||
| import com.iformall.domain.po.WxCVideoTable; | |||
| import com.iformall.domain.vo.WxCUserBasicInfoVo; | |||
| import com.iformall.enums.EnumClassType; | |||
| import com.iformall.mapper.WxCUserBasicInfoMapper; | |||
| import com.iformall.mapper.WxCVideoMapper; | |||
| import com.iformall.service.WxCUserTagsService; | |||
| import com.iformall.service.WxCVideoService; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.io.BufferedInputStream; | |||
| import java.io.File; | |||
| import java.io.FileInputStream; | |||
| import java.math.BigInteger; | |||
| import java.security.MessageDigest; | |||
| import java.util.*; | |||
| import java.util.stream.Collectors; | |||
| @Service | |||
| public class WxCVideoServiceImpl implements WxCVideoService,IExcelExportServer { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| WxCUserBasicInfoMapper wxCUserBasicInfoMapper; | |||
| @Autowired | |||
| WxCUserTagsService wxCUserTagsService; | |||
| @Autowired | |||
| WxCVideoMapper wxCVideoMapper; | |||
| @Override | |||
| public Map<String,Object> getById(Long id) throws Exception { | |||
| System.out.println("id = " + id); | |||
| List<WxCVideoTable> TemplateVideo = wxCVideoMapper.getById(id); | |||
| System.out.println("TemplateVideo = " + TemplateVideo); | |||
| Map<String,Object> avatarVos = new HashMap(); | |||
| Map<String,Object> data = new HashMap(); | |||
| //Map<String,Object> authorlist = new HashMap(); | |||
| List authorlist = new ArrayList(); | |||
| for (WxCVideoTable wxCVideoTable : TemplateVideo) { | |||
| data.put("username",wxCVideoTable.getUserName()); | |||
| data.put("current_time",new Date(System.currentTimeMillis())); | |||
| Map<String,Object> avatar = new HashMap(); | |||
| avatar.put("avatar_id",wxCVideoTable.getId()); | |||
| avatar.put("avatar_name",wxCVideoTable.getName()); | |||
| avatar.put("avatar_image",wxCVideoTable.getImage()); | |||
| avatar.put("avatar_demo",wxCVideoTable.getDemo()); | |||
| avatar.put("avatar_model",wxCVideoTable.getModel()); | |||
| File modelFile = new File(wxCVideoTable.getModelPath()); | |||
| avatar.put("avatar_demo_md5",getFileMD5(modelFile)); | |||
| avatar.put("avatar_preinfo",wxCVideoTable.getPreInfo()); | |||
| File preinfoFile = new File(wxCVideoTable.getPreInfoPath()); | |||
| avatar.put("avatar_preinfo_md5",getFileMD5(preinfoFile)); | |||
| avatar.put("expire_time",wxCVideoTable.getExpireTime()); | |||
| avatar.put("class", wxCVideoTable.getClassType()); | |||
| authorlist.add(avatar); | |||
| data.put("authorlist",authorlist); | |||
| } | |||
| avatarVos.put("data",data); | |||
| Map<String,Object> info = new HashMap(); | |||
| Map<String,Object> status = new HashMap(); | |||
| info.put("log_id",id); | |||
| info.put("server_type","avatar list"); | |||
| status.put("code",1000); | |||
| status.put("msg","success"); | |||
| avatarVos.put("info",info); | |||
| avatarVos.put("status",status); | |||
| return avatarVos; | |||
| } | |||
| @Override | |||
| public WxCVideoTable selectOne(Long id, long resource_id) { | |||
| return wxCVideoMapper.selectOne(id,resource_id); | |||
| } | |||
| @Override | |||
| public List<Object> selectListForExcelExport(Object queryParams, int page) { | |||
| WxCUserBasicInfo basicInfo = (WxCUserBasicInfo) queryParams; | |||
| List<WxCUserBasicInfoVo> list = new ArrayList<WxCUserBasicInfoVo>(); | |||
| basicInfo.setBegin((page-1)*20000); | |||
| basicInfo.setLimit(20000); | |||
| list = wxCUserBasicInfoMapper.findVoList(basicInfo); | |||
| if (null == list || list.size() <= 0 ) { | |||
| return null; | |||
| } | |||
| // List<Long> userIds = list.stream().map(cc -> cc.getId()).collect(Collectors.toList()); | |||
| // if (null != userIds && userIds.size() > 0 ) { | |||
| // WxCreditHistory chaddq = new WxCreditHistory(); | |||
| // chaddq.setUserIdList(userIds); | |||
| // chaddq.setTenantId(tenantInfo.getFinalTenantId()); | |||
| // chaddq.setStartTime(basicInfo.getCreditStartTime()); | |||
| // chaddq.setEndTime(basicInfo.getCreditEndTime()); | |||
| // List<WxCreditHistory> chadds = creditHistoryMapper.findAddList(chaddq); | |||
| // Map<Long, Integer> chaddMap = new HashMap<>(); | |||
| // if(null != chadds){ | |||
| // chaddMap = chadds.stream().collect(Collectors.toMap(WxCreditHistory::getCUserId, WxCreditHistory::getCreditNum)); | |||
| // } | |||
| // | |||
| // WxCreditHistory chlesq = new WxCreditHistory(); | |||
| // chlesq.setUserIdList(userIds); | |||
| // chlesq.setTenantId(tenantInfo.getFinalTenantId()); | |||
| // chlesq.setStartTime(basicInfo.getCreditStartTime()); | |||
| // chlesq.setEndTime(basicInfo.getCreditEndTime()); | |||
| // List<WxCreditHistory> chless = creditHistoryMapper.findLesList(chlesq); | |||
| // Map<Long, Integer> chlesMap = new HashMap<>(); | |||
| // if(null != chless){ | |||
| // chlesMap = chless.stream().collect(Collectors.toMap(WxCreditHistory::getCUserId, WxCreditHistory::getCreditNum)); | |||
| // } | |||
| //处理会员标签 | |||
| List<Long> tagIds = list.stream().map(cc -> cc.getTagId()).collect(Collectors.toList()); | |||
| Map<Long, String> tagIdName = wxCUserTagsService.findIdTagNames(basicInfo.getFinalTenantId(),tagIds); | |||
| list.stream().forEach(u->{ | |||
| // u.setAddCredit(finalChaddMap.get(u.getId())); | |||
| // u.setLesCredit(finalChlesMap.get(u.getId())); | |||
| u.setTagNames(tagIdName.get(u.getTagId())); | |||
| }); | |||
| // | |||
| // } | |||
| if (null != list && list.size() > 0 ) { | |||
| List<Object> retList = new ArrayList<Object>(); | |||
| retList.addAll(list); | |||
| return retList; | |||
| } | |||
| return null; | |||
| } | |||
| public static String getFileMD5(File file) throws Exception { | |||
| MessageDigest md = MessageDigest.getInstance("MD5"); | |||
| try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) { | |||
| byte[] buffer = new byte[1024]; | |||
| int read = 0; | |||
| while ((read = bis.read(buffer)) != -1) { | |||
| md.update(buffer, 0, read); | |||
| } | |||
| } | |||
| byte[] digest = md.digest(); | |||
| String md5 = String.format("%032x", new BigInteger(1, digest)); | |||
| return md5; | |||
| } | |||
| } | |||
| @@ -0,0 +1,191 @@ | |||
| package com.iformall.service.impl; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
| import com.google.common.collect.Lists; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.WxCVideoTable; | |||
| import com.iformall.domain.po.WxCVoiceTable; | |||
| import com.iformall.domain.po.sm.VoiceInfo; | |||
| import com.iformall.domain.vo.VoiceInfoVo; | |||
| import com.iformall.enums.EnumClassType; | |||
| import com.iformall.enums.EnumSpeakType; | |||
| import com.iformall.mapper.VoiceMapper; | |||
| import com.iformall.mapper.WxCVoiceMapper; | |||
| import com.iformall.service.WxCVoiceService; | |||
| import com.iformall.sm.AiPreviewParam; | |||
| import com.iformall.sm.AiPreviewResult; | |||
| import com.iformall.sm.AiVideoHelper; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.util.ObjectUtils; | |||
| import java.util.*; | |||
| @Service | |||
| public class WxCVoiceServiceImpl implements WxCVoiceService { | |||
| @Autowired | |||
| WxCVoiceMapper wxCVoiceMapper; | |||
| @Autowired | |||
| VoiceMapper voiceMapper; | |||
| private final static String str = "\uD83D\uDD57"; | |||
| private final static String url = "https://suimang.oss-accelerate.aliyuncs.com/builtin/tts_all_sample/"; | |||
| private final static String end = ".wav"; | |||
| @Override | |||
| public Map<String,Object> getById(Long id) { | |||
| List<WxCVoiceTable> resultList = wxCVoiceMapper.getById(id); | |||
| HashMap<String, Object> result = new HashMap<>(); | |||
| HashMap<String, Object> data = new HashMap<>(); | |||
| List audioList = new ArrayList(); | |||
| for (WxCVoiceTable wxCVoiceTable : resultList) { | |||
| HashMap<String, Object> audio = new HashMap<>(); | |||
| HashMap<String, Object> voice = new HashMap<>(); | |||
| data.put("username", wxCVoiceTable.getUserName()); | |||
| data.put("current_time", new Date(System.currentTimeMillis())); | |||
| audioList.add(audio); | |||
| audio.put("LocaleName", wxCVoiceTable.getLocalelName()); | |||
| audio.put("displayname", wxCVoiceTable.getLocalDisPlayName()); | |||
| List voiceList = new ArrayList(); | |||
| voiceList.add(voice); | |||
| audio.put("voiceList", voiceList); | |||
| voice.put("voiceid", wxCVoiceTable.getVoiceId()); | |||
| voice.put("expire_time", wxCVoiceTable.getExpireTime()); | |||
| voice.put("voicename", wxCVoiceTable.getVoiceName()); | |||
| voice.put("voicetype", EnumClassType.SHARE.getCode()); | |||
| voice.put("displayname", wxCVoiceTable.getVoiceDisplayName()); | |||
| voice.put("gender", wxCVoiceTable.getGender()); | |||
| List styleList = new ArrayList(); | |||
| List<String> strings = JSON.parseArray(wxCVoiceTable.getStyleList(), String.class); | |||
| for (String y : strings) { | |||
| // List list = new ArrayList<>(); | |||
| HashMap<String, Object> style = new HashMap<>(); | |||
| style.put("stylename", y); | |||
| style.put("displayname", EnumSpeakType.getEnum(y).getMessage()); | |||
| style.put("styledemo", url + wxCVoiceTable.getMouldSmId() + "_" + y + end); | |||
| //list.add(style); | |||
| styleList.add(style); | |||
| } | |||
| // for (String s : Arrays.asList(wxCVoiceTable.getStyleList())) { | |||
| //// VoiceInfoVo infoVo = new VoiceInfoVo(); | |||
| //// infoVo.setName(EnumSpeakType.getEnum(s).getMessage()); | |||
| //// infoVo.setEngName(s); | |||
| //// infoVo.setUrl(url + wxCVoiceTable.getMouldSmId() + "_" + s + end); | |||
| // style.put("stylename", s); | |||
| // style.put("displayname", EnumSpeakType.getEnum(s).getMessage()); | |||
| // style.put("styledemo", url + wxCVoiceTable.getMouldSmId() + "_" + s + end); | |||
| // styleList.add(style); | |||
| // } | |||
| // styleList.add(style); | |||
| voice.put("styleList", styleList); | |||
| // style.put("stylename", wxCVoiceTable.getStyleName()); | |||
| // style.put("displayname", wxCVoiceTable.getStyleDisplayName()); | |||
| // style.put("styledemo", wxCVoiceTable.getStyleDemo()); | |||
| } | |||
| data.put("audioList", audioList); | |||
| result.put("data",data); | |||
| HashMap<String, Object> info = new HashMap<>(); | |||
| HashMap<String, Object> status = new HashMap<>(); | |||
| info.put("log_id",id); | |||
| info.put("server_type","audio list"); | |||
| result.put("info",info); | |||
| status.put("code",1000); | |||
| status.put("msg","success"); | |||
| result.put("status",status); | |||
| return result; | |||
| } | |||
| @Override | |||
| public Map<String,Object> voicePreview(AiPreviewParam aiPreviewParam) { | |||
| VoiceInfo voiceInfo = voiceMapper.selectOne(new LambdaQueryWrapper<VoiceInfo>().eq(VoiceInfo::getIsDel, 0).eq(VoiceInfo::getId, aiPreviewParam.getVoice_id())); | |||
| if (ObjectUtils.isEmpty(voiceInfo)){ | |||
| Map<String,Object> status = new HashMap<>(); | |||
| status.put("code",ErrorCode.SYS_SERVER_ERROR.getCode()); | |||
| status.put("msg","声音信息不存在"); | |||
| return status; | |||
| // return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "声音信息不存在"); | |||
| } | |||
| AiPreviewParam param = new AiPreviewParam(); | |||
| param.setGen_txt(aiPreviewParam.getGen_txt().replaceAll(str,"[*]")); | |||
| param.setVoice_id(voiceInfo.getMouldSmId()); | |||
| 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()){ | |||
| // Map<String,Object> status = new HashMap<>(); | |||
| // status.put("data",new ResultData(result.getTime())); | |||
| // | |||
| // return status; | |||
| // //return new ResultData(result.getTime()); | |||
| // } | |||
| Map<String,Object> resultMap = new HashMap<>(); | |||
| Map<String,Object> data = new HashMap<>(); | |||
| data.put("ttsurl",result.getUrl()); | |||
| Map<String,Object> status = new HashMap<>(); | |||
| status.put("code",1000); | |||
| status.put("msg","success"); | |||
| resultMap.put("data",data); | |||
| resultMap.put("status",status); | |||
| return resultMap; | |||
| //return new ResultData(result.getCode(), result.getMsgInfo(result.getCode(),result.getMsg())); | |||
| } | |||
| //test | |||
| @Override | |||
| public List<VoiceInfo> chooseType(Long id) { | |||
| List<VoiceInfo> voiceInfos = voiceMapper.selectList( | |||
| new LambdaQueryWrapper<VoiceInfo>().eq(VoiceInfo::getLanguageId, id).orderByAsc(VoiceInfo::getAgeType).orderByAsc(VoiceInfo::getDisplayName)); | |||
| voiceInfos.forEach(x -> { | |||
| if (StringUtils.isNotEmpty(x.getStyleList())) { | |||
| List<String> strings = JSON.parseArray(x.getStyleList(), String.class); | |||
| List<VoiceInfoVo> list = new ArrayList<>(); | |||
| strings.forEach(y->{ | |||
| VoiceInfoVo infoVo = new VoiceInfoVo(); | |||
| infoVo.setName(EnumSpeakType.getEnum(y).getMessage()); | |||
| infoVo.setEngName(y); | |||
| infoVo.setUrl(url + x.getMouldSmId() + "_" + y + end); | |||
| list.add(infoVo); | |||
| }); | |||
| VoiceInfoVo infoVo = new VoiceInfoVo(); | |||
| infoVo.setName(EnumSpeakType.getEnum(0).getMessage()); | |||
| infoVo.setUrl(url + x.getMouldSmId() + "_" + "default" + end); | |||
| infoVo.setEngName("default"); | |||
| list.add(infoVo); | |||
| x.setStyle(list); | |||
| } else { | |||
| List<VoiceInfoVo> list = Lists.newArrayList(); | |||
| VoiceInfoVo infoVo = new VoiceInfoVo(); | |||
| infoVo.setName(EnumSpeakType.getEnum(0).getMessage()); | |||
| infoVo.setEngName("default"); | |||
| infoVo.setUrl(url + x.getMouldSmId() + "_" + "default" + end); | |||
| list.add(infoVo); | |||
| x.setStyle(list); | |||
| } | |||
| }); | |||
| return voiceInfos; | |||
| } | |||
| } | |||
| @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.github.pagehelper.PageHelper; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.google.gson.JsonObject; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.common.ResultData; | |||
| @@ -32,10 +33,7 @@ import org.springframework.util.CollectionUtils; | |||
| import org.springframework.util.ObjectUtils; | |||
| import javax.transaction.xa.XAException; | |||
| import java.util.ArrayList; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import java.util.Objects; | |||
| import java.util.*; | |||
| import java.util.concurrent.Future; | |||
| import java.util.concurrent.atomic.AtomicInteger; | |||
| @@ -206,6 +204,18 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
| param.setTask_id(photoSpeakVideo.getId()); | |||
| param.setCallback_url(callbackUrl + "/callback/photo/speak"); | |||
| param.setImg(Base64Util.imageUrlToBase64(photoSpeakVideo.getPersonPhotoUrl())); | |||
| Map<String,Object> subtitleMap = new HashMap<>(); | |||
| subtitleMap.put("enabled",photoSpeakVideo.getSubtitleEnabled()); | |||
| if(EnumYesOrNo.YES.getCode().equals(photoSpeakVideo.getSubtitleEnabled())){ | |||
| Map titleParams = JSON.parseObject(photoSpeakVideo.getSubtitleParams(),Map.class); | |||
| if(titleParams == null || titleParams.isEmpty()){ | |||
| subtitleMap.put("enabled",EnumYesOrNo.NO.getCode()); | |||
| }else{ | |||
| subtitleMap.put("params",titleParams); | |||
| } | |||
| } | |||
| param.setSubtitle(subtitleMap); | |||
| String voiceMouldSm = photoSpeakVideo.getVoiceMouldSm(); | |||
| Integer sex = 1; | |||
| Integer speakType = 0; | |||
| @@ -34,7 +34,8 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { | |||
| @Override | |||
| public List<VoiceInfo> chooseType(Long id) { | |||
| List<VoiceInfo> voiceInfos = voiceMapper.selectList(new LambdaQueryWrapper<VoiceInfo>().eq(VoiceInfo::getLanguageId, id).orderByAsc(VoiceInfo::getDisplayName)); | |||
| List<VoiceInfo> voiceInfos = voiceMapper.selectList( | |||
| new LambdaQueryWrapper<VoiceInfo>().eq(VoiceInfo::getLanguageId, id).orderByAsc(VoiceInfo::getAgeType).orderByAsc(VoiceInfo::getDisplayName)); | |||
| voiceInfos.forEach(x -> { | |||
| if (StringUtils.isNotEmpty(x.getStyleList())) { | |||
| List<String> strings = JSON.parseArray(x.getStyleList(), String.class); | |||
| @@ -88,4 +89,5 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { | |||
| } | |||
| return new ResultData(result.getCode(), result.getMsgInfo(result.getCode(),result.getMsg())); | |||
| } | |||
| } | |||
| @@ -1,8 +1,13 @@ | |||
| package com.iformall.sm; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import io.swagger.models.auth.In; | |||
| import lombok.Data; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| @Data | |||
| public class AiPhotoSpeakParam { | |||
| @@ -26,6 +31,8 @@ public class AiPhotoSpeakParam { | |||
| private Long task_id; | |||
| private String callback_url; | |||
| private Map<String,Object> subtitle; | |||
| public String neglectImgString() { | |||
| StringBuffer str = new StringBuffer(); | |||
| str.append("{"); | |||
| @@ -34,9 +41,11 @@ public class AiPhotoSpeakParam { | |||
| str.append("\"voice_style\":").append("\"").append(voice_style).append("\","); | |||
| str.append("\"gender\":").append("\"").append(gender).append("\","); | |||
| str.append("\"url\":").append("\"").append(url).append("\","); | |||
| str.append("\"img\":").append("\"").append(img); | |||
| str.append("\"task_id\":").append("\"").append(task_id); | |||
| str.append("\"callback_url\":").append("\"").append(callback_url).append("\"}"); | |||
| str.append("\"img\":").append("\"").append("\","); | |||
| str.append("\"task_id\":").append("\"").append(task_id).append("\","); | |||
| str.append("\"callback_url\":").append("\"").append(callback_url).append("\","); | |||
| str.append("\"subtitle\":").append(JSON.toJSONString(subtitle)) | |||
| .append("\"}"); | |||
| return str.toString(); | |||
| } | |||
| } | |||
| @@ -8,5 +8,6 @@ public class AiPreviewParam { | |||
| private String voice_id; | |||
| private String voice_style; | |||
| private String gender; | |||
| private int speed; | |||
| } | |||
| @@ -116,9 +116,9 @@ public class AiVideoHelper { | |||
| // } | |||
| } | |||
| public static AiPhotoSpeakResult createPhotoSpeakVideo(AiPhotoSpeakParam videoParam) { | |||
| log.info("生成视频start request:" + videoParam.neglectImgString()); | |||
| String response = doPost(url + photo_speak_suffix, JSONObject.toJSONString(videoParam)); | |||
| log.info("生成视频end response:" + response); | |||
| log.info("生成视频的 IP:" + url + photo_speak_suffix); | |||
| AiPhotoSpeakResult result = new AiPhotoSpeakResult(); | |||
| if (StringUtils.isBlank(response)) { | |||
| result.setSuccess(false); | |||
| @@ -8,6 +8,9 @@ | |||
| <result column="user_id" jdbcType="BIGINT" property="userId"/> | |||
| <result column="person_photo_id" jdbcType="BIGINT" property="personPhotoId"/> | |||
| <result column="person_photo_url" jdbcType="VARCHAR" property="personPhotoUrl"/> | |||
| <result column="subtitle_enabled" jdbcType="INTEGER" property="subtitleEnabled"/> | |||
| <result column="subtitle_params" jdbcType="VARCHAR" property="subtitleParams"/> | |||
| <result column="voice_from" jdbcType="INTEGER" property="voiceFrom"/> | |||
| <result column="voice_mould_id" jdbcType="BIGINT" property="voiceMouldId"/> | |||
| <result column="voice_mould_sm" jdbcType="VARCHAR" property="voiceMouldSm"/> | |||
| @@ -39,7 +42,7 @@ | |||
| <sql id="allColumns"> | |||
| `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`, | |||
| `person_photo_id`, `person_photo_url`, `subtitle_enabled`, `subtitle_params`, `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`, | |||
| `is_hy`,`video_hy_status`,`music_id`,`save_dir` | |||
| </sql> | |||
| @@ -0,0 +1,323 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.iformall.mapper.WxCLiveUserBasicInfoMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxCUserBasicInfo"> | |||
| <id column="id" jdbcType="BIGINT" property="id"/> | |||
| <result column="phone" jdbcType="VARCHAR" property="phone"/> | |||
| <result column="birthdate" jdbcType="TIMESTAMP" property="birthdate"/> | |||
| <result column="education" jdbcType="VARCHAR" property="education"/> | |||
| <result column="sex" jdbcType="INTEGER" property="sex"/> | |||
| <result column="height" jdbcType="VARCHAR" property="height"/> | |||
| <result column="weight" jdbcType="VARCHAR" property="weight"/> | |||
| <result column="id_card" jdbcType="VARCHAR" property="idCard"/> | |||
| <result column="email" jdbcType="VARCHAR" property="email"/> | |||
| <result column="address" jdbcType="VARCHAR" property="address"/> | |||
| <result column="poins" jdbcType="INTEGER" property="poins"/> | |||
| <result column="tag_id" jdbcType="BIGINT" property="tagId"/> | |||
| <result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | |||
| <result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | |||
| <result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/> | |||
| <result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId"/> | |||
| <result column="final_tenant_id" jdbcType="VARCHAR" property="finalTenantId"/> | |||
| <result column="name" jdbcType="VARCHAR" property="name"/> | |||
| <result column="level" jdbcType="VARCHAR" property="level"/> | |||
| <result column="nick_name" jdbcType="VARCHAR" property="nickName"/> | |||
| <result column="avatar_url" jdbcType="VARCHAR" property="avatarUrl"/> | |||
| <result column="credit" jdbcType="INTEGER" property="credit"/> | |||
| <result column="active_time" jdbcType="TIMESTAMP" property="activeTime"/> | |||
| <result column="login_count" jdbcType="INTEGER" property="loginCount"/> | |||
| <result column="act_record" jdbcType="INTEGER" property="actRecord"/> | |||
| <result column="score_date" jdbcType="TIMESTAMP" property="scoreDate"/> | |||
| <result column="code" jdbcType="VARCHAR" property="code"/> | |||
| <result column="version" jdbcType="INTEGER" property="version"/> | |||
| <result column="expire_time" jdbcType="VARCHAR" property="expireTime"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| wcubi.`id`,wcubi.`phone`,wcubi.`birthdate`,wcubi.`education`,wcubi.`sex`,wcubi.`height`,wcubi.`weight`,wcubi.`id_card`,wcubi.`email`, | |||
| wcubi.`address`,wcubi.`poins`,wcubi.`tag_id`,wcubi.`create_date`,wcubi.`update_date`, | |||
| wcubi.`final_tenant_id`,wcubi.`tenant_id`,wcubi.`parent_tenant_id`,wcubi.`name`,wcubi.`nick_name`, | |||
| wcubi.`avatar_url`,wcubi.`credit`,wcubi.`active_time`,wcubi.`login_count`,wcubi.`act_record`, | |||
| wcubi.score_date,wcubi.status,wcubi1.code,wcubi1.version,wcubi1.expire_time | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||
| where 1=1 | |||
| <if test=" null != tenantId and '' != tenantId"> | |||
| and wcubi.`tenant_id` like concat('%,', #{tenantId},',%') | |||
| </if> | |||
| <if test=" null != id "> | |||
| and wcubi.`id` = #{id} | |||
| </if> | |||
| <if test=" null != phone "> | |||
| and wcubi.`phone` like concat('%', #{phone},'%') | |||
| </if> | |||
| <if test=" null != birthdate "> | |||
| and wcubi.`birthdate` = #{birthdate} | |||
| </if> | |||
| <if test=" null != education "> | |||
| and wcubi.`education` like concat('%', #{education},'%') | |||
| </if> | |||
| <if test=" null != sex "> | |||
| and wcubi.`sex` = #{sex} | |||
| </if> | |||
| <if test=" null != email "> | |||
| and wcubi.`email` like concat('%', #{email},'%') | |||
| </if> | |||
| <if test=" null != address "> | |||
| and wcubi.`address` like concat('%', #{address},'%') | |||
| </if> | |||
| <if test=" null != levelStartScore "> | |||
| and wcubi.poins >= #{levelStartScore} | |||
| </if> | |||
| <if test=" null != levelEndScore"> | |||
| and wcubi.poins < #{levelEndScore} | |||
| </if> | |||
| <if test=" null != tagId "> | |||
| and wcubi.`tag_id` = #{tagId} | |||
| </if> | |||
| <if test=" null != createDate "> | |||
| and wcubi.`create_date` = #{createDate} | |||
| </if> | |||
| <if test=" null != updateDate "> | |||
| and wcubi.`update_date` = #{updateDate} | |||
| </if> | |||
| <if test=" null != actRecord "> | |||
| and wcubi.`act_record` = #{actRecord} | |||
| </if> | |||
| <if test=" null != name "> | |||
| and wcubi.`name` like concat('%', #{name},'%') | |||
| </if> | |||
| <if test=" null != startTime and null != endTime"> | |||
| and wcubi.`create_date` between #{startTime} and #{endTime} | |||
| </if> | |||
| <if test=" null != activeStartTime and null != activeEndTime"> | |||
| and wcubi.`active_time` between #{activeStartTime} and #{activeEndTime} | |||
| </if> | |||
| <if test=" null != status "> | |||
| and wcubi.`status` = #{status} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and wcubi.id in | |||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
| #{idItem} | |||
| </foreach> | |||
| </if> | |||
| <if test=" null != sortColumns">order by ${sortColumns}</if> | |||
| </sql> | |||
| <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||
| select * | |||
| from wx_c_user_live_basic_info wcubi1 | |||
| where wcubi1.id =#{id} | |||
| </select> | |||
| <update id="updateCode"> | |||
| update wx_c_user_live_basic_info set code = #{code} where id = #{id} | |||
| </update> | |||
| <sql id="allColumnsOfScoreList"> | |||
| wcubi.id,wcubi.phone,wcubi.birthdate,wcubi.education,wcubi.sex,wcubi.`height`,wcubi.`weight`,wcubi.`id_card`,wcubi.email,wcubi.address,wcubi.poins,wcubi.tag_id, | |||
| wcubi.create_date,wcubi.update_date,wcubi.name,wcubi.level,wcubi.nick_name,wcubi.score_date,wcubi.final_tenant_id | |||
| </sql> | |||
| <resultMap id="VoBaseResultMap" type="com.iformall.domain.vo.WxCUserBasicInfoVo"> | |||
| <id column="id" jdbcType="BIGINT" property="id"/> | |||
| <result column="phone" jdbcType="VARCHAR" property="phone"/> | |||
| <result column="birthdate" jdbcType="TIMESTAMP" property="birthdate"/> | |||
| <result column="education" jdbcType="VARCHAR" property="education"/> | |||
| <result column="sex" jdbcType="INTEGER" property="sex"/> | |||
| <result column="height" jdbcType="VARCHAR" property="height"/> | |||
| <result column="weight" jdbcType="VARCHAR" property="weight"/> | |||
| <result column="id_card" jdbcType="VARCHAR" property="idCard"/> | |||
| <result column="email" jdbcType="VARCHAR" property="email"/> | |||
| <result column="address" jdbcType="VARCHAR" property="address"/> | |||
| <result column="poins" jdbcType="INTEGER" property="poins"/> | |||
| <result column="tag_id" jdbcType="BIGINT" property="tagId"/> | |||
| <result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | |||
| <result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | |||
| <result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/> | |||
| <result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId"/> | |||
| <result column="final_tenant_id" jdbcType="VARCHAR" property="finalTenantId"/> | |||
| <result column="name" jdbcType="VARCHAR" property="name"/> | |||
| <result column="level" jdbcType="VARCHAR" property="level"/> | |||
| <result column="nick_name" jdbcType="VARCHAR" property="nickName"/> | |||
| <result column="credit" jdbcType="INTEGER" property="credit"/> | |||
| <result column="tags" jdbcType="VARCHAR" property="tags"/> | |||
| <result column="active_time" jdbcType="TIMESTAMP" property="activeTime"/> | |||
| </resultMap> | |||
| <sql id="dynamicVoWhereConditions"> | |||
| where 1=1 | |||
| <if test=" null != id "> | |||
| and wcubi.`id` = #{id} | |||
| </if> | |||
| <if test=" null != tenantId and '' != tenantId"> | |||
| and wcubi.`tenant_id` like concat('%,', #{tenantId},',%') | |||
| </if> | |||
| <if test=" null != phone and '' != phone"> | |||
| and wcubi.`phone` like concat('%', #{phone},'%') | |||
| </if> | |||
| <if test=" null != birthdate "> | |||
| and wcubi.`birthdate` = #{birthdate} | |||
| </if> | |||
| <if test=" null != education and '' != education"> | |||
| and wcubi.`education` like concat('%', #{education},'%') | |||
| </if> | |||
| <if test=" null != sex "> | |||
| and wcubi.`sex` = #{sex} | |||
| </if> | |||
| <if test=" null != email and '' != email"> | |||
| and wcubi.`email` like concat('%', #{email},'%') | |||
| </if> | |||
| <if test=" null != address and '' != address"> | |||
| and wcubi.`address` like concat('%', #{address},'%') | |||
| </if> | |||
| <if test=" null != poins "> | |||
| and wcubi.`poins` = #{poins} | |||
| </if> | |||
| <if test=" null != tagId "> | |||
| and wcubi.`tag_id` = #{tagId} | |||
| </if> | |||
| <if test=" null != createDate "> | |||
| and wcubi.`create_date` = #{createDate} | |||
| </if> | |||
| <if test=" null != updateDate "> | |||
| and wcubi.`update_date` = #{updateDate} | |||
| </if> | |||
| <if test=" null != actRecord "> | |||
| and wcubi.`act_record` = #{actRecord} | |||
| </if> | |||
| <if test=" null != name and '' != name"> | |||
| and wcubi.`name` like concat('%', #{name},'%') | |||
| </if> | |||
| <if test=" null != startTime and null!=endTime"> | |||
| and wcubi.`create_date` between #{startTime} and #{endTime} | |||
| </if> | |||
| <if test=" null != activeStartTime and null!=activeEndTime"> | |||
| and wcubi.`active_time` between #{activeStartTime} and #{activeEndTime} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and wcubi.id in | |||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
| #{idItem} | |||
| </foreach> | |||
| </if> | |||
| order by wcubi.`active_time` DESC | |||
| <!--<if test=" null != sortColumns">order by ${sortColumns}</if>--> | |||
| </sql> | |||
| <sql id="filterWhereConditions"> | |||
| where 1=1 | |||
| <if test=" null != tenantId and '' != tenantId"> | |||
| and wcubi.`tenant_id` like concat('%,', #{tenantId},',%') | |||
| </if> | |||
| <if test=" null != startTime "> | |||
| and wcubi.create_date >= #{startTime} | |||
| </if> | |||
| <if test=" null != endTime"> | |||
| and wcubi.create_date <= #{endTime} | |||
| </if> | |||
| <if test=" null != birthStartTime "> | |||
| and wcubi.birthdate >= #{birthStartTime} | |||
| </if> | |||
| <if test=" null != birthEndTime"> | |||
| and wcubi.birthdate < #{birthEndTime} | |||
| </if> | |||
| <if test=" null != loginStartTime "> | |||
| and wcubi.active_time >= #{loginStartTime} | |||
| </if> | |||
| <if test=" null != loginEndTime"> | |||
| and wcubi.active_time <= #{loginEndTime} | |||
| </if> | |||
| <if test=" null != phones"> | |||
| and wcubi.phone in (${phones}) | |||
| </if> | |||
| <if test=" null != levelStartScore and (0 != levelStartScore and '' != levelStartScore)"> | |||
| and wcubi.poins >= #{levelStartScore} | |||
| <if test=" null != levelEndScore"> | |||
| and wcubi.poins < #{levelEndScore} | |||
| </if> | |||
| </if> | |||
| <if test=" null != levelStartScore and (0 == levelStartScore or '' == levelStartScore)"> | |||
| and (wcubi.poins is null or | |||
| (wcubi.poins >= #{levelStartScore} | |||
| <if test=" null != levelEndScore"> | |||
| and wcubi.poins < #{levelEndScore} | |||
| </if> | |||
| )) | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and wcubi.id in | |||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
| #{idItem} | |||
| </foreach> | |||
| </if> | |||
| <if test=" null != tagIds "> | |||
| and wcubi.`tag_id` in | |||
| <foreach collection="tagIds" index="index" item="tagIdItem" open="(" separator="," close=")"> | |||
| #{tagIdItem} | |||
| </foreach> | |||
| </if> | |||
| <if test=" null != sortColumns">order by ${sortColumns}</if> | |||
| </sql> | |||
| </mapper> | |||
| @@ -0,0 +1,30 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.iformall.mapper.WxCUserAuthorityMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxCUserAuthority"> | |||
| <result column="user_name" jdbcType="VARCHAR" property="userName"/> | |||
| <result column="type" jdbcType="INTEGER" property="type"/> | |||
| <result column="resource_id" jdbcType="VARCHAR" property="resourceId"/> | |||
| <result column="class" jdbcType="INTEGER" property="classType"/> | |||
| <result column="expire_time" jdbcType="VARCHAR" property="expireTime"/> | |||
| <result column="current_time" jdbcType="VARCHAR" property="currentTime"/> | |||
| </resultMap> | |||
| <select id="getAuthorAvatar" resultType="com.iformall.domain.po.WxCUserAuthority"> | |||
| select wca.user_name,wca.type,wca.resource_id,wca.expire_time,wcav.class | |||
| from wx_c_author wca | |||
| join wx_c_avatar wcav on wca.resource_id = wcav.id and wca.type = 0 | |||
| where wca.user_id=#{id} and wca.resource_id = #{resourceId} | |||
| </select> | |||
| <select id="getAuthorVoice" resultType="com.iformall.domain.po.WxCUserAuthority"> | |||
| select wca.user_name,wca.type,wca.resource_id,wca.expire_time | |||
| from wx_c_author wca | |||
| join voice_info vi on wca.resource_id = vi.id | |||
| join voice_language vl on vi.language_id =vl.id | |||
| where wca.user_id=#{id} and wca.resource_id = #{resourceId} | |||
| </select> | |||
| </mapper> | |||
| @@ -28,7 +28,9 @@ | |||
| <result column="login_count" jdbcType="INTEGER" property="loginCount"/> | |||
| <result column="act_record" jdbcType="INTEGER" property="actRecord"/> | |||
| <result column="score_date" jdbcType="TIMESTAMP" property="scoreDate"/> | |||
| <result column="status" jdbcType="INTEGER" property="status"/> | |||
| <result column="code" jdbcType="VARCHAR" property="code"/> | |||
| <result column="version" jdbcType="INTEGER" property="version"/> | |||
| <result column="expire_time" jdbcType="VARCHAR" property="expireTime"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| @@ -38,6 +40,13 @@ | |||
| wcubi.`avatar_url`,wcubi.`credit`,wcubi.`active_time`,wcubi.`login_count`,wcubi.`act_record`, | |||
| wcubi.score_date,wcubi.status | |||
| </sql> | |||
| <sql id="allColumns1"> | |||
| wcubi.`id`,wcubi.`phone`,wcubi.`birthdate`,wcubi.`education`,wcubi.`sex`,wcubi.`height`,wcubi.`weight`,wcubi.`id_card`,wcubi.`email`, | |||
| wcubi.`address`,wcubi.`poins`,wcubi.`tag_id`,wcubi.`create_date`,wcubi.`update_date`, | |||
| wcubi.`final_tenant_id`,wcubi.`tenant_id`,wcubi.`parent_tenant_id`,wcubi.`name`,wcubi.`nick_name`, | |||
| wcubi.`avatar_url`,wcubi.`credit`,wcubi.`active_time`,wcubi.`login_count`,wcubi.`act_record`, | |||
| wcubi.score_date,wcubi.status,wcubi1.code,wcubi1.version,wcubi1.expire_time | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||
| where 1=1 | |||
| @@ -130,6 +139,7 @@ | |||
| where wcubi.id =#{id} | |||
| </select> | |||
| <select id="findList" parameterType="com.iformall.domain.po.WxCUserBasicInfo" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| @@ -148,7 +158,7 @@ | |||
| </foreach> | |||
| </if> | |||
| </select> | |||
| <select id="findIdList" parameterType="com.iformall.domain.po.WxCUserBasicInfo" resultType="Long"> | |||
| select id | |||
| from wx_c_user_basic_info wcubi | |||
| @@ -573,4 +583,5 @@ | |||
| <update id="cuserOldToNew" statementType="CALLABLE" > | |||
| {call cuser_old_to_new(#{oldCuserId},#{newCuserId},#{tableIndex},#{finalTableIndex})} | |||
| </update> | |||
| </mapper> | |||
| @@ -0,0 +1,44 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.iformall.mapper.WxCVideoMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxCVideoTable"> | |||
| <id column="id" jdbcType="INTEGER" property="id"/> | |||
| <result column="user_name" jdbcType="VARCHAR" property="userName"/> | |||
| <result column="name" jdbcType="VARCHAR" property="name"/> | |||
| <result column="image" jdbcType="VARCHAR" property="image"/> | |||
| <result column="demo" jdbcType="VARCHAR" property="demo"/> | |||
| <result column="model" jdbcType="VARCHAR" property="model"/> | |||
| <result column="model_path" jdbcType="VARCHAR" property="modelPath"/> | |||
| <result column="class" jdbcType="VARCHAR" property="classType"/> | |||
| <result column="preinfo" jdbcType="VARCHAR" property="preInfo"/> | |||
| <result column="preinfo_path" jdbcType="VARCHAR" property="preInfoPath"/> | |||
| <result column="expire_time" jdbcType="VARCHAR" property="expireTime"/> | |||
| </resultMap> | |||
| <!--<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxCVideoTable"> | |||
| <result column="user_name" jdbcType="VARCHAR" property="username"/> | |||
| <result column="expire_time" jdbcType="VARCHAR" property="expireTime"/> | |||
| </resultMap>--> | |||
| <select id="getById" resultMap="BaseResultMap"> | |||
| SELECT wca.user_name,expire_time,wcav.id,wcav.name,wcav.image,wcav.model,wcav.preinfo,wcav.demo | |||
| ,wcav.class,wcav.model_path,wcav.preinfo_path | |||
| from wx_c_author wca | |||
| left join wx_c_avatar wcav on wcav.id =wca.resource_id | |||
| where wca.resource_id | |||
| in (select wca.resource_id from wx_c_author wca WHERE wca.user_id =#{id} AND wca.type = 0 ) | |||
| </select> | |||
| <select id="selectOne" resultType="com.iformall.domain.po.WxCVideoTable"> | |||
| SELECT wca.user_name,expire_time,wcav.id,wcav.name,wcav.image,wcav.model,wcav.preinfo,wcav.demo | |||
| ,wcav.class,wcav.model_path,wcav.preinfo_path | |||
| from wx_c_author wca | |||
| left join wx_c_avatar wcav on wcav.id =wca.resource_id | |||
| where wca.resource_id =#{resource_id} and wca.user_id = #{id} | |||
| </select> | |||
| </mapper> | |||
| @@ -0,0 +1,45 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.iformall.mapper.WxCVoiceMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxCVoiceTable"> | |||
| <result column="user_name" jdbcType="VARCHAR" property="userName"/> | |||
| <result column="name" jdbcType="VARCHAR" property="localelName"/> | |||
| <result column="chinese_name" jdbcType="VARCHAR" property="localDisPlayName"/> | |||
| <result column="id" jdbcType="INTEGER" property="voiceId"/> | |||
| <result column="class" jdbcType="INTEGER" property="voiceType"/> | |||
| <result column="local_name" jdbcType="VARCHAR" property="voiceName"/> | |||
| <result column="display_name" jdbcType="VARCHAR" property="voiceDisplayName"/> | |||
| <result column="sex" jdbcType="INTEGER" property="gender"/> | |||
| <result column="style_list" jdbcType="VARCHAR" property="styleList"/> | |||
| <result column="mould_sm_id" jdbcType="VARCHAR" property="MouldSmId"/> | |||
| <result column="style_name" jdbcType="VARCHAR" property="styleName"/> | |||
| <result column="style_display_name" jdbcType="VARCHAR" property="styleDisplayName"/> | |||
| <result column="style_demo" jdbcType="VARCHAR" property="styleDemo"/> | |||
| </resultMap> | |||
| <!-- <select id="getById" resultMap="BaseResultMap">--> | |||
| <!--select wca.user_name,wca.resource_id,wca.expire_time,wcv.id, wcv.localel_id ,wcv.id ,wcv.voice_name,wcv.voice_display_name ,wcv.gender , wcv.class , wcvl.id,wcvl.local_name,wcvl.local_display_name,wcvs.id,wcvs.voice_id,wcvs.style_name,wcvs.style_display_name,wcvs.style_demo--> | |||
| <!--from wx_c_author wca--> | |||
| <!--INNER JOIN wx_c_voice wcv on wca.resource_id = wcv.id--> | |||
| <!--and wca.type = 1--> | |||
| <!--join wx_c_voice_local wcvl on wcv.localel_id = wcvl.id--> | |||
| <!--join wx_c_voice_style wcvs on wcv.id=wcvs.voice_id where wca.user_id = #{id}--> | |||
| <!-- </select> --> | |||
| <select id="getById" resultMap="BaseResultMap"> | |||
| select wca.user_name,wca.resource_id,wca.expire_time,vi.id,vi.language_id,vi.sex,vi.display_name,vi.local_name,vi.style_list, | |||
| vl.name,vl.chinese_name | |||
| FROM wx_c_author wca | |||
| join voice_info vi on wca.resource_id = vi.id | |||
| join voice_language vl on vi.language_id =vl.id | |||
| WHERE wca.user_id=#{id} | |||
| </select> | |||
| </mapper> | |||