package com.matrix.system.wechart.templateMsg.Task; 
 | 
  
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.matrix.biz.bean.BizUser; 
 | 
import com.matrix.biz.service.BizUserService; 
 | 
import com.matrix.component.tools.HttpClientUtil; 
 | 
import com.matrix.core.pojo.AjaxResult; 
 | 
import com.matrix.core.tools.LogUtil; 
 | 
import com.matrix.core.tools.rr.GlueFactory; 
 | 
import com.matrix.system.common.bean.BusParameterSettings; 
 | 
import com.matrix.system.common.constance.AppConstance; 
 | 
import com.matrix.system.common.dao.BusParameterSettingsDao; 
 | 
import com.matrix.system.constance.Dictionary; 
 | 
import com.matrix.system.hive.bean.SysProjServices; 
 | 
import com.matrix.system.hive.bean.SysVipInfo; 
 | 
import com.matrix.system.hive.dao.SysProjServicesDao; 
 | 
import com.matrix.system.hive.dao.SysShopInfoDao; 
 | 
import com.matrix.system.hive.dao.SysVipInfoDao; 
 | 
import com.matrix.system.shopXcx.api.WeChatGzhApiTools; 
 | 
import com.matrix.system.shopXcx.bean.ShopWxtemplateMsg; 
 | 
import com.matrix.system.shopXcx.dao.ShopWxtemplateMsgDao; 
 | 
import com.matrix.system.wechart.templateMsg.GzhTemplateMessagePojo; 
 | 
import com.matrix.system.wechart.templateMsg.TemplateNameConstance; 
 | 
import com.matrix.system.wechart.templateMsg.UniformMsgPojo; 
 | 
import com.rabbitmq.client.DeliverCallback; 
 | 
import com.rabbitmq.client.Delivery; 
 | 
import org.apache.commons.collections.map.HashedMap; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Component; 
 | 
  
 | 
import java.io.IOException; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
/** 
 | 
 * 小程序统一消息模板消息发送提醒 
 | 
 * @author jyy 
 | 
 */ 
 | 
@Component 
 | 
public class UniformMsgSentTask implements DeliverCallback { 
 | 
  
 | 
    @Autowired 
 | 
    private ShopWxtemplateMsgDao shopWxtemplateMsgDao; 
 | 
  
 | 
    @Autowired 
 | 
    private BusParameterSettingsDao busParameterSettingsDao; 
 | 
  
 | 
    /** 
 | 
     * 发送模板消息需要传JSONO字符串作为格式 
 | 
     * 例如:{"companyId":17} 
 | 
     * companyId 是必须属性 
 | 
     * @param consumerTag 
 | 
     * @param message 
 | 
     * @throws IOException 
 | 
     */ 
 | 
    @Override 
 | 
    public void handle(String consumerTag, Delivery message) throws IOException { 
 | 
        try { 
 | 
  
 | 
  
 | 
            String messages = new String(message.getBody(), "UTF-8"); 
 | 
            JSONObject messageJsonParam=JSONObject.parseObject(messages); 
 | 
  
 | 
            if(!messageJsonParam.containsKey("companyId")){ 
 | 
                LogUtil.error("小程序消息推送参数格式异常发送模板消息需要传JSONO字符串作为格式 例如:{\"companyId\":17} companyId 是必须属性"); 
 | 
                return; 
 | 
            } 
 | 
  
 | 
            Long companyId = Long.parseLong( messageJsonParam.get("companyId").toString()); 
 | 
  
 | 
            //获取公司微信配置参数 
 | 
            BusParameterSettings xcxAppId = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.MINIPROGRAM_APPID, companyId); 
 | 
            BusParameterSettings xcxSecret = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.MINIPROGRAM_SECRET, companyId); 
 | 
            BusParameterSettings gzhAppid = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.GZH_APPID, companyId); 
 | 
            //获取消息模板 
 | 
            ShopWxtemplateMsg template = shopWxtemplateMsgDao.selectByCode(TemplateNameConstance.GZH_YYTX,companyId); 
 | 
            //校验参数 
 | 
            if(xcxAppId==null||xcxSecret==null||gzhAppid==null||template==null){ 
 | 
                LogUtil.error("小程序消息推送配置缺失xcxAppId="+xcxAppId+";xcxSecret="+xcxSecret+";gzhAppid="+gzhAppid+";template="+template); 
 | 
                return; 
 | 
            } 
 | 
  
 | 
            //获取模板动态构建类 
 | 
            TemplateMessageBulder templateMessageBulder = (TemplateMessageBulder) GlueFactory.getInstance().loadInstance(template.getTemplateClass()); 
 | 
            //为模板动态类装备必要的参数 
 | 
            Map<String, Object> bulderParam = new HashedMap(); 
 | 
            bulderParam.put("gzhAppid", gzhAppid.getParamValue()); 
 | 
            bulderParam.put("template_id", template.getUuid()); 
 | 
            bulderParam.put("messageJsonParam", messageJsonParam); 
 | 
  
 | 
  
 | 
            //调用模板计算出消息体 
 | 
            Map msgResult = templateMessageBulder.buildMsg(bulderParam); 
 | 
  
 | 
            if(msgResult.containsKey("error")){ 
 | 
                //错误消息处理 
 | 
                LogUtil.error("模板消息发送失败:"+msgResult.get("error")); 
 | 
                return; 
 | 
            }else{ 
 | 
                //正常返回消息 
 | 
                List msgList = (List) msgResult.get("msgList"); 
 | 
                //获取acceToken 
 | 
                String ACCESS_TOKEN = WeChatGzhApiTools.getAccessToken(xcxAppId.getParamValue(), xcxSecret.getParamValue()); 
 | 
                String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN".replaceAll("ACCESS_TOKEN", ACCESS_TOKEN); 
 | 
                for (Object msg : msgList) { 
 | 
                    UniformMsgPojo uniformMsgPojo = (UniformMsgPojo) msg; 
 | 
                    //推送消息到微信 
 | 
                    JSONObject result = HttpClientUtil.sendPostWithJson(url, JSONObject.toJSON(uniformMsgPojo).toString()); 
 | 
                    //微信返回值 
 | 
                    LogUtil.debug("微信小程序模板消息推送结果:" + result.toString()); 
 | 
                } 
 | 
            } 
 | 
  
 | 
        } catch (Exception e) { 
 | 
            LogUtil.error("消费者执行异常", e); 
 | 
        } 
 | 
  
 | 
    } 
 | 
} 
 |