<?php
declare(strict_types=1);date_default_timezone_set('Asia/Shanghai');$lane=getenv('INV_LANE');$dm=getenv('POC_DIALECT')==='dm';$runtime=__DIR__.'/private';$root=__DIR__.'/source';$check=static function($ok,$message){if(!$ok)throw new RuntimeException($message);};$persist=static function($name,$value)use($runtime){$j=json_encode($value,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRESERVE_ZERO_FRACTION);if($j===false)throw new RuntimeException('Evidence encoding');file_put_contents($runtime.'/'.$name,$j);chmod($runtime.'/'.$name,0600);};
$dsn=$dm?'dm:host=127.0.0.1;port=5238;schema=AIZHCT_APP':'mysql:host='.getenv('POC_AI_HOST').';port='.getenv('POC_AI_PORT').';dbname='.getenv('POC_AI_SCHEMA').';charset='.getenv('POC_AI_CHARSET');$connect=static function()use($dsn){return new PDO($dsn,getenv('POC_AI_USER'),getenv('POC_AI_PASSWORD'),[PDO::ATTR_CASE=>PDO::CASE_LOWER,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_ORACLE_NULLS=>PDO::NULL_NATURAL,PDO::ATTR_STRINGIFY_FETCHES=>false,PDO::ATTR_EMULATE_PREPARES=>false]);};
$read=static function($sql,$params=[])use($connect,$runtime){if(!preg_match('/^SELECT\b/',$sql)||preg_match('/;|\b(?:INSERT|UPDATE|DELETE|ALTER|CREATE|DROP|INTO|CALL)\b/i',$sql))throw new RuntimeException('Independent SELECT only');$s=$connect()->prepare($sql);$bind=[];foreach(array_values($params) as $i=>$v){$s->bindValue($i+1,(string)$v,PDO::PARAM_STR);$bind[]=['position'=>$i+1,'value'=>(string)$v,'pdo_type'=>PDO::PARAM_STR];}$s->execute();$rows=$s->fetchAll(PDO::FETCH_ASSOC);foreach($rows as &$r){foreach($r as &$v)if(is_resource($v))$v=stream_get_contents($v);unset($v);ksort($r);}unset($r);$record=['queryString'=>$s->queryString,'bindValue'=>$bind,'rowCount'=>$s->rowCount(),'rows'=>$rows];file_put_contents($runtime.'/independent-read.jsonl',json_encode($record,JSON_UNESCAPED_UNICODE|JSON_PRESERVE_ZERO_FRACTION)."\n",FILE_APPEND|LOCK_EX);chmod($runtime.'/independent-read.jsonl',0600);return $rows;};
$staff=$lane==='B'?[46334,46335]:[1851,1852];$operators=$lane==='B'?[10074,10075]:[10010,10011];$tenants=[2147001111,2147001112];
$small=static function()use($read,$staff,$operators){$out=[];foreach(['nutrition_meals','nutrition_lack'] as $table)$out[$table]=$read('SELECT * FROM yoshop_'.$table.' WHERE store_id=? AND staff_id=? AND user_id=? AND set_date=? ORDER BY id',[2147001111,$staff[0],$operators[0],'2097-11-11']);return $out;};
$protected=static function()use($read,$staff,$operators,$tenants){$out=[];foreach(['nutrition_meals','nutrition_lack'] as $table)$out[$table]=$read('SELECT * FROM yoshop_'.$table.' WHERE store_id IN (?,?) AND set_date<>? ORDER BY id',array_merge($tenants,['2097-11-11']));$out['staff']=$read('SELECT * FROM yoshop_staff WHERE id IN (?,?) AND store_id IN (?,?) ORDER BY id',array_merge($staff,$tenants));$out['operators']=$read('SELECT store_user_id,store_id,user_name,real_name,is_super,is_delete FROM yoshop_store_user WHERE store_user_id IN (?,?) AND store_id IN (?,?) ORDER BY store_user_id',array_merge($operators,$tenants));return $out;};
function invApp($root,$runtime,$scenario){if(!defined('TP_ENV')){define('TP_ENV','poc');define('BUSINESS','aizhct');define('ENTERPRISE_NO','10001');require $root.'/vendor/autoload.php';spl_autoload_register(static function($class)use($root){if(preg_match('/printer|MQTT|BaiduDishes|\\\\Face$|storage\\\\Driver|QwRobot/i',$class))throw new RuntimeException('External SDK denied');foreach(['app\\'=>'app/','cores\\'=>'cores/'] as $p=>$d)if(strpos($class,$p)===0){$file=$root.'/'.$d.str_replace('\\','/',substr($class,strlen($p))).'.php';if(is_file($file))require $file;}},true,true);}$app=new \think\App($root);$app->setEnvName('poc');$app->setRuntimePath($runtime.'/runtime/');$app->initialize();$app->config->set(['default'=>'file','stores'=>['file'=>['type'=>'File','path'=>$runtime.'/cache/','prefix'=>'','expire'=>0]]],'cache');$app->instance('cache',new \think\Cache($app));$log=$app->config->get('log');$log['close']=true;foreach($log['channels'] as &$c)$c['close']=true;unset($c);$app->config->set($log,'log');$app->instance('log',new \think\Log($app));$app->log->channel()->close();require_once __DIR__.'/NativePdo.php';InvGate::$runtime=$runtime;InvGate::$scenario=$scenario;InvGate::$started=time();$cfg=$app->config->get('database');$c=$cfg['connections']['mysql'];$c['type']=getenv('POC_DIALECT')==='dm'?'\\'.InvDm::class:'\\'.InvMysql::class;foreach(['HOST'=>'hostname','PORT'=>'hostport','SCHEMA'=>'database','USER'=>'username','PASSWORD'=>'password','CHARSET'=>'charset','PREFIX'=>'prefix'] as $k=>$to)$c[$to]=getenv('POC_AI_'.$k);$c['debug']=false;$c['trigger_sql']=true;$c['break_reconnect']=false;$c['fields_cache']=false;$c['dsn']='';$c['params']=[];$cfg['default']='mysql';$cfg['connections']=['mysql'=>$c];$app->config->set($cfg,'database');$app->db->setConfig($app->config);$app->env->set('store.host',['store.investigate-write.invalid'=>2147001111]);return $app;}
