package com.zzwtec.wechat.biz; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.jfinal.kit.StrKit; import com.zzwtec.wechat.common.constant.UrlConstants; import com.zzwtec.wechat.config.WeChatConfig; import com.zzwtec.wechat.controller.DoorbellController; 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.api.SnsAccessTokenApi; import com.zzwtec.wechat.sdk.inlet.MsgController; import com.zzwtec.wechat.sdk.msg.out.OutNewsMsg; import com.zzwtec.wechat.util.CharUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 微信自定义菜单的key * * @author 邓燎燕 * 2016年5月5日 */ public class EventBiz { private static final APIService apiService = ProxyBuilder.build(APIService.class,WeChatConfig.weChatConfig); private static final Logger logger = LoggerFactory.getLogger(EventBiz.class); /** * 开门 */ public static final String KEY_DOOR = "door"; /** * 个人中心 */ public static final String KEY_INFO = "info"; /** * 公告 */ public static final String KEY_MSG = "msg"; /** * 开门 * @param openid 用户openid * @param msgController 消息控制器 */ public static void doorEven(String appid, String openid, MsgController msgController,String tokenId,String[] communityIds) { // 查询用户 APIResponse userResponse = apiService.findUserByAppidAndOpenid(appid, openid,apiService); if (userResponse.isFail()) { logger.info("查询用户返回信息:{}",APIResponse.toJSONObject(userResponse).toJSONString()); msgController.renderOutTextMsg(userTip(userResponse)); return; } JSONObject userData = JSONObject.parseObject(userResponse.getData()); //判断此默认房产是否属于当前物业 String selCell =userData.getString("selCell"); //当前没有选择房产 if(StrKit.isBlank(selCell)){ try { selCell = defaultCell(userData.getString("id"),communityIds); } catch (Exception e) { logger.error("查询房产出现异常!",e); } } // 查询房间对应的楼栋/小区 APIResponse objRelTreeResponse = apiService.findObjRelationTreeByCellId(selCell); if (objRelTreeResponse.isFail()) { logger.info("查询用户房产返回信息:{}",APIResponse.toJSONObject(objRelTreeResponse).toJSONString()); msgController.renderOutTextMsg("暂无对应的房产"); return; } // 查询门 多个门返回门列表 单个门直接开门并发送消息给用户 JSONObject cellBuildCommunity = JSONObject.parseObject(objRelTreeResponse.getData()); String communityId = cellBuildCommunity.getString("communityId"); String buildId = cellBuildCommunity.getString("buildId"); boolean isContains = Arrays.asList(communityIds).contains(communityId); if(isContains){//是否在数据权限范围内 DoorbellController.getDoorList(msgController, msgController.getRequest(), openid, communityId, buildId,tokenId); }else{ msgController.renderOutTextMsg("暂无对应的房产,请到个人中心设置默认房产。"); return; } } /** * 公告 * @param openid * @param msgController */ public static void msgEven(String appId, String openid, MsgController msgController,String[] communityIds) { // 查询用户 APIResponse userResponse = apiService.findUserByAppidAndOpenid(appId, openid,apiService); if (userResponse.isFail()) { logger.info("查询用户返回信息:{}",APIResponse.toJSONObject(userResponse).toJSONString()); msgController.renderOutTextMsg(userTip(userResponse)); return; } JSONObject userData = JSONObject.parseObject(userResponse.getData()); String selCell = userData.getString("selCell"); //当前没有选择房产 if(StrKit.isBlank(selCell)){ try { String userID = userData.getString("id"); selCell = defaultCell(userID,communityIds); } catch (Exception e) { logger.error("查询房产出现异常!",e); msgController.renderOutTextMsg("暂无对应的房产"); return; } } // 查询房间对应的楼栋/小区 APIResponse objRelTreeResponse = apiService.findObjRelationTreeByCellId(selCell); if (objRelTreeResponse.isFail()) { msgController.renderOutTextMsg("暂无对应的房产"); logger.info("公告返回信息:" + APIResponse.toJSONObject(objRelTreeResponse).toJSONString()); return; } // 查询最新12条公告 JSONObject cellBuildCommunity = JSONObject.parseObject(objRelTreeResponse.getData()); String communityId = cellBuildCommunity.getString("communityId"); boolean isContains = Arrays.asList(communityIds).contains(communityId);//小区是否在数据范围内 if(!isContains){//是否在数据权限范围内 msgController.renderOutTextMsg("暂无对应的房产,请到个人中心设置默认房产。"); return; } String buildId = cellBuildCommunity.getString("buildId"); String cellId = cellBuildCommunity.getString("cellId"); APIResponse response = apiService.queryNoticeList(communityId, 1, 12); if (response.isFail()) { msgController.renderOutTextMsg("暂无新公告"); return; } // 没有公告 JSONObject pageObject = JSONObject.parseObject(response.getData()); if (pageObject == null || pageObject.get("data") == null) { msgController.renderOutTextMsg("暂无新公告"); return; } JSONArray noticeArr = JSONArray.parseArray(pageObject.getString("data")); if (noticeArr == null || noticeArr.size() == 0) { msgController.renderOutTextMsg("暂无新公告"); return; } // 如果公告条数超过微信能展示的最多条数,则附加查看更多公告 OutNewsMsg outNewsMsg = new OutNewsMsg(msgController.getInMsg()); int i = 0; int wxArticleCount = WeChatConfig.weChatConfig.getWxArticleCount(); int maxShow = wxArticleCount; if (noticeArr.size() > wxArticleCount) { maxShow = wxArticleCount - 1; } Pattern pattern = Pattern.compile("^\\[(.*)\\]\\((.*)\\)$"); for (int j = 0; j < noticeArr.size(); i++, j++) { if (i < maxShow) { String title = noticeArr.getJSONObject(j).getString("noticeTitle"); String url; Matcher matcher = pattern.matcher(title); if (matcher.find()) { title = matcher.group(1); url = matcher.group(2); } else { url = WeChatConfig.weChatConfig.getHost() + UrlConstants.MSG_GET_MSG + "/" + noticeArr.getJSONObject(j).getString("noticeId"); } String picUrl = null; if (i == 0) { picUrl = WeChatConfig.weChatConfig.getHost() + "/images/msg_list_top.png"; } outNewsMsg.addNews(title, "公告", picUrl, url); } else { break; } } if (maxShow == (wxArticleCount - 1)) { String url = WeChatConfig.weChatConfig.getHost() + UrlConstants.MSG_GET_MSG_LIST + "?openid=" + openid + "&communityId=" + communityId + "&buildId=" + buildId + "&cellId=" + cellId; outNewsMsg.addNews("查看更多公告", "更多公告", null, url); } if (i == 0) { msgController.renderOutTextMsg("暂无新公告"); } else { msgController.render(outNewsMsg); } } private static String bindTip() { String url = CharUtil.encode(WeChatConfig.weChatConfig.getHost() + UrlConstants.INFO_BING); String authorizeURL = SnsAccessTokenApi.getAuthorizeURL(ApiConfigKit.getAppId(), url,ApiConfigKit.getAppId(), false); return "你未绑定账号,请点击“绑定账号”"; } private static String userTip(APIResponse userResponse){ logger.info("查询用户返回信息:{}",APIResponse.toJSONObject(userResponse).toJSONString()); int code = userResponse.getCode(); if(code == 310){ return "查询不到您的用户信息"; }else if (code == 420){ return bindTip(); } return "查询不到您的用户信息!"; } //在数据权限内 任意选择一个房产为默认房产 private static String defaultCell(String userId,String[] communityIds){ String cellId =""; APIResponse userCellResponse = apiService.queryUserAndCellByUserId(userId); if(userCellResponse.isFail()){ return null; } JSONArray userCells = JSONArray.parseArray(userCellResponse.getData()); if(userCells == null || userCells.isEmpty()){ return null; } for(int i=0;i