load(); \support\App::loadAllConfig(['route']); date_default_timezone_set('Asia/Shanghai'); use support\Db; use plugin\saiadmin\app\model\water\WaterModel; use plugin\saiadmin\app\service\WaterBusiness; $batch = 'TEST-WATER-ALERT-SEARCH-20260910'; $examples = [ ['星河科技','东城区',0,2,0], ['青禾设计','西城区',1,2,1], ['远航物流','南城区',2,2,0], ['锦程制造','北城区',3,5,1], ['晨曦教育','东城区',1,3,0], ['百川商贸','西城区',4,5,1], ['蓝湾酒店','南城区',0,2,0], ['瑞丰农业','北城区',3,4,1], ['华庭物业','东城区',2,3,0], ['博雅文化','西城区',5,6,1], ]; $service = new WaterBusiness(); $applied = in_array('--apply',$argv,true); $replayed = false; if ($applied) { $replayed = WaterModel::transaction(function () use ($service,$batch,$examples) { // 与之前演示脚本使用同一锁,防止并发重复初始化;不修改原测试规格。 $anchor = \plugin\saiadmin\app\model\water\WaterSku::query()->where('name','【测试0910】18.9L桶装水')->lock(true)->first()?->toArray(); if (!$anchor) throw new RuntimeException('缺少之前的测试数据'); if (\plugin\saiadmin\app\model\water\WaterLedger::query()->where(['kind'=>'demo_seed','reference'=>$batch])->first()?->toArray()) return true; $skus = []; foreach ([['山泉水(测试)',12],['纯净水(测试)',8]] as [$name,$liters]) { if (\plugin\saiadmin\app\model\water\WaterSku::query()->where('name',$name)->count()) throw new RuntimeException('测试规格已存在,停止避免覆盖'); $skus[] = $service->save('sku',['name'=>$name,'liters'=>$liters,'safety_stock'=>2],1)['id']; } $ids = []; foreach ($examples as $index=>[$name,$region,$full,$threshold,$skuIndex]) { $name .= '(测试)'; if (\plugin\saiadmin\app\model\water\WaterEnterprise::query()->where('name',$name)->count()) throw new RuntimeException('测试企业已存在,停止避免覆盖:'.$name); $enterprise = $service->save('enterprise',['name'=>$name,'contact'=>'模拟联系人','phone'=>'TEST-SEARCH-'.($index+1), 'region'=>$region,'address'=>$region.'模拟供水点'.($index+1).'(测试数据,请勿配送)'],1)['id']; $sku = $skus[$skuIndex]; // 使用库存盘点入口建立真实账户,不伪造收款和套餐权益。 $service->stock(['enterprise_id'=>$enterprise,'sku_id'=>$sku,'mode'=>'site_count','quantity'=>$full, 'reference'=>$batch.'-'.($index+1),'note'=>'【测试数据】搜索与分页演示的现场满桶盘点'],1); $accountId = (int)\plugin\saiadmin\app\model\water\WaterAccount::query()->where(['enterprise_id'=>$enterprise,'sku_id'=>$sku])->value('id'); $ids[] = $enterprise; } \plugin\saiadmin\app\model\water\WaterLedger::query()->insert(['kind'=>'demo_seed','sku_id'=>$anchor['id'],'enterprise_id'=>0,'quantity'=>0,'amount_cents'=>0, 'reference'=>$batch,'note'=>'【测试数据】10条搜索分页样例,企业ID:'.implode(',',$ids),'created_by'=>1,'created_at'=>date('Y-m-d H:i:s')]); return false; }); } $first = $service->listing('alerts',['page'=>1,'limit'=>10]); $second = $service->listing('alerts',['page'=>2,'limit'=>10]); echo json_encode(['applied'=>$applied,'replayed'=>$replayed,'total'=>$first['total'], 'page1'=>array_column($first['data'],'enterprise_name'),'page2'=>array_column($second['data'],'enterprise_name'), 'search_xinghe'=>$service->listing('alerts',['keyword'=>'星河'])['total'], 'search_east'=>$service->listing('alerts',['keyword'=>'东城区'])['total'], 'search_spring'=>$service->listing('alerts',['keyword'=>'山泉水'])['total'], 'today_yuan'=>$service->overview()['today_cents']/100],JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE).PHP_EOL;