需求场景:用电插座电流连续出现5次电流过高(大于 3A)后停止用电服务,前四次发送电流过高提醒,最后一次发送结束用电服务提醒

思路:

Redis  key 设为:插座编号+user户编号  value: 出现大于3A的次数 ;

心跳每分钟,心跳包数据含有 。判断电流:电流值 <3 清空对应key的次数  电流>=3  次数不为零小于5  次数加一 发送过高提醒,次数为5时发送结束服务提醒,清空对应key的次数;

先申请模板消息,获取模板ID(一搜一大把,此处不赘述了)

上代码:(Ci框架)

心跳包中拿到电流值 $i

if($i > 3){
checkMeterCurrentUp($meter_id); }else{
//清空redis电流超限记录
deleteAbnormalCurrentCache($meter_id);
}

function checkMeterCurrentUp($meter_id)
             //加载redis 
        $up_count  = $this->redisclient->get('down_'.$user_id.$meter_id);
        if($up_count < 5){//设备号 value加一  发送模板消息
$this->redisclient->save($user_id.$meter_id,$up_count+1,600);//给用户消息通知
            //获取access_token
 lm('config_model');
$access_token = $this->config_model->r(pw('datakey',CONFIG_KEY_GZHH_ACCESS_TOKEN,'platform_id',$order['platform_id']));
$access_token = element('datavalue',$access_token); if($access_token) {
$url = sprintf("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s", $access_token); lm('users_model');
$user = $this->users_model->r(pw('id',$user_id)); lm('meters_model');
$meter = $this->meters_model->r(pw('id_open',$meter_id));
                 //获取微信模板消息ID
lm('platform_config_model');
$platform_config = $this->platform_config_model->r(pw('platform_id',$order['platform_id']));
$template_id = $platform_config['wx_event_template_id'];
$postdata = json_encode(array(
'touser' => element('openid',$user),
'template_id' => $template_id,
'url' => site_url('detail?id='.$meter_id),
'data' => array(
"keyword1" => array (
"value" => $meter_id,
"color" => "#173177"
),
"keyword2" => array ( //地址
"value" => element('name',$meter),
"color" => "#173177"
),
"keyword3" => array (
"value" => date('Y-m-d H:i:s'),
"color" => "#173177"
),
"first" => array (
"value" => '您的设备充电功率超限,连续五次超限后将停止充电服务',
"color" => "#173177"
),
"remark" => array (
"value" => '请及时查看',
"color" => "#173177"
),
)
));
                 //发送 发送模板消息请求
$resp = http_post($url,$postdata);
} }else{
//结束订单
//发送模板消息
$this->redisclient->delete($user_id.$meter_id);
//给用户消息通知
lm('config_model');
$access_token = $this->config_model->r(pw('datakey',CONFIG_KEY_GZHH_ACCESS_TOKEN,'platform_id',$order['platform_id']));
$access_token = element('datavalue',$access_token); if($access_token) {
$url = sprintf("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s", $access_token); lm('users_model');
$user = $this->users_model->r(pw('id',$user_id)); lm('meters_model');
$meter = $this->meters_model->r(pw('id_open',$meter_id));
                 
lm('platform_config_model');
$platform_config = $this->platform_config_model->r(pw('platform_id',$order['platform_id']));
$template_id = $platform_config['wx_event_template_id'];
$postdata = json_encode(array(
'touser' => element('openid',$user),
'template_id' => $template_id,
'url' => site_url('detail?id='.$meter_id),
'data' => array(
"keyword1" => array (
"value" => $meter_id,
"color" => "#173177"
),
"keyword2" => array ( //地址
"value" => element('name',$meter),
"color" => "#173177"
),
"keyword3" => array (
"value" => date('Y-m-d H:i:s'),
"color" => "#173177"
),
"first" => array (
"value" => '您的设备充电功率连续五次超限,已停止充电服务',
"color" => "#173177"
),
"remark" => array (
"value" => '请知悉',
"color" => "#173177"
),
)
));
$resp = http_post($url,$postdata);
}
//停止订单             //关闭设备
}
function deleteAbnormalCurrentCache($meter_id){
$user_id = 99;
//加载Redis
    if($this->redisclient->is_supported() === TRUE){
$this->redisclient->delete($user_id.$meter_id);
$this->redisclient->delete('down_'.$user_id.$meter_id);
}
}

