setName('makeseal') ->setDescription('the makeseal command'); } protected function execute(Input $input, Output $output) { $list = $this->GetInfo(); while ( $list->valid()){ $item = $list->current(); $this->makeSeal($item); $list->next(); } } public function GetInfo() { $info = ProductFz::where([['status','=',1]])->order("fz_date asc")->cursor(); foreach ($info as $item){ yield $item->toArray(); } } public function makeSeal($item){ var_dump($item); $lastMonth = date('Y-m',strtotime('-1 month',strtotime($item['fz_date']))); $ist = ProductFz::where([['fz_date','=',$lastMonth],['company_code','=',$item['company_code']]])->findOrEmpty(); if(!$ist->isEmpty()&& $ist['status']!=2){ $item['status']=3; $item['remark']=$lastMonth.'未封账'; (new ProductFz)->save($item); return; }; $mamger= FinancialManager::where(function($query) use($item){ $query->whereOr([[['buyer_code','=',$item['company_code']],['type','in',[1,3]]],[['seller_code','=',$item['company_code']],['type','in',[2,4]]]]); })->where(["status"=>1,"fz_date"=>$item['fz_date']])->findOrEmpty(); if(!$mamger->isEmpty()){ $item['status']=3; $item['remark']="出入库【{$mamger['id']}】未处理"; (new ProductFz)->save($item); return; } (new ProductSeal)->saveAll($this->getProductLog($item,$ist->id)); $item['status']=2; $item['remark']=''; (new ProductFz)->save($item); } public function getProductLog($item,$lastId){ $pastLog= ProductOnlog::withJoin(['Product'],'left') ->where([['fz_date','=',$item['fz_date']],['company_code','=',$item['company_code']]]) ->field('type,product_id,skuCode,goodName,spec,unit,unit_price,num')->cursor(); $list=[]; $balance = ProductSeal::where([['fz_id','=',$lastId],['balance_num','>',0]])->column('balance_num','product_id'); foreach ($pastLog as $item){ if(!isset($list[$item['product_id']])){ $list[$item['product_id']] = [ 'product_id'=>$item['product_id'], 'skuCode'=>$item['skuCode'], 'goodName'=>$item['goodName'], 'spec'=>$item['spec'], 'unit'=>$item['unit'], 'unit_price'=>$item['unit_price'], 'begin_num'=>$balance[$item['product_id']]??"0", 'in_num'=>"0", 'out_num'=>"0", 'balance_num'=>$balance[$item['product_id']]??"0", 'fz_id'=>$item['fz_id'], ]; } if($item['type']==3|| $item['type']==1){ $list[$item['product_id']]['balance_num']=bcadd($list[$item['product_id']]['balance_num'],$item['num'],8); $list[$item['product_id']]['in_num']=bcadd($list[$item['product_id']]['in_num'],$item['num'],8); } if($item['type']==4|| $item['type']==2){ $list[$item['product_id']]['balance_num']=bcsub($list[$item['product_id']]['balance_num'],$item['num'],8); $list[$item['product_id']]['out_num']=bcadd($list[$item['product_id']]['out_num'],$item['num'],8); } } return array_values($list); } }