后台服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

299 lines
12 KiB

  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. }