后台服务
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

264 linhas
12 KiB

  1. package com.iformall.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.github.pagehelper.PageInfo;
  4. import com.iformall.annotation.AuthIgnore;
  5. import com.iformall.common.ErrorCode;
  6. import com.iformall.common.ResultData;
  7. import com.iformall.domain.po.base.BaseEntity;
  8. import com.iformall.domain.po.sm.MouldPatch;
  9. import com.iformall.domain.po.sm.MouldPatchSign;
  10. import com.iformall.domain.po.sm.UserMouldVideo;
  11. import com.iformall.domain.vo.WxCouponOrderBVo;
  12. import com.iformall.enums.EnumMouldSendType;
  13. import com.iformall.enums.EnumVideoStatus;
  14. import com.iformall.enums.EnumaMouldPatchStatus;
  15. import com.iformall.exception.MallinkException;
  16. import com.iformall.service.sm.MouldPatchService;
  17. import com.iformall.service.sm.MouldPatchSignService;
  18. import com.iformall.service.sm.UserMouldVideoService;
  19. import com.iformall.video.VideoFactory;
  20. import com.iformall.video.entity.VideUploadResult;
  21. import io.swagger.annotations.Api;
  22. import io.swagger.annotations.ApiImplicitParam;
  23. import io.swagger.annotations.ApiImplicitParams;
  24. import io.swagger.annotations.ApiOperation;
  25. import lombok.SneakyThrows;
  26. import org.apache.commons.lang3.StringUtils;
  27. import org.slf4j.Logger;
  28. import org.slf4j.LoggerFactory;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.web.bind.annotation.*;
  31. import javax.servlet.http.HttpServletRequest;
  32. import javax.servlet.http.HttpServletResponse;
  33. import java.io.*;
  34. import java.net.URL;
  35. import java.nio.charset.StandardCharsets;
  36. import java.util.Date;
  37. import java.util.List;
  38. @RestController
  39. @RequestMapping("/api/userVideo")
  40. @Api(description = "模板接口")
  41. public class UserMouldVideoController extends BaseController {
  42. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  43. @Autowired
  44. private UserMouldVideoService userMouldVideoService;
  45. @Autowired
  46. private MouldPatchService mouldPatchService;
  47. @Autowired
  48. private VideoFactory videoFactory;
  49. @Autowired
  50. String videoType;
  51. @ApiOperation("分页列表接口")
  52. @GetMapping("list")
  53. @ApiImplicitParams({
  54. @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
  55. @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
  56. public ResultData list(@ModelAttribute UserMouldVideo record, Integer pageNum, Integer pageSize) {
  57. logger.debug("[" + getIpAddr() + "] UserMouldVideoController::list");
  58. if (record == null) record = new UserMouldVideo();
  59. if(record.getVideoType() != null && record.getVideoType().intValue() == -1){
  60. record.setVideoType(null);
  61. }
  62. record.setUserId(getMemberId());
  63. record.setSortColumns(BaseEntity.SortField.UpdateDate_DESC);
  64. final PageInfo<UserMouldVideo> page = userMouldVideoService.cListAsPage(record, pageNum, pageSize);
  65. return new ResultData(page);
  66. }
  67. @ApiOperation("根据id查询接口")
  68. @GetMapping("/findById")
  69. @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true)
  70. public ResultData findById(Long id) {
  71. logger.debug("[" + getIpAddr() + "] MouldPatchController::findById");
  72. if(id == null){
  73. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数为空");
  74. }
  75. UserMouldVideo mouldVideo = userMouldVideoService.getById(id);
  76. if(mouldVideo == null || !mouldVideo.getUserId().equals(getMemberId())){
  77. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到用户数据");
  78. }
  79. return new ResultData(mouldVideo);
  80. }
  81. @ApiOperation("根据id删除接口")
  82. @GetMapping("/del")
  83. @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true)
  84. public ResultData del(Long id) {
  85. logger.debug("[" + getIpAddr() + "] MouldPatchController::del");
  86. if(id == null){
  87. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数为空");
  88. }
  89. UserMouldVideo mouldVideo = userMouldVideoService.getById(id);
  90. if(mouldVideo == null || !mouldVideo.getUserId().equals(getMemberId())){
  91. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到用户数据");
  92. }
  93. // if(EnumVideoStatus.ing.getCode().equals(mouldVideo.getVideoStatus())
  94. // || EnumVideoStatus.success.getCode().equals(mouldVideo.getVideoStatus())
  95. // || EnumVideoStatus.upload_ing.getCode().equals(mouldVideo.getVideoStatus())
  96. // || EnumVideoStatus.upload_fail.getCode().equals(mouldVideo.getVideoStatus())){
  97. // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"视频生成中");
  98. // }
  99. userMouldVideoService.deleteById(id);
  100. return new ResultData();
  101. }
  102. @ApiOperation("新增接口")
  103. @PostMapping("saveOrUpdate")
  104. public ResultData saveOrUpdate(@RequestBody UserMouldVideo record) {
  105. logger.debug("[" + getIpAddr() + "] MouldPatchController::saveOrUpdate");
  106. record.setUserId(getMemberId());
  107. if(record.getId() != null){
  108. UserMouldVideo userMouldVideo = userMouldVideoService.findVideo(record.getId());
  109. if(userMouldVideo == null){
  110. return new ResultData(ErrorCode.SYS_SERVER_ERROR);
  111. }
  112. if(EnumVideoStatus.ing.getCode().equals(userMouldVideo.getVideoStatus())
  113. || EnumVideoStatus.success.getCode().equals(userMouldVideo.getVideoStatus())
  114. || EnumVideoStatus.upload_ing.getCode().equals(userMouldVideo.getVideoStatus())
  115. || EnumVideoStatus.upload_fail.getCode().equals(userMouldVideo.getVideoStatus())){
  116. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"视频生成中");
  117. }
  118. if(EnumVideoStatus.upload_success.getCode().equals(userMouldVideo.getVideoStatus())){
  119. //上传阿里云状态 生成成功
  120. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"视频已生成完成");
  121. }
  122. }
  123. if(record.getPersonMouldId() == null){
  124. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未选择数字人");
  125. }
  126. return userMouldVideoService.saveOrUpdate(record);
  127. }
  128. @ApiOperation("生成视频")
  129. @PostMapping("createVideo")
  130. public ResultData create(@RequestBody UserMouldVideo record) {
  131. logger.debug("[" + getIpAddr() + "] MouldPatchController::saveOrUpdate");
  132. if(record.getId() == null){
  133. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  134. }
  135. UserMouldVideo mouldVideo = userMouldVideoService.getById(record.getId());
  136. logger.info("TEST--"+ JSONObject.toJSONString(mouldVideo));
  137. if(mouldVideo == null || !mouldVideo.getUserId().equals(getMemberId())){
  138. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到用户数据");
  139. }
  140. if(StringUtils.isEmpty(mouldVideo.getPaperwork())){
  141. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未填写视频文案");
  142. }
  143. if(EnumVideoStatus.ing.getCode().equals(mouldVideo.getVideoStatus())
  144. || EnumVideoStatus.success.getCode().equals(mouldVideo.getVideoStatus())
  145. || EnumVideoStatus.upload_ing.getCode().equals(mouldVideo.getVideoStatus())
  146. || EnumVideoStatus.upload_fail.getCode().equals(mouldVideo.getVideoStatus())){
  147. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"视频生成中");
  148. }
  149. if(EnumVideoStatus.upload_success.getCode().equals(mouldVideo.getVideoStatus())){
  150. //上传阿里云状态 生成成功
  151. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"视频已生成完成");
  152. }
  153. UserMouldVideo mouldVideoUpd = new UserMouldVideo();
  154. mouldVideoUpd.setId(record.getId());
  155. mouldVideoUpd.setVideoStatus(EnumVideoStatus.ing.getCode());
  156. mouldVideoUpd.setVideoMsg("");
  157. mouldVideoUpd.setCreateVideoDate(new Date());
  158. userMouldVideoService.saveOrUpdate(mouldVideoUpd);
  159. userMouldVideoService.createVideo(mouldVideo);
  160. return new ResultData();
  161. }
  162. @ApiOperation("根据id查询接口")
  163. @GetMapping("/findVideo")
  164. @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true)
  165. public ResultData findVideo(Long id) {
  166. logger.debug("[" + getIpAddr() + "] MouldPatchController::findVideo");
  167. UserMouldVideo userMouldVideo = userMouldVideoService.findVideo(id);
  168. // if(EnumVideoStatus.upload_ing.getCode().equals(userMouldVideo.getVideoStatus())
  169. // || EnumVideoStatus.upload_success.getCode().equals(userMouldVideo.getVideoStatus())
  170. // || EnumVideoStatus.upload_fail.getCode().equals(userMouldVideo.getVideoStatus())){
  171. // //上传阿里云状态 都是生成成功
  172. // userMouldVideo.setVideoStatus(EnumVideoStatus.success.getCode());
  173. // }
  174. return new ResultData(userMouldVideo);
  175. }
  176. @GetMapping(value = "/videoDetial")
  177. @ApiOperation("视频详情")
  178. @ApiImplicitParams({
  179. @ApiImplicitParam(name = "videoId", value = "视频编号", dataType = "String", paramType = "query", required = true)})
  180. public ResultData videoDetial(String videoId) {
  181. try {
  182. VideUploadResult videoDetail = videoFactory.getExcutor(videoType).getVideoDetailWithCache(videoId);
  183. return new ResultData(videoDetail);
  184. } catch (Exception e) {
  185. logger.error(e.getMessage());
  186. return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR);
  187. }
  188. }
  189. @AuthIgnore
  190. @SneakyThrows
  191. @GetMapping("exportVideo")
  192. public void exportVideo(Long id, HttpServletRequest request, HttpServletResponse response) {
  193. logger.debug("[" + getIpAddr() + "] UserMouldVideoController::exportVideo");
  194. response.reset();
  195. OutputStream outputStream = null;
  196. try {
  197. outputStream = response.getOutputStream();
  198. } catch (IOException e) {
  199. throw new MallinkException(ErrorCode.SYS_SERVER_ERROR);
  200. }
  201. try{
  202. if(id == null){
  203. throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL);
  204. }
  205. UserMouldVideo mouldVideo = userMouldVideoService.getById(id);
  206. // if(mouldVideo == null || !mouldVideo.getUserId().equals(getMemberId())){
  207. // throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到用户数据");
  208. // }
  209. if(!EnumVideoStatus.upload_success.getCode().equals(mouldVideo.getVideoStatus())){
  210. throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"视频未生成成功");
  211. }
  212. //获取响应的输出流
  213. InputStream inputStream = new URL(mouldVideo.getVideoPlayUrl()).openStream();
  214. response.setHeader("Content-Disposition", "attachment; filename="+mouldVideo.getTitle() );
  215. //解决编码问题
  216. response.setHeader("Content-Type","application/octet-stream");
  217. byte[] cache = new byte[1024 * 300];
  218. int flag;
  219. while ((flag = inputStream.read(cache))!=-1){
  220. outputStream.write(cache, 0, flag);
  221. }
  222. }catch(MallinkException e){
  223. ResultData resultData = new ResultData(e.getErrorCode(), e.getMessage());
  224. //解决编码问题
  225. response.setHeader("Content-Type","application/json");
  226. outputStream.write(JSONObject.toJSONString(resultData).getBytes(StandardCharsets.UTF_8));
  227. }finally {
  228. outputStream.flush();
  229. outputStream.close();
  230. }
  231. }
  232. }