package com.zzwtec.wechat.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jfinal.kit.StrKit;
import com.xiaoleilu.hutool.util.StrUtil;
import com.zzwtec.jdbc.entity.ThirdUserWechat;
import com.zzwtec.jdbc.service.ThirdUserWechatService;
import com.zzwtec.wechat.common.constant.UrlConstants;
import com.zzwtec.wechat.common.enums.CallType;
import com.zzwtec.wechat.common.enums.DoorType;
import com.zzwtec.wechat.config.WeChatConfig;
import com.zzwtec.wechat.rpc.APIResponse;
import com.zzwtec.wechat.rpc.api.APIService;
import com.zzwtec.wechat.rpc.inject.ProxyBuilder;
import com.zzwtec.wechat.sdk.api.ApiConfigKit;
import com.zzwtec.wechat.sdk.inlet.MsgController;
import com.zzwtec.wechat.sdk.kit.HttpKit;
import com.zzwtec.wechat.sdk.msg.out.OutNewsMsg;
import com.zzwtec.wechat.service.LoginService;
import com.zzwtec.wechat.util.CharUtil;
import com.zzwtec.wechat.util.CommonUtil;
import com.zzwtec.wechat.util.TimeUtil;
import com.zzwtec.wechat.util.security.MyBase64Util;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import static com.xiaoleilu.hutool.util.StrUtil.isEmpty;
import static com.zzwtec.wechat.config.WeChatConfig.weChatConfig;
import static com.zzwtec.wechat.sdk.api.ApiConfigKit.getAppId;
import static com.zzwtec.wechat.util.CharUtil.PARA_SEPARATE;
/**
* 门铃呼叫信息控制器
* 用户点击门铃呼叫模版消息后有这个控制显示
*
* @author 邓燎燕
* 2016年5月9日
*/
@Controller
@RequestMapping("/doorbell")
public class DoorbellController {
private static ThirdUserWechatService thirdUserWechatService;
@Autowired
private HttpServletRequest request;
private static StringRedisTemplate redisTemplate;
@Autowired
private LoginService loginService;
private static final String CODE_KEY = "wechat-code-";
private static final String DOOR_INFO_KEY = "wechat-door-";
private static final APIService apiService = ProxyBuilder.build(APIService.class, WeChatConfig.weChatConfig);
private static final Logger logger = LoggerFactory.getLogger(DoorbellController.class);
@Autowired
public void setStringRedisTemplate(StringRedisTemplate redisTemplate) {
DoorbellController.redisTemplate = redisTemplate;
}
@Autowired
public void setThirdUserWechatService(ThirdUserWechatService thirdUserWechatService) {
DoorbellController.thirdUserWechatService = thirdUserWechatService;
}
/**
* 进入呼叫页面
* v0 room
* v1 callName
* v2 openid
*/
@RequestMapping("/callroom/{_room}/{_callName}/{openid}")
public String callroom(@PathVariable("_room") String room, @PathVariable("_callName") String callName, @PathVariable("openid") String openid) {
room = StrUtil.isBlank(room) ? null : room.replaceAll("_", "-");
callName = StrUtil.isBlank(callName) ? null : CharUtil.decode(callName).replaceAll("_", "-");
String res = HttpKit.get(weChatConfig.getWsHost() + "/capture-" + room + "/1");
request.setAttribute("room", room);
request.setAttribute("callName", callName);
request.setAttribute("res", res);
if (openid != null) {
APIResponse response = apiService.findUserByAppidAndOpenid(ApiConfigKit.getAppId(), openid,apiService);
if (response.isSuccess()) {
request.setAttribute("userId", JSONObject.parseObject(response.getData()).getString("id"));
}
}
return "/door/view/callroom.html";
}
/**
* 查看呼叫历史
* v0 userId
* v1 page
*/
@RequestMapping("/callhistory/{userId}/{page}")
public String callHistory(@PathVariable("userId") String userId, @PathVariable("page") int page) {
if (StrKit.isBlank(userId)) {
return "/door/view/nocallhistory.html";
}
// 查询呼叫历史
APIResponse response = apiService.getCallLog(userId, page, 20);
if (APIResponse.isFail(response)) {
return "/common/view/failure_tips.html";
}
if (StrKit.isBlank(response.getData())) {
return "/door/view/nocallhistory.html";
}
// 处理呼叫历史
JSONObject pageJson = JSONObject.parseObject(response.getData());
List