diff --git a/app/adminapi/controller/CostConsultationReportController.php b/app/adminapi/controller/CostConsultationReportController.php index 2d04a8868..462b7b26f 100644 --- a/app/adminapi/controller/CostConsultationReportController.php +++ b/app/adminapi/controller/CostConsultationReportController.php @@ -8,6 +8,7 @@ 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\ProjectCommission; use app\common\model\task\TaskAllocation; use app\common\model\TaskHandlingThreeLevelReview; use app\common\model\zjzx_finance\ZjzxInvoice; @@ -89,7 +90,7 @@ class CostConsultationReportController extends BaseAdminController //到账金额 $data['total_refund_amount'] = ZjzxRefund::where('project_id',$data['id'])->sum('amount'); //提成金额 - $data['total_commission_amount'] = 0; + $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')); @@ -98,35 +99,42 @@ class CostConsultationReportController extends BaseAdminController // 项目全过程跟踪表 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')); + $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,depar') + ->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function($data){ + $contract = CostApprovedProject::field('contract_name,project_director')->where('id',$data['contract_id'])->findOrEmpty(); + $dept = Dept::field('name')->where('id', $data['depar'])->findOrEmpty(); + $data['contract_name'] = $contract['contract_name']; + $data['project_director'] = $contract['project_director']; + $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')); } /** @@ -134,34 +142,31 @@ class CostConsultationReportController extends BaseAdminController */ 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')); + $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,depar') + ->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function($data){ + $contract = CostApprovedProject::field('contract_name,project_director')->where('id',$data['contract_id'])->findOrEmpty(); + $dept = Dept::field('name')->where('id', $data['depar'])->findOrEmpty(); + $data['contract_name'] = $contract['contract_name']; + $data['project_director'] = $contract['project_director']; + $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')); } /** @@ -207,4 +212,18 @@ class CostConsultationReportController extends BaseAdminController }); 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'])){ +// +// } + } } diff --git a/app/adminapi/lists/ProjectCommissionLists.php b/app/adminapi/lists/ProjectCommissionLists.php index c2fc33b41..b890807de 100644 --- a/app/adminapi/lists/ProjectCommissionLists.php +++ b/app/adminapi/lists/ProjectCommissionLists.php @@ -17,9 +17,12 @@ namespace app\adminapi\lists; use app\adminapi\lists\BaseAdminDataLists; use app\common\lists\ListsExcelInterface; +use app\common\model\cost_project\CostApprovedProject; +use app\common\model\cost_project\CostProject; use app\common\model\ProjectCommission; use app\common\lists\ListsSearchInterface; use app\common\model\ProjectCommissionDetail; +use app\common\model\zjzx_finance\ZjzxRefund; /** @@ -57,16 +60,25 @@ class ProjectCommissionLists extends BaseAdminDataLists implements ListsSearchIn */ public function lists(): array { - return ProjectCommission::with(['projectInfo', 'contract']) - ->append(['children']) - ->where($this->searchWhere) + return ProjectCommission::withoutField('create_time,update_time,delete_time')->where($this->searchWhere) ->limit($this->limitOffset, $this->limitLength) ->order(['id' => 'desc']) - ->withAttr('children', function ($value, $data){ - $details = ProjectCommissionDetail::where('project_commission_id', $data['id'])->select(); - return $details; - }) - ->select() + ->select()->each(function($data){ + $project = CostProject::field('project_name,project_num,contract_id')->where('id',$data['project_id'])->findOrEmpty(); + $contract = CostApprovedProject::field('contract_name,project_director,industry_nature')->where('id',$project['contract_id'])->findOrEmpty(); + $data['project_name'] = $project['project_name']; + $data['project_num'] = $project['project_num']; + $data['contract_name'] = $contract['contract_name']; + $data['project_director'] = $contract['project_director']; + $data['industry_nature'] = $contract->industry_nature_text; + //到账金额 + $data['total_refund_amount'] = ZjzxRefund::where('project_id',$data['project_id'])->sum('amount'); + //已支付总额 + $data['total_pay_amount'] = ProjectCommission::where('project_id',$data['project_id'])->sum('bczfze'); + //应提成总金额 + $data['total_commission_amount'] = $data['total_refund_amount'] * ($data['rate'] / 100); + $data['children'] = ProjectCommissionDetail::field('id,engineer,task_name,task_type,professional_type,zj_amount,sk_amount,tc_rate,tc_amount,pay_amount,other_fee')->where('project_commission_id', $data['id'])->select()->toArray(); + }) ->toArray(); } diff --git a/app/adminapi/logic/ProjectCommissionLogic.php b/app/adminapi/logic/ProjectCommissionLogic.php index 3d1bc8017..dd2986392 100644 --- a/app/adminapi/logic/ProjectCommissionLogic.php +++ b/app/adminapi/logic/ProjectCommissionLogic.php @@ -15,9 +15,12 @@ namespace app\adminapi\logic; +use app\common\model\cost_project\CostApprovedProject; +use app\common\model\cost_project\CostProject; use app\common\model\ProjectCommission; use app\common\logic\BaseLogic; use app\common\model\ProjectCommissionDetail; +use app\common\model\zjzx_finance\ZjzxRefund; use think\facade\Db; @@ -45,18 +48,12 @@ class ProjectCommissionLogic extends BaseLogic 'dataid' => generate_sn(ProjectCommission::class,'dataid'), 'num' => generate_sn(ProjectCommission::class,'num'), 'project_id' => $params['project_id'], - 'affcontract' => $params['affcontract'], - 'industry' => $params['industry'], - 'hk' => $params['hk'], 'rate' => $params['rate'], - 'ticheng' => $params['ticheng'], - 'paid_amount' => $params['paid_amount'], 'bczfze' => $params['bczfze'], 'djr' => $params['djr'], - 'apptime' => $params['apptime'], - 'remark' => $params['remark'], + 'apptime' => !empty($params['apptime']) ? strtotime($params['apptime']) : 0, + 'remark' => $params['remark'] ?? '', ]); - foreach ($params['project_commission_detail'] as $item) { $item['project_commission_id'] = $projectCommission->id; ProjectCommissionDetailLogic::add($item); @@ -83,17 +80,13 @@ class ProjectCommissionLogic extends BaseLogic Db::startTrans(); try { ProjectCommission::where('id', $params['id'])->update([ - 'project_id' => $params['project_id'], - 'affcontract' => $params['affcontract'], - 'industry' => $params['industry'], - 'hk' => $params['hk'], - 'rate' => $params['rate'], - 'ticheng' => $params['ticheng'], - 'paid_amount' => $params['paid_amount'], - 'bczfze' => $params['bczfze'], - 'djr' => $params['djr'], - 'apptime' => $params['apptime'], - 'remark' => $params['remark'], + 'project_id' => $params['project_id'], + 'rate' => $params['rate'], + 'bczfze' => $params['bczfze'], + 'djr' => $params['djr'], + 'apptime' => !empty($params['apptime']) ? strtotime($params['apptime']) : 0, + 'remark' => $params['remark'] ?? '', + 'update_time' => time(), ]); Db::commit(); @@ -133,8 +126,21 @@ class ProjectCommissionLogic extends BaseLogic */ public static function detail($params): array { - $data = ProjectCommission::with(['projectInfo', 'contract'])->findOrEmpty($params['id'])->toArray(); - $data['project_commission_detail'] = ProjectCommissionDetail::where('project_commission_id', $params['id'])->select()->toArray(); + $data = ProjectCommission::withoutField('create_time,update_time,delete_time')->findOrEmpty($params['id'])->toArray(); + $project = CostProject::field('project_name,project_num,contract_id')->where('id',$data['project_id'])->findOrEmpty(); + $contract = CostApprovedProject::field('contract_name,project_director,industry_nature')->where('id',$project['contract_id'])->findOrEmpty(); + $data['project_name'] = $project['project_name']; + $data['project_num'] = $project['project_num']; + $data['contract_name'] = $contract['contract_name']; + $data['project_director'] = $contract['project_director']; + $data['industry_nature'] = $contract->industry_nature_text; + //到账金额 + $data['total_refund_amount'] = ZjzxRefund::where('project_id',$data['project_id'])->sum('amount'); + //已支付总额 + $data['total_pay_amount'] = ProjectCommission::where('project_id',$data['project_id'])->sum('bczfze'); + //应提成总金额 + $data['total_commission_amount'] = $data['total_refund_amount'] * ($data['rate'] / 100); + $data['project_commission_detail'] = ProjectCommissionDetail::field('id,engineer,task_name,task_type,professional_type,zj_amount,sk_amount,tc_rate,tc_amount,pay_amount,other_fee,remark')->where('project_commission_id', $data['id'])->select()->toArray(); return $data; } } \ No newline at end of file diff --git a/app/adminapi/validate/ProjectCommissionValidate.php b/app/adminapi/validate/ProjectCommissionValidate.php index e77392704..cab4b9daf 100644 --- a/app/adminapi/validate/ProjectCommissionValidate.php +++ b/app/adminapi/validate/ProjectCommissionValidate.php @@ -1,94 +1,118 @@ -<?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\validate; - - -use app\common\validate\BaseValidate; - - -/** - * ProjectCommission验证器 - * Class ProjectCommissionValidate - * @package app\adminapi\validate - */ -class ProjectCommissionValidate extends BaseValidate -{ - - /** - * 设置校验规则 - * @var string[] - */ - protected $rule = [ - 'id' => 'require', - ]; - - - /** - * 参数描述 - * @var string[] - */ - protected $field = [ - 'id' => 'id', - ]; - - - /** - * @notes 添加场景 - * @return ProjectCommissionValidate - * @author likeadmin - * @date 2024/02/23 09:37 - */ - public function sceneAdd() - { - return $this->remove('id', true); - } - - - /** - * @notes 编辑场景 - * @return ProjectCommissionValidate - * @author likeadmin - * @date 2024/02/23 09:37 - */ - public function sceneEdit() - { - return $this->only(['id']); - } - - - /** - * @notes 删除场景 - * @return ProjectCommissionValidate - * @author likeadmin - * @date 2024/02/23 09:37 - */ - public function sceneDelete() - { - return $this->only(['id']); - } - - - /** - * @notes 详情场景 - * @return ProjectCommissionValidate - * @author likeadmin - * @date 2024/02/23 09:37 - */ - public function sceneDetail() - { - return $this->only(['id']); - } - +<?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\validate; + + +use app\common\model\cost_project\CostProject; +use app\common\model\ProjectCommission; +use app\common\validate\BaseValidate; + + +/** + * ProjectCommission验证器 + * Class ProjectCommissionValidate + * @package app\adminapi\validate + */ +class ProjectCommissionValidate extends BaseValidate +{ + + /** + * 设置校验规则 + * @var string[] + */ + protected $rule = [ + 'id' => 'require|checkData', + 'project_id' => 'require|checkProject', + 'rate' => 'require|float|gt:0', + 'bczfze' => 'require|float|egt:0', + 'djr' => 'require', + 'apptime' => 'require|dateFormat:YH-m-d', + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'project_id' => '项目id', + 'rate' => '提成比例', + 'bczfze' => '本次支付总额', + 'djr' => '登记人', + 'apptime' => '登记日期', + ]; + + + /** + * @notes 添加场景 + * @return ProjectCommissionValidate + * @author likeadmin + * @date 2024/02/23 09:37 + */ + public function sceneAdd() + { + return $this->remove('id', true); + } + + + /** + * @notes 编辑场景 + * @return ProjectCommissionValidate + * @author likeadmin + * @date 2024/02/23 09:37 + */ + public function sceneEdit() + { + return $this->only(['id']); + } + + + /** + * @notes 删除场景 + * @return ProjectCommissionValidate + * @author likeadmin + * @date 2024/02/23 09:37 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return ProjectCommissionValidate + * @author likeadmin + * @date 2024/02/23 09:37 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + + public function checkData($value): bool|string + { + $data = ProjectCommission::where('id',$value)->findOrEmpty(); + return $data->isEmpty() ? '数据不存在' : true; + } + + public function checkProject($value): bool|string + { + $data = CostProject::where('id',$value)->findOrEmpty(); + return $data->isEmpty() ? '项目信息不存在' : true; + } + } \ No newline at end of file diff --git a/app/common/model/ProjectCommission.php b/app/common/model/ProjectCommission.php index e4f51a741..035e0ba79 100644 --- a/app/common/model/ProjectCommission.php +++ b/app/common/model/ProjectCommission.php @@ -40,4 +40,9 @@ class ProjectCommission extends BaseModel { return $this->hasOne(CostApprovedProject::class, 'id','affcontract'); } + + public function getAppTimeAttr($value): string + { + return !empty($value) ? date('Y-m-d',$value) : ''; + } } \ No newline at end of file