|
|
@@ -0,0 +1,170 @@
|
|
|
+package com.java110.api.listener.smallWeChat;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.java110.api.bmo.smallWeChat.IWechatMenuBMO;
|
|
|
+import com.java110.api.listener.AbstractServiceApiPlusListener;
|
|
|
+import com.java110.core.annotation.Java110Listener;
|
|
|
+import com.java110.core.context.DataFlowContext;
|
|
|
+import com.java110.core.event.service.api.ServiceDataFlowEvent;
|
|
|
+import com.java110.core.factory.WechatFactory;
|
|
|
+import com.java110.core.smo.store.ISmallWeChatInnerServiceSMO;
|
|
|
+import com.java110.core.smo.wechatMenu.IWechatMenuInnerServiceSMO;
|
|
|
+import com.java110.dto.smallWeChat.SmallWeChatDto;
|
|
|
+import com.java110.dto.wechatMenu.WechatMenuDto;
|
|
|
+import com.java110.utils.constant.ServiceCodeWechatMenuConstant;
|
|
|
+import com.java110.utils.constant.WechatConstant;
|
|
|
+import com.java110.utils.util.Assert;
|
|
|
+import com.java110.utils.util.BeanConvertUtil;
|
|
|
+import com.java110.vo.ResultVo;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.http.HttpMethod;
|
|
|
+import org.springframework.http.ResponseEntity;
|
|
|
+import org.springframework.web.client.RestTemplate;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 保存商户侦听
|
|
|
+ * add by wuxw 2019-06-30
|
|
|
+ */
|
|
|
+@Java110Listener("publishWechatMenuListener")
|
|
|
+public class PublishWechatMenuListener extends AbstractServiceApiPlusListener {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IWechatMenuBMO wechatMenuBMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RestTemplate restTemplateNoLoadBalanced;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IWechatMenuInnerServiceSMO wechatMenuInnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISmallWeChatInnerServiceSMO smallWeChatInnerServiceSMOImpl;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void validate(ServiceDataFlowEvent event, JSONObject reqJson) {
|
|
|
+ //Assert.hasKeyAndValue(reqJson, "xxx", "xxx");
|
|
|
+ Assert.hasKeyAndValue(reqJson, "communityId", "请求报文中未包含communityId");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * {
|
|
|
+ * "button":[
|
|
|
+ * {
|
|
|
+ * "type":"click",
|
|
|
+ * "name":"今日歌曲",
|
|
|
+ * "key":"V1001_TODAY_MUSIC"
|
|
|
+ * },
|
|
|
+ * {
|
|
|
+ * "name":"菜单",
|
|
|
+ * "sub_button":[
|
|
|
+ * {
|
|
|
+ * "type":"view",
|
|
|
+ * "name":"搜索",
|
|
|
+ * "url":"http://www.soso.com/"
|
|
|
+ * },
|
|
|
+ * {
|
|
|
+ * "type":"miniprogram",
|
|
|
+ * "name":"wxa",
|
|
|
+ * "url":"http://mp.weixin.qq.com",
|
|
|
+ * "appid":"wx286b93c14bbf93aa",
|
|
|
+ * "pagepath":"pages/lunar/index"
|
|
|
+ * },
|
|
|
+ * {
|
|
|
+ * "type":"click",
|
|
|
+ * "name":"赞一下我们",
|
|
|
+ * "key":"V1001_GOOD"
|
|
|
+ * }]
|
|
|
+ * }]
|
|
|
+ * }
|
|
|
+ *
|
|
|
+ * @param event 事件对象
|
|
|
+ * @param context 数据上文对象
|
|
|
+ * @param reqJson 请求报文
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ protected void doSoService(ServiceDataFlowEvent event, DataFlowContext context, JSONObject reqJson) {
|
|
|
+ //查询一级菜单
|
|
|
+ WechatMenuDto wechatMenuDto = BeanConvertUtil.covertBean(reqJson, WechatMenuDto.class);
|
|
|
+ wechatMenuDto.setMenuLevel(WechatMenuDto.MENU_LEVEL_ONE);
|
|
|
+ List<WechatMenuDto> wechatMenuDtos = wechatMenuInnerServiceSMOImpl.queryWechatMenus(wechatMenuDto);
|
|
|
+
|
|
|
+ if (wechatMenuDtos == null || wechatMenuDtos.size() < 1 || wechatMenuDtos.size() > 3) {
|
|
|
+ throw new IllegalArgumentException("一级菜单数量为" + wechatMenuDtos.size() + "不符合公众号菜单数量要求");
|
|
|
+ }
|
|
|
+ JSONObject wechatMenuObj = new JSONObject();
|
|
|
+ JSONArray button = new JSONArray();
|
|
|
+ for (WechatMenuDto tmpWechatMenuDto : wechatMenuDtos) {
|
|
|
+ wechatMenuDto = new WechatMenuDto();
|
|
|
+ wechatMenuDto.setMenuLevel(WechatMenuDto.MENU_LEVEL_TWO);
|
|
|
+ wechatMenuDto.setCommunityId(tmpWechatMenuDto.getCommunityId());
|
|
|
+ wechatMenuDto.setParentMenuId(tmpWechatMenuDto.getWechatMenuId());
|
|
|
+ List<WechatMenuDto> tmpWechatMenuDtos = wechatMenuInnerServiceSMOImpl.queryWechatMenus(wechatMenuDto);
|
|
|
+ JSONObject menuButton = new JSONObject();
|
|
|
+ menuButton.put("name", tmpWechatMenuDto.getMenuName());
|
|
|
+ if (tmpWechatMenuDtos != null && tmpWechatMenuDtos.size() > 1) {
|
|
|
+ addSubMenu(menuButton, tmpWechatMenuDtos);
|
|
|
+ button.add(menuButton);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ menuButton.put("type", tmpWechatMenuDto.getMenuType());
|
|
|
+ if (WechatMenuDto.MENU_TYPE_VIEW.equals(tmpWechatMenuDto.getMenuType())) {
|
|
|
+ menuButton.put("url", tmpWechatMenuDto.getMenuValue());
|
|
|
+ } else if (WechatMenuDto.MENU_TYPE_MINIPROGRAM.equals(tmpWechatMenuDto.getMenuType())) {
|
|
|
+ menuButton.put("url", tmpWechatMenuDto.getMenuValue());
|
|
|
+ menuButton.put("appid", tmpWechatMenuDto.getAppId());
|
|
|
+ menuButton.put("pagepath", tmpWechatMenuDto.getPagepath());
|
|
|
+ }
|
|
|
+ button.add(menuButton);
|
|
|
+ }
|
|
|
+ wechatMenuObj.put("button", button);
|
|
|
+ SmallWeChatDto smallWeChatDto = new SmallWeChatDto();
|
|
|
+ smallWeChatDto.setObjType(SmallWeChatDto.OBJ_TYPE_COMMUNITY);
|
|
|
+ smallWeChatDto.setObjId(reqJson.getString("communityId"));
|
|
|
+ List<SmallWeChatDto> smallWeChatDtos = smallWeChatInnerServiceSMOImpl.querySmallWeChats(smallWeChatDto);
|
|
|
+
|
|
|
+ if (smallWeChatDtos == null || smallWeChatDtos.size() < 1) {
|
|
|
+ throw new IllegalArgumentException("当前小区未配置公众号 请先配置");
|
|
|
+ }
|
|
|
+ String token = WechatFactory.getAccessToken(smallWeChatDtos.get(0).getAppId(), smallWeChatDtos.get(0).getAppSecret());
|
|
|
+ String url = WechatConstant.CREATE_MENU.replace("ACCESS_TOKEN", token);
|
|
|
+ ResponseEntity<String> responseEntity = restTemplateNoLoadBalanced.postForEntity(url, wechatMenuObj.toJSONString(), String.class);
|
|
|
+
|
|
|
+ JSONObject wechatOutObj = JSONObject.parseObject(responseEntity.getBody());
|
|
|
+ context.setResponseEntity(ResultVo.createResponseEntity(wechatOutObj.getInteger("errcode"), wechatOutObj.getString("errmsg")));
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addSubMenu(JSONObject wechatMenuObj, List<WechatMenuDto> wechatMenuDtos) {
|
|
|
+ JSONArray subButtons = new JSONArray();
|
|
|
+ JSONObject subButton = null;
|
|
|
+ for (WechatMenuDto wechatMenuDto : wechatMenuDtos) {
|
|
|
+ subButton = new JSONObject();
|
|
|
+ subButton.put("name", wechatMenuDto.getMenuName());
|
|
|
+ subButton.put("type", wechatMenuDto.getMenuType());
|
|
|
+ if (WechatMenuDto.MENU_TYPE_VIEW.equals(wechatMenuDto.getMenuType())) {
|
|
|
+ subButton.put("url", wechatMenuDto.getMenuValue());
|
|
|
+ } else if (WechatMenuDto.MENU_TYPE_MINIPROGRAM.equals(wechatMenuDto.getMenuType())) {
|
|
|
+ subButton.put("url", wechatMenuDto.getMenuValue());
|
|
|
+ subButton.put("appid", wechatMenuDto.getAppId());
|
|
|
+ subButton.put("pagepath", wechatMenuDto.getPagepath());
|
|
|
+ }
|
|
|
+ subButtons.add(subButton);
|
|
|
+ }
|
|
|
+ wechatMenuObj.put("sub_button", subButtons);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getServiceCode() {
|
|
|
+ return ServiceCodeWechatMenuConstant.PUBLIC_WECHATMENU;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpMethod getHttpMethod() {
|
|
|
+ return HttpMethod.POST;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|