286 lines
14 KiB
PHP
286 lines
14 KiB
PHP
<?php
|
|
|
|
namespace app\adminapi\controller;
|
|
|
|
use app\common\model\auth\Admin;
|
|
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\GeoCity;
|
|
use app\common\model\GeoProvince;
|
|
use app\common\model\marketing\MarketingContract;
|
|
use app\common\model\project_process_management\JianliProjectProgressReport;
|
|
use app\common\model\ProjectCommission;
|
|
use app\common\model\ProjectCommissionDetail;
|
|
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;
|
|
|
|
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 = MarketingContract::where('contract_name', 'like', '%' . $params['contract_name'] . '%')->column('id');
|
|
$where[] = ['contract_id', 'in', $contract_ids1];
|
|
}
|
|
if (!empty($params['contract_num'])) {
|
|
$contract_ids2 = MarketingContract::where('contract_code', 'like', '%' . $params['contract_num'] . '%')->column('id');
|
|
$where[] = ['contract_id', 'in', $contract_ids2];
|
|
}
|
|
if (!empty($params['part_a'])) {
|
|
$contract_ids3 = MarketingContract::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 = MarketingContract::field('contract_name,contract_code,contract_type,part_a,part_b,create_time,start_date,end_date,project_money,signed_amount')
|
|
->where('id', $data['contract_id'])->findOrEmpty();
|
|
$admin = Admin::field('name')->where('id', $contract['part_a'])->findOrEmpty();
|
|
$data['contract_name'] = $contract['contract_name'];
|
|
$data['contract_num'] = $contract['contract_code'];
|
|
$data['contract_type'] = !$contract->isEmpty() ? $contract->contract_type_text : '';
|
|
$data['part_a'] = $admin['name'];
|
|
$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['signed_amount'];
|
|
//开票金额
|
|
$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 = MarketingContract::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 = MarketingContract::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'] = ProjectCommission::where('project_id', $data['id'])->sum('bczfze');
|
|
})->toArray();
|
|
$count = CostProject::where($where)->count();
|
|
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
|
|
}
|
|
|
|
// 项目全过程跟踪表
|
|
public function project_trace()
|
|
{
|
|
$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 = MarketingContract::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,depar,principal')
|
|
->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function ($data) {
|
|
$contract = MarketingContract::field('contract_name')->where('id', $data['contract_id'])->findOrEmpty();
|
|
$dept = Dept::field('name')->where('id', $data['depar'])->findOrEmpty();
|
|
$admin = Admin::field('name')->where('id', $data['principal'])->findOrEmpty();
|
|
$data['contract_name'] = $contract['contract_name'];
|
|
$data['project_director'] = $admin?->name;
|
|
$data['dept_name'] = $dept?->name;
|
|
//任务分配状态
|
|
$task_allocation_status = TaskAllocation::where('cost_project_id', $data['id'])->count();
|
|
$data['task_allocation_status'] = $task_allocation_status > 0 ? 1 : 0;
|
|
//任务办理状态
|
|
$task_handling_three_level_review_status = TaskHandlingThreeLevelReview::where('project_id', $data['id'])->count();
|
|
$data['task_handling_three_level_review_status'] = $task_handling_three_level_review_status > 0 ? 1 : 0;
|
|
//资料归档状态
|
|
$data_reception_status = DataReception::where('project_id', $data['id'])->count();
|
|
$data['data_reception_status'] = $data_reception_status > 0 ? 1 : 0;
|
|
//开票金额
|
|
$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'] = ProjectCommission::where('project_id', $data['id'])->sum('bczfze');
|
|
})->toArray();
|
|
$count = CostProject::where($where)->count();
|
|
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
|
|
}
|
|
|
|
/**
|
|
* 项目开票收款汇总表
|
|
*/
|
|
public function project_invoice_receipt()
|
|
{
|
|
$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 = MarketingContract::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,depar,principal')
|
|
->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function ($data) {
|
|
$contract = MarketingContract::field('contract_name')->where('id', $data['contract_id'])->findOrEmpty();
|
|
$dept = Dept::field('name')->where('id', $data['depar'])->findOrEmpty();
|
|
$admin = Admin::field('name')->where('id', $data['principal'])->findOrEmpty();
|
|
$data['contract_name'] = $contract['contract_name'];
|
|
$data['project_director'] = $admin?->name;
|
|
$data['dept_name'] = $dept?->name;
|
|
//开票金额
|
|
$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');
|
|
})->toArray();
|
|
$count = CostProject::where($where)->count();
|
|
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'));
|
|
}
|
|
|
|
//项目提成统计
|
|
public function project_commission_statistics()
|
|
{
|
|
$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['project_name'])) {
|
|
$where[] = ['project_name', 'like', '%' . $params['project_name'] . '%'];
|
|
}
|
|
if (!empty($params['date'])) {
|
|
$date = explode(',', $params['date']);
|
|
$where[] = ['apptime', 'between', [strtotime($date[0] . ' 00:00:00'), strtotime($date[1] . ' 23:59:59')]];
|
|
}
|
|
$lists = ProjectCommission::field('id,project_id,apptime')->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function ($data) {
|
|
$project = CostProject::field('project_name,project_num,contract_id')->where('id', $data['project_id'])->findOrEmpty();
|
|
$contract = MarketingContract::field('contract_name')->where('id', $project['contract_id'])->findOrEmpty();
|
|
$data['project_num'] = $project['project_num'];
|
|
$data['project_name'] = $project['project_name'];
|
|
$data['contract_name'] = $contract['contract_name'];
|
|
$data['children'] = ProjectCommissionDetail::withoutField('engineer_id,remark,create_time,update_time,delete_time')
|
|
->where('project_commission_id', $data['id'])->select()->each(function ($data) {
|
|
$data['task_type'] = $data->task_type_text;
|
|
$data['professional_type'] = $data->professional_type_text;
|
|
})->toArray();
|
|
})->toArray();
|
|
$count = ProjectCommission::where($where)->count();
|
|
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
|
|
}
|
|
|
|
//项目进度统计
|
|
public function project_schedule_statistics()
|
|
{
|
|
$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 = MarketingContract::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,types,aunit,province,city,starting,endtime,jhgq,principal')
|
|
->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function ($data) {
|
|
$contract = MarketingContract::field('contract_name')->where('id', $data['contract_id'])->findOrEmpty();
|
|
$province = GeoProvince::field('province_name')->where('province_code', $data['province'])->findOrEmpty();
|
|
$city = GeoCity::field('city_name')->where('city_code', $data['city'])->findOrEmpty();
|
|
$schedule = JianliProjectProgressReport::field('start_date,end_date,duration,done_progress')->where('project_id', $data['id'])->findOrEmpty();
|
|
$admin = Admin::field('name')->where('id', $data['principal'])->findOrEmpty();
|
|
$data['contract_name'] = $contract['contract_name'];
|
|
$data['types'] = $data->types_text;
|
|
$data['industry_nature'] = $data->industry_text;
|
|
$data['project_director'] = $admin?->name;
|
|
$data['province'] = $province['province_name'];
|
|
$data['city'] = $city['city_name'];
|
|
$data['actual_starting'] = $schedule['start_date'];
|
|
$data['actual_endtime'] = $schedule['end_date'];
|
|
$data['duration'] = $schedule['duration'];
|
|
$data['done_progress'] = $schedule['done_progress'];
|
|
})->toArray();
|
|
$count = CostProject::where($where)->count();
|
|
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
|
|
}
|
|
}
|