From 991222546daffe3b777fc58e42d5e4884867d0c6 Mon Sep 17 00:00:00 2001 From: mzeros Date: Mon, 6 Jan 2025 14:49:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(order):=20=E6=B7=BB=E5=8A=A0=E6=90=BA?= =?UTF-8?q?=E5=8F=B7=E8=BD=AC=E7=BD=91=E6=A3=80=E6=B5=8B=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在订单信息页面增加号码状态数据表格,显示携转状态、原运营商、现运营商等信息 - 在订单控制器中添加携号转网检测逻辑,解析订单参数并获取运营商信息- 新增 ChannelOrderStatusMonitor 类,用于监控渠道订单问题 --- app/order/controller/Order.php | 24 +++- app/order/view/order/info.html | 32 +++++ .../command/monitor/ChannelBalanceMonitor.php | 1 + .../monitor/ChannelOrderStatusMonitor.php | 132 ++++++++++++++++++ 4 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 app/queue/command/monitor/ChannelOrderStatusMonitor.php diff --git a/app/order/controller/Order.php b/app/order/controller/Order.php index 86ca6ac..1b6c7b6 100644 --- a/app/order/controller/Order.php +++ b/app/order/controller/Order.php @@ -613,6 +613,29 @@ class Order extends Controller } } + #携号转网检测,手机号检测: + if(str_contains($data['param'], 'mobile') && (str_contains($data['param'], 'old_product') ||str_contains($data['param'], 'dhcz_mnp') || str_contains($data['param'], 'mnp_isp_array'))){ + $param_data = json_decode($data['param'],true); + $isp_name = [ + 1=>'移动', + 2=>'联通', + 3=>'电信', + ]; + + $old_product = $this->app->db->name('ServiceInfo')->where('key',$param_data['old_product'])->field('name')->find(); + $data['mobile_status_array'] = [ + 'old_product'=>$old_product['name']??$param_data['old_product']??'', + 'old_isp'=>$isp_name[$param_data['mnp_isp_array']['old_isp']??0] ?? '', + 'new_isp'=>$isp_name[$param_data['mnp_isp_array']['new_isp']??0] ?? '', + ]; + if($data['mobile_status_array']['old_isp'] == $data['mobile_status_array']['new_isp']){ + $data['mobile_status_array']['is_mnp'] = '未携转'; + }else{ + $data['mobile_status_array']['is_mnp'] = '已携转'; + } + + } + } # 手动扣款 @@ -1293,7 +1316,6 @@ class Order extends Controller } else { $this->error('请上传文件'); } -// var_dump($data);die; if (str_contains($data['file']['name'], '.xls')) { $file = 'card/order_card.xlsx'; diff --git a/app/order/view/order/info.html b/app/order/view/order/info.html index b294033..d3a831c 100644 --- a/app/order/view/order/info.html +++ b/app/order/view/order/info.html @@ -141,6 +141,38 @@ + {if isset($vo.mobile_status_array) && $vo.mobile_status_array} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
号码状态数据
号码{$vo.account|default=''}
携转状态{$vo.mobile_status_array.is_mnp|default=''}
原运营商{$vo.mobile_status_array.old_isp|default=''}
现运营商{$vo.mobile_status_array.new_isp|default=''}
原送入产品编码{$vo.mobile_status_array.old_product|default=''}
+ {/if} {if $vo.kami} diff --git a/app/queue/command/monitor/ChannelBalanceMonitor.php b/app/queue/command/monitor/ChannelBalanceMonitor.php index b369a6e..34b5f93 100644 --- a/app/queue/command/monitor/ChannelBalanceMonitor.php +++ b/app/queue/command/monitor/ChannelBalanceMonitor.php @@ -33,6 +33,7 @@ class ChannelBalanceMonitor extends Command ini_set('memory_limit', '1024M'); $this->redis(); + #避免反复查询已经固定的Channel数据,此处应该引入redis 缓存数据 $channelService = ChannelService::instance(); $RobotService = new WxWorkBot($this->app); $channelList = $channelService->db()->where(['status'=>1])->whereLike('other_data','%Monitor_Balance_status%')->select()->toArray(); diff --git a/app/queue/command/monitor/ChannelOrderStatusMonitor.php b/app/queue/command/monitor/ChannelOrderStatusMonitor.php new file mode 100644 index 0000000..cf8c75c --- /dev/null +++ b/app/queue/command/monitor/ChannelOrderStatusMonitor.php @@ -0,0 +1,132 @@ +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; + } + $Monitor_Balance = $other_param['Monitor_Balance'] ?? null; + if(!$Monitor_Balance){ + continue; + } + + + + try{ + $account_data = $channelService->call('account', $channel['id'], $day); + + if (is_array($account_data) && isset($account_data['account'])) { + $balance = $account_data['account']; + if( $balance <= $Monitor_Balance){ + + if(!$this->redis->get('Check_channel_account-'.$channel['id'])){ + $count_sum ++; + $this->redis->set('Check_channel_account-'.$channel['id'],1); + $tip_info[] = $channel['name']."余额不足,只剩下:".$balance.""; + + } + $Monitor_Balance_TOP = $other_param['Monitor_Balance_TOP'] ?? null; + if($Monitor_Balance_TOP && $balance <= $Monitor_Balance_TOP){ + if(!$this->redis->get('Check_channel_account_TOP-'.$channel['id'])){ + $count_sum ++; + $this->redis->set('Check_channel_account_TOP-'.$channel['id'],1); + $tip_info[] = $channel['name']."余额不足,只剩下:".$balance.""; + + } + } + }else{ + if($this->redis->get('Check_channel_account-'.$channel['id'])){ + $count_sum ++; + + $this->redis->delete('Check_channel_account-'.$channel['id']); + $tip_info[] = $channel['name']."余额已经恢复,现在余额为:".$balance.""; + } + if($this->redis->get('Check_channel_account_TOP-'.$channel['id'])){ + $this->redis->delete('Check_channel_account_TOP-'.$channel['id']); + } + + } + + } + }catch (\Exception $e){ + + } + + } + + if(!empty($tip_info)){ + $errorMsg = "渠道余额监控预警".$count_sum ."列,请相关同事注意。\n +>"; + $errorMsg .= implode(">", $tip_info); + $RobotService->send_markdown($errorMsg,$key); + + } + + + $this->setQueueSuccess("共处理 {$channelList_num} 个渠道, 完成{$count_sum} 个查询处理!"); + + + } + + protected function redis() + { + if (!$this->redis) { + $this->redis = RedisService::getInstance(); + } + } + + + + +} + + +