需求场景:用电插座电流连续出现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. tab栏切换效果运用案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. SVN更新报错:Checksum mismatch for 解决办法

    问题: Checksum mismatch while updating '……'; expected: '3f9fd4dd7d1a0304d8020f73300a3e07', actual: 'cd ...

  3. php内置函数分析之array_fill_keys()

    PHP_FUNCTION(array_fill_keys) { zval *keys, *val, *entry; if (zend_parse_parameters(ZEND_NUM_ARGS(), ...

  4. 自定义指令 限制input 的输入位数

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  5. git push -u origin master和git push <远程主机名> <本地分支名>:<远程分支名>作用

    git push git push命令用于将本地分支的更新,推送到远程主机.它的格式与git pull命令相仿. $ git push <远程主机名> <本地分支名>:< ...

  6. hadoop中yarn

    一.yarn的概述 Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管理器系统,Yarn从hadoop 2引入,最初是为了改善Map ...

  7. python-类对象的遍历操作

    视频教程 https://study.163.com/course/courseLearn.htm?courseId=1005985001#/learn/video?lessonId=10533511 ...

  8. 【leetcode】522. Longest Uncommon Subsequence II

    题目如下: 解题思路:因为given list长度最多是50,我的解法就比较随意了,直接用一个嵌套的循环,判断数组中每个元素是否是其他的subsequence,最后找出不属于任何元素subsequen ...

  9. vue项目中使用echarts map报错Cannot read property 'push' of undefined nanhai.js

    在vue中绘制地图需要加载一个本地china.json文件,我用的是get请求的方法加载的,而不是直接import,因为我怕import请求到的部署到线上的时候会有问题.如下是get请求方法: thi ...

  10. Linux内核设计与实现 总结笔记(第十三章)虚拟文件系统

    一.通用文件系统接口 Linux通过虚拟文件系统,使得用户可以直接使用open().read().write()访问文件系统,这种协作性和泛型存取成为可能. 不管文件系统是什么,也不管文件系统位于何种 ...