REAPI/app/task/controller/OrderTask.php
mzeros a80b289967 feat(setting): 添加携号转网手机号检测功能
- 新增 MobileMnp 控制器和相关视图文件
- 实现携号转网手机号检测数据的添加、编辑和删除功能
- 添加条件搜索功能
- 优化订单历史数据获取逻辑,使用 OrderLastweekHistoryService
2025-01-10 14:42:38 +08:00

184 lines
4.6 KiB
PHP

<?php
namespace app\task\controller;
set_time_limit(0);
ini_set('memory_limit','512M');
ini_set('default_socket_timeout', -1); //不超时
use app\channel\service\ChannelService;
use app\gateway\controller\api\Notify;
use app\gateway\service\RedisService;
use app\merchant\service\OrderService;
use app\openapi\controller\Core;
use dever\Log;
/**
* 任务
* Class Test
* @package app\gateway\api
*/
class OrderTask extends Core
{
# 是否检测数据
protected $check = false;
# redis连接
protected $redis = false;
public function cron()
{
while(1) {
$this->query();
}
}
# 对submit提交的数据进行处理
public function query()
{
// var_dump(1);die;
try {
$settingUpdate = sysconf('settingUpdate');
if ($settingUpdate == 1) {
return true;
}
# 进程模式 1多进程 2单进程
$queue = sysconf('settingRedisQueryOrder');
// if ($queue == 1) {
// # 获取当前执行的进程数量
// $num = $this->getNum();
// if ($num >= 500) {
// # 等会儿再执行
// sleep(30);
// return true;
// }
// $popen = true;
// } else {
// return true;
// }
$this->redis();
$data = $this->redis->pop('query');
$this->run($data, true);
return true;
} catch (\Exception $e) {
$this->redis = false;
return true;
}
}
protected function redis()
{
if (!$this->redis) {
$this->redis = RedisService::getInstance();
}
}
protected function run($data, $popen = false)
{
if (isset($data['order_id']) && $data['order_id']) {
if ($popen) {
// $this->runOne
$this->popen($data['order_id']);
} else {
// var_dump($data);die;
$channelService = ChannelService::instance();
$result = $channelService->call('query', $data['cid'], $data);
Log::write('test', 'runss', $result);
// Log::write('');
// var_dump($result);die;
if ($result['status'] != 4) {
Log::write('test', 'runs', $result);
$notifyClass = new Notify($this->app);
$notifyClass->queue_query($data['order_id'], $result);
}
}
}
}
# 将数据推到子进程处理
public function popen($order)
{
$command = 'php /www/wwwroot/reapi/public/index.php openapi/orderTask/runOne ' . $order . ' 1>/dev/null 2>&1 &';
// var_dump($command);die;
exec($command);
}
# 获取当前执行的子进程数量
public function getNum()
{
$command = 'ps -ef | grep openapi/orderTask/runOne | grep -v grep | wc -l';
$num = exec($command);
return $num;
}
# 对一条数据进行处理
public function runOne()
{
// var_dump(123);die;
if (isset($_SERVER["argv"][2]) && $_SERVER["argv"][2]) {
$order = $_SERVER["argv"][2];
} else {
$order = input('order');
}
Log::write('test', 'run', $order);
if (!$order) {
exit('error');
}
$nq = false;
// var_dump($order);die;
if (str_contains($order, '_nq')) {
$order = str_replace('_nq', '', $order);
$nq = true;
}
$orderService = OrderService::instance();
$info = $orderService->get($order);
if ($info && $info['status'] == 4 ) {
if(isset($vo['num']) && $vo['num']>0) {
$info['order_id'] = $vo['order_id'].'_'.$vo['num'];
}
if ($nq) {
$info['request']['param']['s'] = 1;
}
// var_dump($info);die;
$this->run($info);
}
exit('ok');
}
# 商户对账
# 直接对数据库中的订单数据进行处理 如果队列失效,就使用这个方法进行操作,谨慎使用该方法,会和队列同时执行,已取消
/*
public function runAll()
{
$orderService = OrderService::instance();
$data = $orderService->getData();
if ($data) {
foreach ($data as $k => $v) {
if ($v['request']) {
$v['request'] = json_decode($v['request'], true);
$this->run($v['request']);
}
}
}
}
*/
}