5分钟连续出现某现象+微信模板消息提醒 PHP的更多相关文章

  1. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  2. C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是"模板消息"的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信 ...

  3. 前后端分离djangorestframework—— 接入微信模板消息推送

    微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...

  4. java开发微信模板消息推送

    发布时间:2018-12-12   技术:springboot+maven   概述 该demo主要涉及微信模板消息推送功能, 详细 代码下载:http://www.demodashi.com/dem ...

  5. PHP实现微信模板消息发送给指定用户

    使用公众号的模板消息功能,必须是认证过的服务号,需要发送微信号的openid,同一微信号在不同公众号下的openid是不同的,在公众号下是唯一的,获取不到微信号 进入公众平台  功能->模板消息 ...

  6. PHP微信模板消息发送

    <?php class Wxtemplate extends Base { function __construct() { $this->appid = config('WXAPP_AP ...

  7. qhfl-9 微信模板消息推送

    开发中用的是测试号 微信公众号认证流程 用户登陆 <!DOCTYPE html> <html lang="en"> <head> <met ...

  8. 应用jfinal发送微信模板消息的一个bug

    严格来讲,这不是一个bug,只是我们应用的方式不对.微信发送模板消息的方法是: HttpUtils.post(sendApiUrl + AccessTokenApi.getAccessTokenStr ...

  9. 微信模板消息php

    微信的模板消息需要认证的公众号后台申请 申请通过后就可以用平台定义的消息模板了 define('IN_ECS', true); require(dirname(__FILE__) . '/includ ...

随机推荐

  1. HTML的条件注释及hack技术

    在很多时候,前端的兼容性问题,都很让人头痛!幸运的是,微软从去年声明:从2016年1月12日起,微软将停止为IE8(包括IE8)提供技术支持和安全更新.整个前端圈子都沸腾起来,和今年七月份Adobe宣 ...

  2. [七月挑选]windows上面的发音

    title: windows上面的发音 开始 love.vbs: CreateObject("SAPI.SpVoice").Speak "I love YOU" ...

  3. MFC学习笔记3---使对话框风格与系统统一

    有一件郁闷了我很久的事情,在VS中编辑对话框或者点击预览时都是以Win7风格体现的按钮及对话框: 点击上图测试对话框: 然而生成的应用程序却是这样的: 这样人很不爽啊,按钮风格回到了N年前的版本,复古 ...

  4. 计蒜客 蓝桥模拟 I. 天上的星星

    计算二维前缀和,节省时间.容斥定理. 代码: #include <cstdio> #include <cstdlib> #include <cstring> #in ...

  5. [效率神技]Intellij 的快捷键和效率技巧|系列一|常用快捷键

    Intellij 是个功能强大的IDE,这里只讲window下社区版的Intellij. 1. 常用快捷: Alt+回车 导入包,自动修正Ctrl+N   查找类Ctrl+Shift+N 查找文件Ct ...

  6. Vue获取dom元素

     <li  @click='获取li标签'    :ref="center-li" id="center-li"      > =====我是li标 ...

  7. php-fpm参数优化

    php-fpm参数优化 2013-11-18 Posted by yeho php-fpm进程设置多少合适,设成动态还是静态? <lnmp一键安装包>中会根据你服务器内存调整php-fpm ...

  8. man da'te

    DATE(1)                 用户命令                      DATE(1) 名称  日期-打印或设置系统日期和时间  简介   date [OPTION]... ...

  9. mybatis学习$与#号取值区别

    1,多个参数传递用map或实体封装后再传给myBatis, mybatis学习$与#号取值区别 #{} 1.加了单引号,  2.#号写是可以防止sql注入,比较安全 select * from use ...

  10. Thread的几种方法的使用

    1:setPriority() 设置线程的优先级,从1 到10.   5是默认的.  1是最低优先级. 10是最高优先级 public class MyThread01 implements Runn ...