CommController.java 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package com.ruoyi.web.controller.front;
  2. import com.alibaba.fastjson2.JSONObject;
  3. import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse;
  4. import com.ruoyi.common.annotation.Anonymous;
  5. import com.ruoyi.common.constant.CacheConstants;
  6. import com.ruoyi.common.constant.Constants;
  7. import com.ruoyi.common.constant.UserConstants;
  8. import com.ruoyi.common.core.domain.AjaxResult;
  9. import com.ruoyi.common.core.domain.entity.SysDictData;
  10. import com.ruoyi.common.core.domain.entity.SysUser;
  11. import com.ruoyi.common.core.redis.RedisCache;
  12. import com.ruoyi.common.core.text.Convert;
  13. import com.ruoyi.common.utils.PhoneUtils;
  14. import com.ruoyi.common.utils.StringUtils;
  15. import com.ruoyi.common.vod.VodPlayAuthDto;
  16. import com.ruoyi.common.vod.VodUtils;
  17. import com.ruoyi.common.vod.VodZlsjsUtils;
  18. import com.ruoyi.dz.domain.DzCards;
  19. import com.ruoyi.dz.service.IDzCardsService;
  20. import com.ruoyi.enums.SmsTypeEnum;
  21. import com.ruoyi.system.domain.SysConfig;
  22. import com.ruoyi.system.service.ISysConfigService;
  23. import com.ruoyi.system.service.ISysDictTypeService;
  24. import com.ruoyi.system.service.ISysUserService;
  25. import com.ruoyi.system.service.ShortMessageService;
  26. import io.swagger.annotations.Api;
  27. import io.swagger.annotations.ApiOperation;
  28. import lombok.extern.slf4j.Slf4j;
  29. import org.apache.commons.collections.CollectionUtils;
  30. import org.apache.commons.compress.utils.Lists;
  31. import org.springframework.web.bind.annotation.*;
  32. import java.util.*;
  33. import java.util.stream.Collectors;
  34. @RestController
  35. @RequestMapping("front/comm")
  36. @Api(tags = "前台-公共")
  37. @Slf4j
  38. public class CommController {
  39. private final ISysDictTypeService dictTypeService;
  40. private final ShortMessageService shortMessageService;
  41. private final RedisCache redisCache;
  42. private final ISysUserService userService;
  43. private final ISysConfigService configService;
  44. private final IDzCardsService cardsService;
  45. private final VodUtils vodUtils;
  46. private final VodZlsjsUtils vodZlsjsUtils;
  47. public CommController(ISysDictTypeService dictTypeService, ShortMessageService shortMessageService, RedisCache redisCache, ISysUserService userService, ISysConfigService configService, IDzCardsService cardsService, VodUtils vodUtils, VodZlsjsUtils vodZlsjsUtils) {
  48. this.dictTypeService = dictTypeService;
  49. this.shortMessageService = shortMessageService;
  50. this.redisCache = redisCache;
  51. this.userService = userService;
  52. this.configService = configService;
  53. this.cardsService = cardsService;
  54. this.vodUtils = vodUtils;
  55. this.vodZlsjsUtils = vodZlsjsUtils;
  56. }
  57. @GetMapping(value = "dict/{dictTypes}")
  58. @Anonymous
  59. @ApiOperation("字典列表")
  60. public AjaxResult dictType(@PathVariable String[] dictTypes)
  61. {
  62. Map<String, List<JSONObject>> dictTypeMap = new HashMap<>();
  63. for(String dictType : dictTypes) {
  64. List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
  65. if (StringUtils.isNull(data))
  66. {
  67. dictTypeMap.put(dictType, Collections.emptyList());
  68. } else {
  69. dictTypeMap.put(dictType, data.stream().map(t -> {
  70. JSONObject o = new JSONObject();
  71. o.put("dictCode", t.getDictCode());
  72. o.put("dictValue", t.getDictValue());
  73. o.put("dictLabel", t.getDictLabel());
  74. return o;
  75. }).collect(Collectors.toList()));
  76. }
  77. }
  78. return AjaxResult.success(dictTypeMap);
  79. }
  80. @GetMapping(value = "config")
  81. @Anonymous
  82. @ApiOperation("前端参数列表")
  83. public AjaxResult config()
  84. {
  85. List<SysConfig> configList = Lists.newArrayList();
  86. String frontConfKeys = configService.selectConfigByKey(UserConstants.FRONT_CONFIGS);
  87. SysConfig cond = new SysConfig();
  88. for(String key : frontConfKeys.split(",")) {
  89. cond.setConfigKey(key);
  90. List<SysConfig> data = configService.selectConfigList(cond);
  91. if (CollectionUtils.isEmpty(data))
  92. {
  93. SysConfig conf = new SysConfig();
  94. conf.setConfigKey(key);
  95. configList.add(conf);
  96. } else {
  97. configList.add(data.get(0));
  98. }
  99. }
  100. return AjaxResult.success(configList);
  101. }
  102. @ApiOperation("验证卡密码")
  103. @PostMapping(value = "validateCard")
  104. public AjaxResult validateCard(String cardNo, String password) {
  105. DzCards card = cardsService.selectDzCardsByCardNo(cardNo);
  106. boolean isSuccess = null != card && card.getPassword().equals(password);
  107. if (!isSuccess) {
  108. return AjaxResult.error("验证失败");
  109. }
  110. return AjaxResult.success("验证成功");
  111. }
  112. @ApiOperation("发送验证码(验重,验证码,不登陆)")
  113. @PostMapping(value = "sendSmsNoToken")
  114. @Anonymous
  115. public AjaxResult sendSmsNoToken(String mobile, SmsTypeEnum smsType, String uuid, String code){
  116. if(!PhoneUtils.isPhoneNumber(mobile)){
  117. return AjaxResult.error("手机号错误");
  118. }
  119. if (!checkCaptcha(uuid, code)) {
  120. return AjaxResult.error("验证码错误");
  121. }
  122. SysUser sysUser = userService.selectUserByMobile(mobile);
  123. if (StringUtils.isNotNull(sysUser)) {
  124. return AjaxResult.error("手机号已存在");
  125. }
  126. if(shortMessageService.isBlacklist(mobile)){
  127. return AjaxResult.error("发送频繁,请稍候再试");
  128. }
  129. return shortMessageService.sendVerifyCode(smsType, mobile);
  130. }
  131. @ApiOperation("发送验证码(不验重,验证码,不登陆)")
  132. @PostMapping(value = "sendSmsNoValidationNoToken")
  133. @Anonymous
  134. public AjaxResult sendSmsNoValidationNoToken(String mobile, SmsTypeEnum smsType, String uuid, String code){
  135. if(!PhoneUtils.isPhoneNumber(mobile)){
  136. return AjaxResult.error("手机号错误");
  137. }
  138. if (!checkCaptcha(uuid, code)) {
  139. return AjaxResult.error("验证码错误");
  140. }
  141. if(shortMessageService.isBlacklist(mobile)){
  142. return AjaxResult.error("发送频繁,请稍候再试");
  143. }
  144. return shortMessageService.sendVerifyCode(smsType, mobile);
  145. }
  146. @ApiOperation("发送验证码(不验重,需登陆,无验证码)")
  147. @PostMapping(value = "sendSms")
  148. public AjaxResult sendSms(String mobile, SmsTypeEnum smsType){
  149. return shortMessageService.sendVerifyCode(smsType, mobile);
  150. }
  151. @ApiOperation("验证码校验")
  152. @PostMapping(value = "validateSms")
  153. @Anonymous
  154. public AjaxResult validate(String mobile, String code){
  155. boolean isSuccess = shortMessageService.checkCode(mobile, code);
  156. if(!isSuccess){
  157. return AjaxResult.error("验证失败");
  158. }
  159. return AjaxResult.success("验证成功");
  160. }
  161. private Boolean checkCaptcha(String uuid, String code) {
  162. if (configService.isSmsCaptchaEnabled()) {
  163. String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
  164. String captcha = redisCache.getCacheObject(verifyKey);
  165. redisCache.deleteObject(verifyKey);
  166. if (null == code || !code.equalsIgnoreCase(captcha)) {
  167. return false;
  168. }
  169. }
  170. return true;
  171. }
  172. @GetMapping("/vod/getVideoPlayAuth")
  173. @ApiOperation("获取视频点播授权")
  174. public AjaxResult getVideoPlayAuth(String videoId) throws Exception {
  175. VodPlayAuthDto dto = new VodPlayAuthDto();
  176. try {
  177. dto = vodUtils.getVideoPlayAuth(videoId);
  178. }catch (Exception e){
  179. log.error(e.toString());
  180. }
  181. return AjaxResult.success(dto);
  182. }
  183. @GetMapping("/vod/getVideoPlayInfo")
  184. @ApiOperation("获取视频播放信息")
  185. public AjaxResult getVideoPlayInfo(String videoId) throws Exception {
  186. GetPlayInfoResponse response = new GetPlayInfoResponse();
  187. //智隆叁加叁的vod为 “zlsjs,” 开头
  188. Boolean isZlsjs=true;
  189. try {
  190. if(videoId.startsWith(Constants.ZLSJS_PREFIX)|| Convert.toStrArray(videoId).length==2){
  191. videoId = Convert.toStrArray(videoId)[1];
  192. response = vodZlsjsUtils.getPlayInfo(videoId);
  193. }else {
  194. isZlsjs=false;
  195. response = vodUtils.getPlayInfo(videoId);
  196. }
  197. }catch (Exception e){
  198. if(isZlsjs){
  199. response = vodUtils.getPlayInfo(videoId);
  200. }else {
  201. response = vodZlsjsUtils.getPlayInfo(videoId);
  202. }
  203. }
  204. if(StringUtils.isNotNull(response)&& !org.springframework.util.CollectionUtils.isEmpty(response.getPlayInfoList())){
  205. JSONObject jsonObject = new JSONObject();
  206. jsonObject.put("videoId",videoId);
  207. jsonObject.put("palyUrl",response.getPlayInfoList().get(0).getPlayURL());
  208. jsonObject.put("duration",response.getPlayInfoList().get(0).getDuration());
  209. jsonObject.put("coverUrl",StringUtils.EMPTY);
  210. if(StringUtils.isNotNull(response.getVideoBase())){
  211. jsonObject.put("coverUrl",response.getVideoBase().getCoverURL());
  212. jsonObject.put("title",response.getVideoBase().getTitle());
  213. jsonObject.put("videoId",response.getVideoBase().getVideoId());
  214. }
  215. return AjaxResult.success(jsonObject);
  216. }
  217. return AjaxResult.error("未找到有效的url");
  218. }
  219. }