'发货' AND work_fee IS NOT NULL)) GROUP BY owner_id"; $billDetails = DB::select(DB::raw($sql),[$year."-".$lastMonth."%"]); $areas = OwnerAreaReport::query()->with(["ownerStoragePriceModel.timeUnit","ownerStoragePriceModel.taxRate","ownerStoragePriceModel.unit"]) ->where("counting_month","like",$year."-".$lastMonth."%")->get(); $map = []; $mapTax = []; foreach($areas as $area){ if (!$area->ownerStoragePriceModel)continue; //信息提取模板 $GLOBALS["FEE_INFO"] = [ "area_id" =>$area->id, "counting_type" =>$area->ownerStoragePriceModel->counting_type, "using_type" =>$area->ownerStoragePriceModel->using_type, "fee_description" =>"", "total_fee" =>0, "tax_rate" =>0, ]; $key = $area->owner_id."_".$area->counting_month; if (!isset($map[$key]))$map[$key] = $mapTax[$key] = 0; list($money,$taxFee) = app('OwnerStoragePriceModelService') ->calculationAmount($area->ownerStoragePriceModel,$area->accounting_area,$area->owner_id,$area->counting_month); $map[$key] += $money; $mapTax[$key] += $taxFee; $GLOBALS["FEE_INFO"]["total_fee"] = $money; OwnerFeeStorage::query()->create($GLOBALS["FEE_INFO"]); } foreach (OwnerPriceSystem::query()->with(["timeUnit","taxRate"])->select("owner_id","usage_fee")->whereNull("operation")->orWhere("operation","")->get() as $system){ list($systemFee[$system->owner_id],$systemTaxFee[$system->owner_id]) = $this->systemFee($system,$year."-".$lastMonth); } $chunks = array_chunk($billDetails,50); foreach ($chunks as $bills){ $date = date('Y-m-d H:i:s'); $createOwnerBillReport = []; foreach ($bills as $bill){ $key = $bill->owner_id."_".$year."-".$lastMonth; $createOwnerBillReport[] = [ "owner_id" => $bill->owner_id, //项目ID "counting_month" => $year."-".$lastMonth."-01", //结算月 "work_fee" => $bill->work_fee, "logistic_fee" => $bill->logistic_fee, "storage_fee" => $map[$key] ?? 0, "storage_tax_fee" => $mapTax[$key] ?? 0, "other_fee" => $systemFee[$bill->owner_id] ?? null, "other_tax_fee" => $systemTaxFee[$bill->owner_id] ?? null, "created_at" => $date, ]; } LogService::log(__METHOD__,"项目管理-生成确认账单",json_encode($createOwnerBillReport)); DB::table("owner_bill_reports")->insert($createOwnerBillReport); } } /** * 系统费用 * * @param OwnerPriceSystem|\stdClass $system * @param string $month * * @return array */ private function systemFee(OwnerPriceSystem $system,$month) { if (!$system->timeUnit)$money = $system->usage_fee; else{ switch ($system->timeUnit->name){ case "日": $money = $system->usage_fee*(Carbon::parse($month)->lastOfMonth()->format("d")); break; case "单": $money = $system->usage_fee * (app("OrderService")->getOrderQuantity($system->owner_id)); break; case "年": $money = $system->usage_fee/12; break; default: $money = $system->usage_fee; } } $taxFee = app("OwnerService")->getTaxRateFee($system, $system->owner_id, $money); return array($money,$taxFee); } }