5分钟连续出现某现象+微信模板消息提醒 PHP
需求场景:用电插座电流连续出现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的更多相关文章
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是"模板消息"的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信 ...
- 前后端分离djangorestframework—— 接入微信模板消息推送
微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...
- java开发微信模板消息推送
发布时间:2018-12-12 技术:springboot+maven 概述 该demo主要涉及微信模板消息推送功能, 详细 代码下载:http://www.demodashi.com/dem ...
- PHP实现微信模板消息发送给指定用户
使用公众号的模板消息功能,必须是认证过的服务号,需要发送微信号的openid,同一微信号在不同公众号下的openid是不同的,在公众号下是唯一的,获取不到微信号 进入公众平台 功能->模板消息 ...
- PHP微信模板消息发送
<?php class Wxtemplate extends Base { function __construct() { $this->appid = config('WXAPP_AP ...
- qhfl-9 微信模板消息推送
开发中用的是测试号 微信公众号认证流程 用户登陆 <!DOCTYPE html> <html lang="en"> <head> <met ...
- 应用jfinal发送微信模板消息的一个bug
严格来讲,这不是一个bug,只是我们应用的方式不对.微信发送模板消息的方法是: HttpUtils.post(sendApiUrl + AccessTokenApi.getAccessTokenStr ...
- 微信模板消息php
微信的模板消息需要认证的公众号后台申请 申请通过后就可以用平台定义的消息模板了 define('IN_ECS', true); require(dirname(__FILE__) . '/includ ...
随机推荐
- shell安装mysql,连接数据库,创建数据库
https://blog.csdn.net/yhflyl/article/details/83061126 https://blog.csdn.net/wyl9527/article/details/ ...
- 网络流最大流dinic
hdu 6214 #include <bits/stdc++.h> #include<cstdio> #include<cstring> #include<q ...
- 为什么我选择用 flutter
1. flutter 生成的是机器代码,他既不是 hybrid 也不是transpiler, 因此有很高的执行效率. 2. declarative ui,这不是什么新的概念,在 react vue ...
- Laravel——缓存使用
1.使用Redis类 use Illuminate\Support\Facades\Redis; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
- 前端之JavaScript:JS之DOM对象一
js之DOM对象一 一.什么是HTML DOM HTML Document Object Model(文档对象模型) HTML DOM 定义了访问和操作HTML文档的标准方法 HTML DOM 把 ...
- Django【第6篇】:Django之ORM单表操作(增删改查)
django之数据库表的单表查询 一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name =& ...
- 【转载】 原生js判断某个元素是否滚动到底部
document.querySelector('.content').addEventListener('scroll',function () { //读取内容区域的真实高度(滚动条高) // co ...
- 深入理解MySql事务
事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段.本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理. MySQL博大精深,文 ...
- A1009
两个多项式的乘积 两个数组,一个放多项式1,一个放结果 注意:arr2[j+exp]+=arr1[j]*coe; 因为有指数相加相同的情况下需要合并系数 #include<cstdio> ...
- jetSonNano darknet ubdefined reference to 'pow',undefined reference to 'sqrtf'....
我在用CMakelist编译工程时,遇到了这个一连串基础数学函数找不到的问题,如下图所示: 我当时在工程中明明引用了 #include "math.h"头函数,这是因为你的工程在预 ...