211 lines
8.2 KiB
PHP
211 lines
8.2 KiB
PHP
<?php
|
||
// +----------------------------------------------------------------------
|
||
// | likeadmin快速开发前后端分离管理后台(PHP版)
|
||
// +----------------------------------------------------------------------
|
||
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
|
||
// | 开源版本可自由商用,可去除界面版权logo
|
||
// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
|
||
// | github下载:https://github.com/likeshop-github/likeadmin
|
||
// | 访问官网:https://www.likeadmin.cn
|
||
// | likeadmin团队 版权所有 拥有最终解释权
|
||
// +----------------------------------------------------------------------
|
||
// | author: likeadminTeam
|
||
// +----------------------------------------------------------------------
|
||
|
||
|
||
namespace app\adminapi\controller\cost_project;
|
||
|
||
|
||
use app\adminapi\controller\BaseAdminController;
|
||
use app\adminapi\lists\cost_project\CostApprovedProjectLists;
|
||
use app\adminapi\logic\cost_project\CostApprovedProjectLogic;
|
||
use app\adminapi\validate\cost_project\CostApprovedProjectValidate;
|
||
use app\common\model\consult_basic\ConsultProject;
|
||
use app\common\model\cost_project\CostProject;
|
||
use app\common\model\dept\Dept;
|
||
use app\common\model\financial\FinancialInvoice;
|
||
use app\common\model\financial\FinancialRefund;
|
||
use app\common\model\financial\FinancialSettlement;
|
||
use app\common\model\manage_basic\ManageProject;
|
||
use app\common\model\marketing\MarketingContract;
|
||
use app\common\model\marketing\MarketingCustom;
|
||
use app\common\model\supervision_project\SupervisionProject;
|
||
|
||
|
||
/**
|
||
* 待立项造价项目控制器
|
||
* Class CostApprovedProjectController
|
||
* @package app\adminapi\controller\cost_project
|
||
*/
|
||
class CostApprovedProjectController extends BaseAdminController
|
||
{
|
||
|
||
|
||
/**
|
||
* @notes 获取待立项造价项目列表
|
||
* @return \think\response\Json
|
||
* @author likeadmin
|
||
* @date 2024/02/20 14:16
|
||
*/
|
||
public function lists()
|
||
{
|
||
return $this->dataLists(new CostApprovedProjectLists());
|
||
}
|
||
|
||
public function ledger(): \think\response\Json
|
||
{
|
||
$params = $this->request->get();
|
||
$where = [];
|
||
$page_no = !empty($params['page_no']) ? $params['page_no'] : 1;
|
||
$page_size = !empty($params['page_size']) ? $params['page_size'] : 15;
|
||
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_b'])) {
|
||
$contract_ids3 = MarketingContract::where('part_b', 'like', '%' . $params['part_b'] . '%')->column('id');
|
||
$where[] = ['contract_id', 'in', $contract_ids3];
|
||
}
|
||
if (!empty($params['contract_type'])) {
|
||
$where[] = ['contract_type', '=', $params['contract_type']];
|
||
}
|
||
$lists = MarketingContract::field('id,contract_code,contract_name,contract_type,business_nature,part_a,signed_amount,signed_dept,create_time')
|
||
->where($where)->where('status', 1)
|
||
->page($page_no, $page_size)
|
||
->order('id desc')
|
||
->select()
|
||
->each(function ($data) {
|
||
$custom = MarketingCustom::field('name')->where('id', $data['part_a'])->findOrEmpty();
|
||
$dept = Dept::field('name')->where('id', $data['signed_dept'])->findOrEmpty();
|
||
$data['part_a_name'] = $custom['name'];
|
||
$data['signed_dept_name'] = $dept['name'];
|
||
$data['contract_type_text'] = $data->contract_type_text;
|
||
$data['business_nature_text'] = $data->business_nature_text;
|
||
$invoice_ids = FinancialInvoice::where('contract_id', $data['id'])->column('id');
|
||
//开票金额
|
||
$data['total_invoice_amount'] = FinancialInvoice::where('contract_id', $data['id'])->sum('apply_amount');
|
||
//未开票金额
|
||
$data['not_total_invoice_amount'] = bcsub($data['signed_amount'], $data['total_invoice_amount'], 2);
|
||
//到账金额
|
||
$data['total_refund_amount'] = FinancialRefund::where('contract_id', $data['id'])->sum('amount');
|
||
//未到账金额
|
||
$data['not_total_refund_amount'] = bcsub($data['signed_amount'], $data['total_refund_amount'], 2);
|
||
//开票已回款金额
|
||
$data['invoice_has_refund_amount'] = FinancialRefund::where('contract_id', $data['id'])->where('invoice_id', 'in', $invoice_ids)->sum('amount');
|
||
//开票未回款金额
|
||
$data['invoice_not_refund_amount'] = bcsub($data['total_invoice_amount'], $data['invoice_has_refund_amount'], 2);
|
||
//回款未开票金额
|
||
$data['refund_not_invoice_amount'] = bcsub($data['total_refund_amount'], $data['invoice_has_refund_amount'], 2);
|
||
//结算金额
|
||
$data['total_settlement_amount'] = FinancialSettlement::where('contract_id', $data['id'])->sum('amount');
|
||
//到账日期
|
||
$last_refund = FinancialRefund::where('contract_id', $data['id'])->order('id desc')->findOrEmpty();
|
||
$data['refund_date'] = $last_refund['create_time'] ?? '';
|
||
$financial_settlement = FinancialSettlement::where('contract_id', $data['id'])->order('id desc')->findOrEmpty();
|
||
if ($financial_settlement->isEmpty()) {
|
||
$data['is_settlement'] = 0; //未结算
|
||
$data['settlement_date'] = '';
|
||
} else {
|
||
if ($data['total_settlement_amount'] >= $data['signed_amount']) {
|
||
$data['is_settlement'] = 2; //已结算
|
||
} else {
|
||
$data['is_settlement'] = 1; //部分结算
|
||
}
|
||
$data['settlement_date'] = $financial_settlement['date'];
|
||
}
|
||
$project = match ($data['business_nature']) {
|
||
//工程监理
|
||
1 => SupervisionProject::field('id')->where('contract', $data['id'])->findOrEmpty(),
|
||
//项目管理
|
||
2 => ManageProject::field('id')->where('contract', $data['id'])->findOrEmpty(),
|
||
//项目咨询
|
||
3 => ConsultProject::field('id')->where('contract', $data['id'])->findOrEmpty(),
|
||
//造价咨询
|
||
4 => CostProject::field('id')->where('contract_id', $data['id'])->findOrEmpty(),
|
||
default => 0,
|
||
};
|
||
$data['project_id'] = $project['id'];
|
||
$rate = bcdiv($data['total_refund_amount'], $data['signed_amount'], 2);
|
||
$data['refund_rate'] = ($rate * 100).'%';
|
||
})
|
||
->toArray();
|
||
$count = MarketingContract::where($where)->where('status', 1)->count();
|
||
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
|
||
}
|
||
|
||
|
||
/**
|
||
* @notes 添加待立项造价项目
|
||
* @return \think\response\Json
|
||
* @author likeadmin
|
||
* @date 2024/02/20 14:16
|
||
*
|
||
* public function add()
|
||
* {
|
||
* $params = (new CostApprovedProjectValidate())->post()->goCheck('add');
|
||
* $result = CostApprovedProjectLogic::add($params);
|
||
* if (true === $result) {
|
||
* return $this->success('添加成功', [], 1, 1);
|
||
* }
|
||
* return $this->fail(CostApprovedProjectLogic::getError());
|
||
* }
|
||
*/
|
||
|
||
|
||
/**
|
||
* @notes 编辑待立项造价项目
|
||
* @return \think\response\Json
|
||
* @author likeadmin
|
||
* @date 2024/02/20 14:16
|
||
*
|
||
* public function edit()
|
||
* {
|
||
* $params = (new CostApprovedProjectValidate())->post()->goCheck('edit');
|
||
* $result = CostApprovedProjectLogic::edit($params);
|
||
* if (true === $result) {
|
||
* return $this->success('编辑成功', [], 1, 1);
|
||
* }
|
||
* return $this->fail(CostApprovedProjectLogic::getError());
|
||
* }
|
||
*/
|
||
|
||
|
||
/**
|
||
* @notes 删除待立项造价项目
|
||
* @return \think\response\Json
|
||
* @author likeadmin
|
||
* @date 2024/02/20 14:16
|
||
*
|
||
* public function delete()
|
||
* {
|
||
* $params = (new CostApprovedProjectValidate())->post()->goCheck('delete');
|
||
* $result = CostApprovedProjectLogic::delete($params);
|
||
* if (true === $result) {
|
||
* return $this->success('删除成功', [], 1, 1);
|
||
* }
|
||
* return $this->fail(CostApprovedProjectLogic::getError());
|
||
* }
|
||
*/
|
||
|
||
/**
|
||
* @notes 获取待立项造价项目详情
|
||
* @return \think\response\Json
|
||
* @author likeadmin
|
||
* @date 2024/02/20 14:16
|
||
*/
|
||
public function detail()
|
||
{
|
||
$params = (new CostApprovedProjectValidate())->goCheck('detail');
|
||
$result = CostApprovedProjectLogic::detail($params);
|
||
return $this->data($result);
|
||
}
|
||
|
||
public function datas()
|
||
{
|
||
return $this->data(CostApprovedProjectLogic::datas());
|
||
}
|
||
} |