package com.iformall.controller; import com.alibaba.fastjson.JSON; 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.vo.WxCLiveLoginVo; import com.iformall.service.*; import com.iformall.utils.Constant; import com.iformall.utils.PasswordHelper; import com.iformall.utils.RedisCacheUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; 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.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.IOException; 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 redisTemplate; @Autowired private WxCUserBasicInfoService wxCUserBasicInfoService; @Autowired private WxCLiveUserBasicInfoService wxCLiveUserBasicInfoService; @Autowired private WxCVideoService wxCVideoService; @Autowired private WxCVoiceService wxCVoiceService; @Autowired private WxCUserAuthorityService wxCUserAuthorityService; @AuthIgnore @ApiOperation("验证码") @GetMapping("/captcha.jpg") public void captcha(HttpServletResponse response) { logger.debug("[" + getIpAddr() + "] WxUserGrantController::captcha"); response.setHeader("Cache-Control", "no-store, no-cache"); response.setContentType("image/jpeg"); //生成文字验证码 String text = producer.createText(); //生成图片验证码 BufferedImage image = producer.createImage(text); //保存到redis String ipAddr = getIpAddr(); String key = Constant.captchaPrev + ":" + ipAddr; RedisCacheUtils.cache(redisTemplate, key, text, 60); ServletOutputStream out = null; try { out = response.getOutputStream(); ImageIO.write(image, "jpg", out); } catch (IOException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(out); } } @AuthIgnore @PostMapping("/login") @ApiOperation(value = "用户登录", notes = "{\"username\":\"string\",\"password\":\"string\",\"code\":\"string\",\"Mcode\":\"string\",\"status\":\"int\"}") public Map login(@RequestBody Map map, HttpServletResponse response) { Map wxCLiveLoginVos = new HashMap<>(); String ipAddr = getIpAddr(); logger.debug("[" + ipAddr + "] WxUserGrantController::login"); String code = map.get("code"); if (StringUtils.isBlank(code)) { HashMap status = new HashMap<>(); status.put("code",ErrorCode.SYS_PARAMETER_NOT_NULL.getCode()); status.put("message","请输入验证码"); wxCLiveLoginVos.put("status",status); return wxCLiveLoginVos; // new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "请输入验证码"); } String key = Constant.captchaPrev + ":" + ipAddr; String code1 = RedisCacheUtils.getCacheString(redisTemplate, key); // if (StringUtils.isBlank(code1)) { // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码已过期"); // } // if (!code1.equals(code)) { // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确"); // } String phone = map.get("username"); String password = map.get("password"); if (StringUtils.isBlank(phone) || StringUtils.isBlank(password)) { HashMap 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 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 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("Mcode").equals(basicLiveInfo.getCode())) { HashMap 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("Mcode")); } } if (statu == -1) { wxCLiveUserBasicInfoService.updateCode(basicInfo.getId(), null); basicInfo.setStatus(-2); HashMap 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("Mcode"))); //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 info = new HashMap(); Map data = new HashMap(); Map 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 avatarList(@RequestBody Map params) { Map 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); Map 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 audioList(@RequestBody Map params) { 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); // long id = getMemberId(); return wxCVoiceService.getById(id); } /** * 资源权限查询 */ @AuthIgnore @ApiOperation(value = "资源权限查询", notes = "{\"username\",\"string\",\"code\",\"string\",\"type\",\"int\",\"resource_id\",\"long\"}") @PostMapping("/author") public Map getAuthor(@RequestBody Map params) { 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); //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); } }