engineering/app/adminapi/controller/CostConsultationReportController.php
2024-03-16 15:20:50 +08:00

211 lines
9.5 KiB
PHP

<?php
namespace app\adminapi\controller;
use app\common\model\auth\Admin;
use app\common\model\cost_project\CostApprovedProject;
use app\common\model\cost_project\CostProject;
use app\common\model\cost_project\CostProjectPerson;
use app\common\model\DataReception;
use app\common\model\dept\Dept;
use app\common\model\task\TaskAllocation;
use app\common\model\TaskHandlingThreeLevelReview;
use app\common\model\zjzx_finance\ZjzxInvoice;
use app\common\model\zjzx_finance\ZjzxRefund;
use app\common\model\zjzx_finance\ZjzxSettlement;
use think\facade\Db;
class CostConsultationReportController extends BaseAdminController
{
// 造价报表控制器
// 造价合同台账
public function cost_approved_project_list()
{
$params = $this->request->get();
$page_no = !empty($params['page_no']) ? $params['page_no'] : 1;
$page_size = !empty($params['page_size']) ? $params['page_size'] : 15;
$where = [];
if(!empty($params['contract_name'])){
$contract_ids1 = CostApprovedProject::where('contract_name','like','%'.$params['contract_name'].'%')->column('id');
$where[] = ['contract_id','in',$contract_ids1];
}
if(!empty($params['contract_num'])){
$contract_ids2 = CostApprovedProject::where('contract_num','like','%'.$params['contract_num'].'%')->column('id');
$where[] = ['contract_id','in',$contract_ids2];
}
if(!empty($params['part_a'])){
$contract_ids3 = CostApprovedProject::where('part_a','like','%'.$params['part_a'].'%')->column('id');
$where[] = ['contract_id','in',$contract_ids3];
}
$lists = CostProject::field('id,contract_id')->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function($data){
$contract = CostApprovedProject::field('contract_name,contract_num,contract_type,part_a,part_b,create_time,start_date,end_date,project_money,money')
->where('id',$data['contract_id'])->findOrEmpty();
$data['contract_name'] = $contract['contract_name'];
$data['contract_num'] = $contract['contract_num'];
$data['contract_type'] = $contract->contract_type_text;
$data['part_a'] = $contract['part_a'];
$data['part_b'] = $contract['part_b'];
$data['create_time'] = $contract['create_time'];
$data['start_date'] = $contract['start_date'];
$data['end_date'] = $contract['end_date'];
$data['project_money'] = $contract['project_money'];
$data['sign_money'] = $contract['money'];
//开票金额
$data['total_invoice_amount'] = ZjzxInvoice::where('project_id',$data['id'])->sum('apply_amount');
//到账金额
$data['total_refund_amount'] = ZjzxRefund::where('project_id',$data['id'])->sum('amount');
//结算金额
$data['total_settlement_amount'] = ZjzxSettlement::where('project_id',$data['id'])->sum('amount');
//应收账款
$data['total_collection_amount'] = $contract['money'] - $data['total_refund_amount'];
unset($data['contract_id'],$data['id']);
})->toArray();
$count = CostProject::where($where)->count();
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
}
// 造价项目信息汇总
public function cost_project_report()
{
$params = $this->request->get();
$page_no = !empty($params['page_no']) ? $params['page_no'] : 1;
$page_size = !empty($params['page_size']) ? $params['page_size'] : 15;
$where = [];
if(!empty($params['contract_name'])){
$contract_ids1 = CostApprovedProject::where('contract_name','like','%'.$params['contract_name'].'%')->column('id');
$where[] = ['contract_id','in',$contract_ids1];
}
if(!empty($params['project_name'])){
$where[] = ['project_name','like','%'.$params['project_name'].'%'];
}
$lists = CostProject::field('id,contract_id,project_num,project_name,starting,endtime,types,invest')
->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function($data){
$contract = CostApprovedProject::field('contract_name')->where('id',$data['contract_id'])->findOrEmpty();
$data['contract_name'] = $contract['contract_name'];
$data['types'] = $data->types_text;
//开票金额
$data['total_invoice_amount'] = ZjzxInvoice::where('project_id',$data['id'])->sum('apply_amount');
//到账金额
$data['total_refund_amount'] = ZjzxRefund::where('project_id',$data['id'])->sum('amount');
//提成金额
$data['total_commission_amount'] = 0;
})->toArray();
$count = CostProject::where($where)->count();
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
}
// 项目全过程跟踪表
public function project_trace()
{
$page_no = $this->request->param('page_no', 1);
$page_size = $this->request->param('page_size', 15);
$params = $this->request->param();
$project_name = $params['project_name'] ?? '';
$contract_name = $params['contract_name'] ?? '';
$query = Db::name('cost_project')->alias('p')->leftJoin('cost_approved_project c', 'p.contract_id=c.id')->where(function ($query) use ($project_name, $contract_name) {
if ($contract_name) {
$query->where('c.contract_name', 'like', '%' . $contract_name . '%');
}
if ($project_name) {
$query->where('p.project_name', 'like', '%' . $project_name . '%');
}
})->append(['task_allocation_status', 'task_handling_three_level_review_status', 'data_reception_status'])
->withAttr('task_allocation_status', function ($data, $value) {
$count = TaskAllocation::where('cost_project_id', $value['id'])->count();
return $count > 0 ? 1 : 0;
})->withAttr('task_handling_three_level_review_status', function ($data, $value) {
$count = TaskHandlingThreeLevelReview::where('project_id', $value['id'])->count();
return $count > 0 ? 1 : 0;
})->withAttr('data_reception_status', function ($data, $value) {
$count = DataReception::where('project_id', $value['id'])->count();
return $count > 0 ? 1 : 0;
});
$count = $query->count();
$lists = $query->append(['dept'])->withAttr('dept', function ($value, $data) {
return Dept::where('id', $data['depar'])->findOrEmpty()->toArray();
})->page($page_no, $page_size)->select();
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
}
/**
* 项目开票收款汇总表
*/
public function project_invoice_receipt()
{
$page_no = $this->request->param('page_no', 1);
$page_size = $this->request->param('page_size', 15);
$project_name = $params['project_name'] ?? '';
$depar_id = $params['depar_id'] ?? 0;
$query = (new CostProject)->with(['cost_project_contract']);
$field = 'id,project_num,project_name,depar,principal,contract_id';
if ($project_name) {
$query->where('project_name', 'like', '%' . $project_name . '%');
}
if ($depar_id) {
$query->where('depar', $depar_id);
}
$count = $query->count();
$lists = $query->field($field)->page($page_no, $page_size)->select()->each(function ($item) {
$item['start_date'] = date('Y-m-d', $item['start_date']);
$item['end_date'] = date('Y-m-d', $item['end_date']);
if ($item['depar'] > 0) {
$item['depar'] = Dept::where('id', $item['depar'])->value('name');
}
if ($item['principal'] > 0) {
$item['principal'] = Dept::where('id', $item['principal'])->value('name');
}
$item['has_invoice_amount'] = 0;
$item['amount_Collected'] = 0;
return $item;
});
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
}
/**
* 项目部门分布
*/
public function distribution_project_departments()
{
$page_no = $this->request->param('page_no', 1);
$page_size = $this->request->param('page_size', 15);
$query = (new CostProject);
$count = $query->count();
$lists = $query->page($page_no, $page_size)->select()->each(function ($item) {
$item['start_date'] = date('Y-m-d', $item['start_date']);
$item['end_date'] = date('Y-m-d', $item['end_date']);
if ($item['depar'] > 0) {
$item['depar'] = Dept::where('id', $item['depar'])->value('name');
}
return $item;
});
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
}
/**
* 项目人员分布
*/
public function distribution_project_personnel()
{
$page_no = $this->request->param('page_no', 1);
$page_size = $this->request->param('page_size', 15);
$query = (new CostProjectPerson);
$count = $query->count();
$lists = $query->page($page_no, $page_size)->select()->each(function ($item) {
$CostProject = (new CostProject)->where('id', $item['cost_project_id'])->field('depar,project_name')->find();
$item['project_name'] = $CostProject['project_name'];
$item['name'] = (new Admin)->where('id', $item['uid'])->value('name');
if ($CostProject['depar'] > 0) {
$item['depar'] = Dept::where('id', $CostProject['depar'])->value('name');
}
return $item;
});
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
}
}