后台服务
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

UserLiveController.java 12 KiB

1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. package com.iformall.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.google.code.kaptcha.Producer;
  4. import com.iformall.annotation.AuthIgnore;
  5. import com.iformall.common.ErrorCode;
  6. import com.iformall.common.ResultData;
  7. import com.iformall.domain.po.WxCUserBasicInfo;
  8. import com.iformall.domain.vo.WxCLiveLoginVo;
  9. import com.iformall.service.*;
  10. import com.iformall.utils.Constant;
  11. import com.iformall.utils.PasswordHelper;
  12. import com.iformall.utils.RedisCacheUtils;
  13. import io.swagger.annotations.Api;
  14. import io.swagger.annotations.ApiOperation;
  15. import org.apache.commons.io.IOUtils;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.slf4j.Logger;
  18. import org.slf4j.LoggerFactory;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Qualifier;
  21. import org.springframework.data.redis.core.RedisTemplate;
  22. import org.springframework.web.bind.annotation.*;
  23. import springfox.documentation.spring.web.json.Json;
  24. import javax.imageio.ImageIO;
  25. import javax.servlet.ServletOutputStream;
  26. import javax.servlet.http.HttpServletResponse;
  27. import java.awt.image.BufferedImage;
  28. import java.io.IOException;
  29. import java.util.*;
  30. @RestController
  31. @RequestMapping("/api/live")
  32. @Api(description = "直播相关接口")
  33. public class UserLiveController extends BaseController {
  34. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  35. @Autowired
  36. private Producer producer;
  37. @Autowired
  38. @Qualifier("objectCommonRedisTemplate")
  39. RedisTemplate<String, Object> redisTemplate;
  40. @Autowired
  41. private WxCUserBasicInfoService wxCUserBasicInfoService;
  42. @Autowired
  43. private WxCLiveUserBasicInfoService wxCLiveUserBasicInfoService;
  44. @Autowired
  45. private WxCVideoService wxCVideoService;
  46. @Autowired
  47. private WxCVoiceService wxCVoiceService;
  48. @Autowired
  49. private WxCUserAuthorityService wxCUserAuthorityService;
  50. @AuthIgnore
  51. @ApiOperation("验证码")
  52. @GetMapping("/captcha.jpg")
  53. public void captcha(HttpServletResponse response) {
  54. logger.debug("[" + getIpAddr() + "] WxUserGrantController::captcha");
  55. response.setHeader("Cache-Control", "no-store, no-cache");
  56. response.setContentType("image/jpeg");
  57. //生成文字验证码
  58. String text = producer.createText();
  59. //生成图片验证码
  60. BufferedImage image = producer.createImage(text);
  61. //保存到redis
  62. String ipAddr = getIpAddr();
  63. String key = Constant.captchaPrev + ":" + ipAddr;
  64. RedisCacheUtils.cache(redisTemplate, key, text, 60);
  65. ServletOutputStream out = null;
  66. try {
  67. out = response.getOutputStream();
  68. ImageIO.write(image, "jpg", out);
  69. } catch (IOException e) {
  70. e.printStackTrace();
  71. } finally {
  72. IOUtils.closeQuietly(out);
  73. }
  74. }
  75. @AuthIgnore
  76. @PostMapping("/login")
  77. @ApiOperation(value = "用户登录", notes = "{\"username\":\"string\",\"password\":\"string\",\"code\":\"string\",\"Mcode\":\"string\",\"status\":\"int\"}")
  78. public Map<String,Object> login(@RequestBody Map<String, String> map, HttpServletResponse response) {
  79. Map<String,Object> wxCLiveLoginVos = new HashMap<>();
  80. String ipAddr = getIpAddr();
  81. logger.debug("[" + ipAddr + "] WxUserGrantController::login");
  82. String code = map.get("code");
  83. if (StringUtils.isBlank(code)) {
  84. HashMap<Object, Object> status = new HashMap<>();
  85. status.put("code",ErrorCode.SYS_PARAMETER_NOT_NULL.getCode());
  86. status.put("message","请输入验证码");
  87. wxCLiveLoginVos.put("status",status);
  88. return wxCLiveLoginVos;
  89. // new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "请输入验证码");
  90. }
  91. String key = Constant.captchaPrev + ":" + ipAddr;
  92. String code1 = RedisCacheUtils.getCacheString(redisTemplate, key);
  93. // if (StringUtils.isBlank(code1)) {
  94. // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码已过期");
  95. // }
  96. // if (!code1.equals(code)) {
  97. // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确");
  98. // }
  99. String phone = map.get("username");
  100. String password = map.get("password");
  101. if (StringUtils.isBlank(phone) || StringUtils.isBlank(password)) {
  102. HashMap<Object, Object> status = new HashMap<>();
  103. status.put("code",ErrorCode.SYS_PARAMETER_ERROR.getCode());
  104. status.put("message","手机号或密码为空");
  105. wxCLiveLoginVos.put("status",status);
  106. return wxCLiveLoginVos;
  107. // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "手机号或密码为空");
  108. }
  109. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone);
  110. if (basicInfo == null) {
  111. HashMap<Object, Object> status = new HashMap<>();
  112. status.put("code",ErrorCode.USER_IS_EMPTY);
  113. status.put("message","用户不存在");
  114. wxCLiveLoginVos.put("status",status);
  115. return wxCLiveLoginVos;
  116. // return new ResultData(ErrorCode.USER_IS_EMPTY);
  117. }
  118. String encryptPassword = new PasswordHelper().encryptPassword(password);
  119. if (!encryptPassword.equals(basicInfo.getPassword())) {
  120. HashMap<Object, Object> status = new HashMap<>();
  121. status.put("code",ErrorCode.USER_PASSWD_ERR.getCode());
  122. status.put("message","手机号或密码错误");
  123. wxCLiveLoginVos.put("status",status);
  124. return wxCLiveLoginVos;
  125. // return new ResultData(ErrorCode.USER_PASSWD_ERR.getCode(), "手机号或密码错误");
  126. }
  127. int statu = Integer.parseInt(map.get("status"));
  128. if (statu == 0) {
  129. WxCUserBasicInfo basicLiveInfo = wxCLiveUserBasicInfoService.getById(basicInfo.getId());
  130. if (basicLiveInfo.getCode() != null && !map.get("Mcode").equals(basicLiveInfo.getCode())) {
  131. HashMap<Object, Object> status = new HashMap<>();
  132. status.put("code",ErrorCode.USER_ALREADY_LOGIN.getCode());
  133. status.put("message","用户已在其他设备登录");
  134. wxCLiveLoginVos.put("status",status);
  135. return wxCLiveLoginVos;
  136. // return new ResultData(ErrorCode.USER_ALREADY_LOGIN.getCode(), "用户已在其他设备登录");
  137. }
  138. if (basicLiveInfo.getCode() == null) {
  139. wxCLiveUserBasicInfoService.updateCode(basicInfo.getId(), map.get("Mcode"));
  140. }
  141. }
  142. if (statu == -1) {
  143. wxCLiveUserBasicInfoService.updateCode(basicInfo.getId(), null);
  144. basicInfo.setStatus(-2);
  145. HashMap<Object, Object> status = new HashMap<>();
  146. status.put("code",ErrorCode.USER_CANCEL_MCODE.getCode());
  147. status.put("message","设备已注销");
  148. wxCLiveLoginVos.put("status",status);
  149. return wxCLiveLoginVos;
  150. // return new ResultData(ErrorCode.USER_CANCEL_MCODE.getCode(), "设备已注销");
  151. }
  152. wxCUserBasicInfoService.handleLoginUser(basicInfo);
  153. WxCUserBasicInfo basicLiveInfo = wxCLiveUserBasicInfoService.getById(basicInfo.getId());
  154. WxCLiveLoginVo wxCLiveLoginVo = new WxCLiveLoginVo();
  155. wxCLiveLoginVo.setCode(Integer.parseInt(map.get("Mcode")));
  156. //wxCLiveLoginVo.setVersion(basicLiveInfo.getVersion());
  157. wxCLiveLoginVo.setUsername(map.get("username"));
  158. //wxCLiveLoginVo.setStatus(0);
  159. //wxCLiveLoginVo.setCurrent_time(new Date(System.currentTimeMillis() / 1000));
  160. // wxCLiveLoginVo.setExpire_time(basicLiveInfo.getExpireTime().getTime() / 1000);
  161. //生成一个token
  162. String token = UUID.randomUUID().toString().replace("-","");
  163. //将token和用户信息绑定放到redis redis--key:user:info:token value:用户信息
  164. redisTemplate.opsForValue().set("user:login"+token,JSON.toJSONString(wxCLiveLoginVo));
  165. //返回给前端
  166. wxCLiveLoginVo.setToken(token);
  167. Map<String, Object> info = new HashMap();
  168. Map<String, Object> data = new HashMap();
  169. Map<Object, Object> status = new HashMap<>();
  170. status.put("code",1000);
  171. status.put("message","success");
  172. data.put("status",0);
  173. data.put("version",basicLiveInfo.getVersion());
  174. data.put("current_time",new Date(System.currentTimeMillis() / 1000));
  175. data.put("expire_time",basicLiveInfo.getExpireTime().getTime() / 1000);
  176. info.put("log_id", basicInfo.getId());
  177. info.put("server_type","user login");
  178. info.put("username", basicInfo.getPhone());
  179. wxCLiveLoginVos.put("data",data);
  180. wxCLiveLoginVos.put("info",info);
  181. wxCLiveLoginVo.setData(data);
  182. wxCLiveLoginVo.setInfo(info);
  183. wxCLiveLoginVos.put("status",status);
  184. wxCLiveLoginVos.put("token",token);
  185. System.out.println("wxCLiveLoginVo.getToken() = " + wxCLiveLoginVo.getToken());
  186. return wxCLiveLoginVos;
  187. // return new ResultData(1000,"success",wxCLiveLoginVo);
  188. }
  189. /**
  190. * 视频模板列表
  191. */
  192. @AuthIgnore
  193. @PostMapping("/avatarList")
  194. @ApiOperation(value = "视频模板列表", notes = "{\"username\",\"string\",\"code\",\"string\"}")
  195. public Map<String,Object> avatarList(@RequestBody Map<String, String> params) {
  196. Map<String,Object> avatarVos = new HashMap<>();
  197. String ipaddress = getIpAddr();
  198. logger.debug("[" + ipaddress + "] WxUserGrantController::getAvatarList");
  199. String phone = params.get("username");
  200. WxCUserBasicInfo infoByPhone = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone);
  201. Long id = infoByPhone.getId();
  202. System.out.println("id = " + id);
  203. Map<Object, Object> status = new HashMap<>();
  204. status.put("code",1000);
  205. status.put("msg","success");
  206. // long id = getMemberId();
  207. // System.out.println("id = " + id);
  208. // WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.getById(infoByPhone.getId());
  209. avatarVos.put("status",status);
  210. return wxCVideoService.getById(infoByPhone.getId());
  211. // return new ResultData(1000,"success",wxCVideoService.getById(infoByPhone.getId()));
  212. }
  213. /**
  214. * 音频模板列表
  215. */
  216. @AuthIgnore
  217. @PostMapping("/audioList")
  218. @ApiOperation(value = "音频模板列表", notes = "{\"username\",\"string\",\"code\",\"string\"}")
  219. public Map<String,Object> audioList(@RequestBody Map<String, String> params) {
  220. String ipaddress = getIpAddr();
  221. logger.debug("[" + ipaddress + "] WxUserGrantController::getAudioList");
  222. String phone = params.get("username");
  223. WxCUserBasicInfo infoByPhone = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone);
  224. Long id = infoByPhone.getId();
  225. System.out.println("id = " + id);
  226. // long id = getMemberId();
  227. return wxCVoiceService.getById(id);
  228. }
  229. /**
  230. * 资源权限查询
  231. */
  232. @AuthIgnore
  233. @ApiOperation(value = "资源权限查询", notes = "{\"username\",\"string\",\"code\",\"string\",\"type\",\"int\",\"resource_id\",\"long\"}")
  234. @PostMapping("/author")
  235. public Map<String,Object> getAuthor(@RequestBody Map<String, String> params) {
  236. String ipaddress = getIpAddr();
  237. logger.debug("[" + ipaddress + "] WxUserGrantController::getAuthor");
  238. String phone = params.get("username");
  239. WxCUserBasicInfo infoByPhone = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone);
  240. Long id = infoByPhone.getId();
  241. System.out.println("id = " + id);
  242. //long id = getMemberId();
  243. String username = params.get("username");
  244. String code = params.get("code");
  245. Integer type = Integer.parseInt(params.get("type"));
  246. Long resourceId = Long.valueOf(params.get("resource_id"));
  247. return wxCUserAuthorityService.getAuthor(id, code, type, resourceId);
  248. }
  249. }