183 lines
10 KiB
PHP
183 lines
10 KiB
PHP
<?php
|
|
|
|
namespace app\adminapi\controller\project;
|
|
|
|
use app\adminapi\controller\BaseAdminController;
|
|
use app\common\model\bid\BidBiddingDecision;
|
|
use app\common\model\bid\BidBuyBiddingDocument;
|
|
use app\common\model\bid\BidDocumentExamination;
|
|
use app\common\model\bid\BidResult;
|
|
use app\common\model\bid\BidSecurityApply;
|
|
use app\common\model\bid\BidSecurityRefund;
|
|
use app\common\model\contract\Contract;
|
|
use app\common\model\contract\ContractNegotiation;
|
|
use app\common\model\contract\ProcurementContract;
|
|
use app\common\model\contract\ProcurementContractDetail;
|
|
use app\common\model\contract\SubcontractingContract;
|
|
use app\common\model\contract\SubcontractingContractDetail;
|
|
use app\common\model\contract\SubcontractingContractNegotiation;
|
|
use app\common\model\custom\CustomerDemand;
|
|
use app\common\model\custom\CustomerDemandSolution;
|
|
use app\common\model\finance\FinanceInvoiceApply;
|
|
use app\common\model\finance\FinancePaymentApply;
|
|
use app\common\model\finance\FinancePaymentPlan;
|
|
use app\common\model\finance\FinanceReceiptRecord;
|
|
use app\common\model\finance\FinanceReturnedMoney;
|
|
use app\common\model\finance\FinanceReturnedRecord;
|
|
use app\common\model\project\Competitor;
|
|
use app\common\model\project\ProjectCostBudget;
|
|
use app\common\model\project\ProjectCostBudgetDetail;
|
|
use app\common\model\project\ProjectEquipmentBudgetDetail;
|
|
use app\common\model\project\ProjectEstimate;
|
|
use app\common\model\project\ProjectFollowUp;
|
|
use app\common\model\project\ProjectLaborBudgetDetail;
|
|
use app\common\model\project\ProjectMaterialBudgetDetail;
|
|
use app\common\model\project\ProjectSettlement;
|
|
use app\common\model\project\ProjectSubcontractSettlement;
|
|
use app\common\model\project\ProjectSubpackageBudgetDetail;
|
|
use app\common\model\project\ProjectTotalBudget;
|
|
use think\response\Json;
|
|
|
|
class ProjectStatisticsController extends BaseAdminController
|
|
{
|
|
//项目商务统计
|
|
public function business(): Json
|
|
{
|
|
$id = $this->request->get('project_id');
|
|
if(empty($id)){
|
|
return $this->fail('缺少必要参数');
|
|
}
|
|
//项目跟进
|
|
$follow_total = ProjectFollowUp::field('id')->where('project_id',$id)->count();
|
|
//项目需求
|
|
$demand_total = CustomerDemand::field('id')->where('project_id',$id)->count();
|
|
//项目方案
|
|
$solution_total = CustomerDemandSolution::field('id')->where('project_id',$id)->count();
|
|
//项目概算
|
|
$estimate_total = ProjectEstimate::field('id')->where('project_id',$id)->count();
|
|
//竞争对手
|
|
$competitor_total = Competitor::field('id')->where('project_id',$id)->count();
|
|
//投标决策
|
|
$decision_total = BidBiddingDecision::field('id')->where('project_id',$id)->count();
|
|
//购买标书
|
|
$document_total = BidBuyBiddingDocument::field('id')->where('project_id',$id)->count();
|
|
//标书审查
|
|
$document_ids = BidBuyBiddingDocument::where('project_id',$id)->column('id');
|
|
$examination_total = BidDocumentExamination::field('id')->where('project_id',$id)->where('buy_bidding_document_id','in',$document_ids)->count();
|
|
//中标项目
|
|
$successful_total = BidResult::field('id')->where('is_successful',1)->count();
|
|
//投标保证金
|
|
$decision_ids = BidSecurityApply::where('project_id',$id)->column('bidding_decision_id');
|
|
$security_amount = BidBiddingDecision::where('id','in',$decision_ids)->sum('margin_amount');
|
|
//已退保证金
|
|
$han_refund_security_amount = BidSecurityRefund::where('project_id',$id)->sum('refund_amount');
|
|
//未退保证金
|
|
$not_refund_security_amount = bcsub($security_amount,$han_refund_security_amount);
|
|
$result = compact('follow_total','demand_total','solution_total','estimate_total','competitor_total','decision_total','document_total','examination_total','successful_total','security_amount','han_refund_security_amount','not_refund_security_amount');
|
|
return $this->success('success',$result);
|
|
}
|
|
|
|
//项目合同统计
|
|
public function contracts(): Json
|
|
{
|
|
$id = $this->request->get('project_id');
|
|
if(empty($id)){
|
|
return $this->fail('缺少必要参数');
|
|
}
|
|
//项目合同金额
|
|
$project_contract_amount = Contract::where('project_id',$id)->sum('amount');
|
|
//项目合同洽商金额
|
|
$project_negotiation_amount = ContractNegotiation::where('project_id',$id)->sum('negotiation_amount');
|
|
//项目结算金额
|
|
$project_settlement_amount = ProjectSettlement::where('project_id',$id)->sum('settlement_amount');
|
|
//项目已开票金额
|
|
$project_invoicing_amount = FinanceInvoiceApply::where('project_id',$id)->sum('invoicing_amount');
|
|
//项目回款计划金额
|
|
$project_returned_plan_amount = FinanceReturnedMoney::where('project_id',$id)->sum('amount');
|
|
//项目回款金额
|
|
$project_returned_amount = FinanceReturnedRecord::where('project_id',$id)->sum('amount');
|
|
//项目未回款金额
|
|
$project_not_returned_amount = bcsub($project_returned_plan_amount,$project_returned_amount);
|
|
//项目回款比例
|
|
$project_returned_ratio = !empty($project_returned_plan_amount) ? number_format($project_returned_amount / $project_returned_plan_amount,2) : 0;
|
|
/*****************************************************************************************************************************************************************************************************************************************************************/
|
|
|
|
//分包合同金额
|
|
$subcontracting_contract_ids = SubcontractingContract::where('project_id',$id)->column('id');
|
|
$subcontracting_contract_amount = SubcontractingContractDetail::where('contract_id','in',$subcontracting_contract_ids)->sum('amount_including_tax');
|
|
//分包合同洽商金额
|
|
$subcontracting_negotiation_amount = SubcontractingContractNegotiation::where('project_id',$id)->sum('negotiation_amount');
|
|
//分包合同结算金额
|
|
$subcontracting_settlement_amount = ProjectSubcontractSettlement::where('project_id',$id)->sum('settlement_amount');
|
|
//分包合同收票金额
|
|
$subcontracting_invoicing_amount = FinanceReceiptRecord::where('project_id',$id)->where('contract_type',2)->sum('invoice_amount');
|
|
//分包合同付款计划金额
|
|
$subcontracting_payment_plan_amount = FinancePaymentPlan::where('project_id',$id)->where('contract_type',2)->sum('amount');
|
|
//分包合同付款金额
|
|
$subcontracting_payment_amount = FinancePaymentApply::where('project_id',$id)->where('contract_type',2)->sum('amount');
|
|
//分包合同未付款金额
|
|
$subcontracting_not_payment_amount = bcsub($subcontracting_payment_plan_amount,$subcontracting_payment_amount);
|
|
//分包合同付款比例
|
|
$subcontracting_payment_ratio = !empty($subcontracting_payment_plan_amount) ? number_format($subcontracting_payment_amount / $subcontracting_payment_plan_amount,2) : 0;
|
|
/*****************************************************************************************************************************************************************************************************************************************************************/
|
|
|
|
//采购合同金额
|
|
$procurement_contract_ids = ProcurementContract::where('project_id',$id)->column('id');
|
|
$procurement_contract_amount = ProcurementContractDetail::where('contract_id','in',$procurement_contract_ids)->sum('amount_including_tax');
|
|
//采购合同收票金额
|
|
$procurement_invoicing_amount = FinanceReceiptRecord::where('project_id',$id)->where('contract_type',1)->sum('invoice_amount');
|
|
//采购合同付款计划金额
|
|
$procurement_payment_plan_amount = FinancePaymentPlan::where('project_id',$id)->where('contract_type',1)->sum('amount');
|
|
//采购合同付款金额
|
|
$procurement_payment_amount = FinancePaymentApply::where('project_id',$id)->where('contract_type',1)->sum('amount');
|
|
//采购合同未付款金额
|
|
$procurement_not_payment_amount = bcsub($procurement_payment_plan_amount,$procurement_payment_amount);
|
|
//采购合同付款比例
|
|
$procurement_payment_ratio = !empty($procurement_payment_plan_amount) ? number_format($procurement_payment_amount / $procurement_payment_plan_amount,2) : 0;
|
|
|
|
//返回数据
|
|
$result = compact(
|
|
'project_contract_amount', 'project_negotiation_amount','project_settlement_amount','project_invoicing_amount','project_returned_amount','project_not_returned_amount','project_returned_ratio',
|
|
'subcontracting_contract_amount','subcontracting_negotiation_amount','subcontracting_settlement_amount','subcontracting_invoicing_amount','subcontracting_payment_amount','subcontracting_not_payment_amount','subcontracting_payment_ratio',
|
|
'procurement_contract_amount','procurement_invoicing_amount','procurement_payment_amount','procurement_not_payment_amount','procurement_payment_ratio'
|
|
);
|
|
return $this->success('success',$result);
|
|
}
|
|
|
|
//项目预算统计
|
|
public function budget(): Json
|
|
{
|
|
$id = $this->request->get('project_id');
|
|
if(empty($id)){
|
|
return $this->fail('缺少必要参数');
|
|
}
|
|
$column = ['总预算','材料预算','分包预算','人工预算','费用预算','机具预算'];
|
|
//总预算
|
|
$project_budget = ProjectTotalBudget::field('id,cl_cost,fb_cost,rg_cost,fy_cost,jj_cost')->where('project_id',$id)->findOrEmpty();
|
|
$total_budget = $project_budget['cl_cost'] + $project_budget['fb_cost'] + $project_budget['rg_cost'] + $project_budget['fy_cost'] + $project_budget['jj_cost'];
|
|
//材料清单预算
|
|
$material_budget = ProjectMaterialBudgetDetail::where('project_id',$id)->sum('amount');
|
|
//分包清单预算
|
|
$subpackage_budget = ProjectSubpackageBudgetDetail::where('project_id',$id)->sum('amount');
|
|
//人工清单预算
|
|
$labor_budget = ProjectLaborBudgetDetail::where('project_id',$id)->sum('amount');
|
|
//费用清单预算
|
|
$cost_budget = ProjectCostBudgetDetail::where('project_id',$id)->sum('amount');
|
|
//机具清单预算
|
|
$equipment_budget = ProjectEquipmentBudgetDetail::where('project_id',$id)->sum('amount');
|
|
$series1 = [
|
|
'name' => '成本预算',
|
|
'data' => [$total_budget,$project_budget['cl_cost'],$project_budget['fb_cost'],$project_budget['rg_cost'],$project_budget['fy_cost'],$project_budget['jj_cost']]
|
|
];
|
|
$series2 = [
|
|
'name' => '清单预算',
|
|
'data' => [($material_budget+$subpackage_budget+$labor_budget+$cost_budget+$equipment_budget),$material_budget,$subpackage_budget,$labor_budget,$cost_budget,$equipment_budget]
|
|
];
|
|
$result = [
|
|
'series1' => $series1,
|
|
'series2' => $series2,
|
|
'column' => $column,
|
|
];
|
|
return $this->success('success',$result);
|
|
}
|
|
} |