REAPI/app/queue/command/monitor/ChannelOrderStatusMonitor.php
mzeros 25439b988e feat(robot): 增加商户余额监控和订单查询功能
- 新增商户余额监控功能,支持异步消息提醒
- 添加订单查询功能,可查询当天和最近一周的订单
- 实现携转检测功能,可查询手机号是否携转及新旧运营商
- 优化机器人自动回复逻辑,支持多种查询命令
2025-01-08 16:05:57 +08:00

118 lines
3.0 KiB
PHP

<?php
namespace app\queue\command\monitor;
use app\channel\service\ChannelService;
use app\gateway\service\RedisService;
use app\merchant\service\OrderService;
use app\robot\controller\WxWorkBot;
use think\admin\Command;
use think\console\Input;
use think\console\Output;
/**
* 渠道订单问题监控预警
* Class ChannelOrderStatusMonitor
* @package app\data\command
*/
class ChannelOrderStatusMonitor extends Command
{
protected $redis = false;
protected function configure()
{
$this->setName('xQueue:ChannelOrderStatusMonitor')->setDescription('[ 监控系统 ] 渠道订单问题监控预警');
}
/**
* @param Input $input
* @param Output $output
* @throws \think\admin\Exception
*/
protected function execute(Input $input, Output $output)
{
ini_set('memory_limit', '1024M');
$this->redis();
$channelService = ChannelService::instance();
$RobotService = new WxWorkBot($this->app);
$channelList = $channelService->db()->where(['status'=>1])->whereLike('other_data','%Monitor_OrderStatus_status%')->select()->toArray();
if(!$channelList) $this->setQueueSuccess("未找到支持监控订单的渠道");
$channelList_num = count($channelList);
$count_sum = 0;
$day = date('Y-m-d', strtotime('-1 day'));
$tip_info=[];
// $key = '41b42bd4-c9f9-4617-9531-0a358dd97a82';
foreach($channelList as $channel) {
$other_param = json_decode($channel['other_data'],true);
if(!$other_param){
continue;
}
$roomid = $other_param['QYWX_roomid']??null;
if(!$roomid || $other_param['Monitor_OrderStatus_status'] !=1){
continue;
}
$sender = $other_param['QYWX_sender']??null;
if(isset($other_param['Monitor_OrderStatus_OrderFailRate'])){
$orderFailRate = $this->orderFailRate($channel,$other_param['Monitor_OrderStatus_OrderFailRate']);
}
}
if(!empty($tip_info)){
$errorMsg = "渠道余额监控预警<font color=\"warning\">".$count_sum ."列</font>,请相关同事注意。\n
>";
$errorMsg .= implode(">", $tip_info);
$RobotService->send_markdown($errorMsg,$key);
}
$this->setQueueSuccess("共处理 {$channelList_num} 个渠道, 完成{$count_sum} 个查询处理!");
}
#获取订单失败率
public function orderFailRate($channel,$rate)
{
$OrderService = OrderService::instance();
$cur = time();
$time = 300;
$whereRaw = $cur . '-unix_timestamp(create_at) >=' . $time;
return $OrderService->db()->whereRaw('status = 4 and ' . $whereRaw)->order('id asc')->select();
return true;
// $this->redis->set('queue:channel:order:status:monitor:success', $msg);
}
protected function redis()
{
if (!$this->redis) {
$this->redis = RedisService::getInstance();
}
}
}