| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- <?php
- /** php scripts/seed_water_alert_search_demo.php --apply:10个不同名称的补货搜索/分页样例。 */
- declare(strict_types=1);
- require dirname(__DIR__).'/vendor/autoload.php';
- \Dotenv\Dotenv::createUnsafeMutable(dirname(__DIR__))->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;
|