327 lines
12 KiB
PHP
327 lines
12 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\logic\cost_project;
|
||
|
||
|
||
use app\common\logic\BaseLogic;
|
||
use app\common\model\ApprovalIssuanceAchievementDocuments;
|
||
use app\common\model\auth\Admin;
|
||
use app\common\model\cost_project\CostProject;
|
||
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\marketing\MarketingCustom;
|
||
use app\common\model\project_process_management\ApplyWithSeal;
|
||
use app\common\model\project_process_management\JianliProjectProgressReport;
|
||
use app\common\model\project_process_management\ProjectChangeVisa;
|
||
use app\common\model\project_process_management\ProjectProgressPayment;
|
||
use app\common\model\project_process_management\ProjectRectification;
|
||
use app\common\model\project_process_management\ProjectSurveySignature;
|
||
use app\common\model\ProjectCommission;
|
||
use app\common\model\task\TaskAllocation;
|
||
use app\common\model\task\TaskType;
|
||
use app\common\model\TaskHandlingThreeLevelReview;
|
||
use think\facade\Db;
|
||
|
||
|
||
/**
|
||
* 造价项目台账逻辑
|
||
* Class CostProjectLogic
|
||
* @package app\adminapi\logic\cost_project
|
||
*/
|
||
class CostProjectLogic extends BaseLogic
|
||
{
|
||
|
||
|
||
/**
|
||
* @notes 添加造价项目台账
|
||
* @param array $params
|
||
* @return bool
|
||
* @author likeadmin
|
||
* @date 2024/02/21 09:23
|
||
*/
|
||
public static function add(array $params): bool
|
||
{
|
||
Db::startTrans();
|
||
try {
|
||
CostProject::create([
|
||
'project_num' => generate_sn(CostProject::class, 'project_num'),
|
||
'project_name' => $params['project_name'],
|
||
'contract_id' => $params['contract_id'],
|
||
'types' => $params['types'],
|
||
'industry' => $params['industry'],
|
||
'province' => $params['province'],
|
||
'city' => $params['city'],
|
||
'address' => $params['address'],
|
||
'starting' => !empty($params['starting']) ? strtotime($params['starting']) : 0,
|
||
'endtime' => !empty($params['endtime']) ? strtotime($params['endtime']) : 0,
|
||
'jhgq' => $params['jhgq'],
|
||
'depar' => $params['depar'],
|
||
'principal' => $params['principal'],
|
||
'person' => $params['person'] ? json_encode($params['person']) : null,
|
||
'invest' => $params['invest'],
|
||
'budget' => $params['budget'],
|
||
'cost' => $params['cost'],
|
||
'approval' => $params['approval'],
|
||
'aunit' => $params['aunit'],
|
||
'js_unit' => $params['js_unit'],
|
||
'Acontact' => $params['Acontact'],
|
||
'acontactnum' => $params['acontactnum'],
|
||
'date' => !empty($params['date']) ? strtotime($params['date']) : 0,
|
||
'generalize' => $params['generalize'],
|
||
'note' => $params['note'],
|
||
'remark' => $params['remark'],
|
||
'annex' => $params['annex'] ? json_encode($params['annex']) : null,
|
||
]);
|
||
if ($params['contract'] > 0) {
|
||
MarketingContract::where('id', $params['contract'])->update(['status' => 1]);
|
||
}
|
||
Db::commit();
|
||
return true;
|
||
} catch (\Exception $e) {
|
||
Db::rollback();
|
||
self::setError($e->getMessage());
|
||
return false;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* @notes 编辑造价项目台账
|
||
* @param array $params
|
||
* @return bool
|
||
* @author likeadmin
|
||
* @date 2024/02/21 09:23
|
||
*/
|
||
public static function edit(array $params): bool
|
||
{
|
||
Db::startTrans();
|
||
try {
|
||
CostProject::where('id', $params['id'])->update([
|
||
'project_num' => generate_sn(CostProject::class, 'project_num'),
|
||
'project_name' => $params['project_name'],
|
||
'contract_id' => $params['contract_id'],
|
||
'types' => $params['types'],
|
||
'industry' => $params['industry'],
|
||
'province' => $params['province'],
|
||
'city' => $params['city'],
|
||
'address' => $params['address'],
|
||
'starting' => !empty($params['starting']) ? strtotime($params['starting']) : 0,
|
||
'endtime' => !empty($params['endtime']) ? strtotime($params['endtime']) : 0,
|
||
'jhgq' => $params['jhgq'],
|
||
'depar' => $params['depar'],
|
||
'principal' => $params['principal'],
|
||
'person' => $params['person'] ? json_encode($params['person']) : null,
|
||
'invest' => $params['invest'],
|
||
'budget' => $params['budget'],
|
||
'cost' => $params['cost'],
|
||
'approval' => $params['approval'],
|
||
'aunit' => $params['aunit'],
|
||
'js_unit' => $params['js_unit'],
|
||
'Acontact' => $params['Acontact'],
|
||
'acontactnum' => $params['acontactnum'],
|
||
'date' => !empty($params['date']) ? strtotime($params['date']) : 0,
|
||
'generalize' => $params['generalize'],
|
||
'note' => $params['note'],
|
||
'remark' => $params['remark'],
|
||
'annex' => $params['annex'] ? json_encode($params['annex']) : null,
|
||
]);
|
||
Db::commit();
|
||
return true;
|
||
} catch (\Exception $e) {
|
||
Db::rollback();
|
||
self::setError($e->getMessage());
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @notes 获取造价项目台账详情
|
||
* @param $params
|
||
* @return array
|
||
* @author likeadmin
|
||
* @date 2024/02/21 09:23
|
||
*/
|
||
public static function detail($params): array
|
||
{
|
||
$res = CostProject::withoutField('update_time,delete_time')->findOrEmpty($params['id']);
|
||
$contract = MarketingContract::field('contract_name')->where('id', $res['contract_id'])->findOrEmpty();
|
||
$province = GeoProvince::field('province_name')->where('province_code', $res['province'])->findOrEmpty();
|
||
$city = GeoCity::field('city_name')->where('city_code', $res['city'])->findOrEmpty();
|
||
$dept = Dept::field('name')->where('id', $res['depar'])->findOrEmpty();
|
||
$admin = Admin::field('name')->where('id', $res['principal'])->findOrEmpty();
|
||
$custom = MarketingCustom::field('name')->where('id', $res['aunit'])->findOrEmpty();
|
||
$res['contract_name'] = $contract?->contract_name;
|
||
$res['types_text'] = $res->types_text;
|
||
$res['industry_text'] = $res->industry_text;
|
||
$res['province_name'] = $province?->province_name;
|
||
$res['city_name'] = $city?->city_name;
|
||
$res['dept_name'] = $dept?->name;
|
||
$res['principal_name'] = $admin?->name;
|
||
$res['person_text'] = $res->person_text;
|
||
$res['aunit_name'] = $custom?->name;
|
||
return $res->toArray();
|
||
}
|
||
|
||
public static function datas($name)
|
||
{
|
||
$datas = CostProject::where(function ($query) use ($name) {
|
||
if ($name) {
|
||
$query->where('project_name', 'like', '%' . $name . '%');
|
||
}
|
||
})
|
||
->field(['id', 'project_num', 'project_name'])
|
||
->order(['id' => 'desc'])
|
||
->select()
|
||
->toArray();
|
||
foreach ($datas as &$item) {
|
||
$item['projectinfo'] = 'ID:' . $item['id'] . ' / 名称:' . $item['project_name'];
|
||
}
|
||
return $datas;
|
||
}
|
||
|
||
// public static function createProject($data)
|
||
// {
|
||
// Db::startTrans();
|
||
// try {
|
||
// $res = CostProject::create([
|
||
// 'project_num' => generate_sn(CostProject::class, 'project_num'),
|
||
// 'project_name' => $data['project_name'],
|
||
// 'contract_id' => $data['contract_id'],
|
||
// 'types' => $data['types'],
|
||
// 'industry' => $data['industry'],
|
||
// 'province' => $data['province'],
|
||
// 'city' => $data['city'],
|
||
// 'address' => $data['address'],
|
||
// 'starting' => $data['starting'],
|
||
// 'endtime' => $data['endtime'],
|
||
// 'jhgq' => $data['jhgq'],
|
||
// 'depar' => $data['depar'],
|
||
// 'principal' => $data['principal'],
|
||
// 'invest' => $data['invest'],
|
||
// 'budget' => $data['budget'],
|
||
// 'cost' => $data['cost'],
|
||
// 'approval' => $data['approval'],
|
||
// 'aunit' => $data['aunit'],
|
||
// 'Acontact' => $data['Acontact'],
|
||
// 'acontactnum' => $data['acontactnum'],
|
||
// 'date' => $data['date'],
|
||
// 'generalize' => $data['generalize'],
|
||
// 'note' => $data['note'],
|
||
// 'remark' => $data['remark'],
|
||
// 'annex' => $data['annex']
|
||
// ]);
|
||
// if ($data['person_id']) {
|
||
// $arr = [];
|
||
// $person_id = explode(',', $data['person_id']);
|
||
// (new CostProjectPerson)->delete($person_id);
|
||
// foreach ($person_id as $k => $v) {
|
||
// $arr[] = ['cost_project_id' => $data->id, $v];
|
||
// }
|
||
// $arr ?? (new CostProjectPerson)->saveAll($arr);
|
||
// }
|
||
// return $res;
|
||
// } catch (\Exception $e) {
|
||
// return false;
|
||
// }
|
||
// }
|
||
|
||
/**
|
||
* @notes 删除造价项目台账
|
||
* @param array $params
|
||
* @return bool
|
||
* @author likeadmin
|
||
* @date 2024/02/21 09:23
|
||
*/
|
||
public static function delete(array $params): bool
|
||
{
|
||
//任务类别
|
||
$task_type = TaskType::where('cost_project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$task_type->isEmpty()) {
|
||
self::setError('此数据关联了任务类别信息,须删除任务类别信息');
|
||
return false;
|
||
}
|
||
//任务分配
|
||
$task_allocation = TaskAllocation::where('cost_project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$task_allocation->isEmpty()) {
|
||
self::setError('此数据关联了任务分配信息,须删除任务分配信息');
|
||
return false;
|
||
}
|
||
//任务办理与三级审核
|
||
$task_handling_three_level_review = TaskHandlingThreeLevelReview::where('project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$task_handling_three_level_review->isEmpty()) {
|
||
self::setError('此数据关联了任务办理与三级审核信息,须删除任务办理与三级审核信息');
|
||
return false;
|
||
}
|
||
//成果文件审定、签发列表
|
||
$approval_issuance_achievement_documents = ApprovalIssuanceAchievementDocuments::where('project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$approval_issuance_achievement_documents->isEmpty()) {
|
||
self::setError('此数据关联了成果文件审定签发信息,须删除成果文件审定签发信息');
|
||
return false;
|
||
}
|
||
//资料接收
|
||
$data_reception = DataReception::where('project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$data_reception->isEmpty()) {
|
||
self::setError('此数据关联了资料接收信息,须删除资料接收信息');
|
||
return false;
|
||
}
|
||
//项目提成
|
||
$project_commission = ProjectCommission::where('project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$project_commission->isEmpty()) {
|
||
self::setError('此数据关联了项目提成信息,须删除项目提成信息');
|
||
return false;
|
||
}
|
||
//项目变更签证
|
||
$project_change_visa = ProjectChangeVisa::where('project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$project_change_visa->isEmpty()) {
|
||
self::setError('此数据关联了项目变更签证信息,须删除项目变更签证信息');
|
||
return false;
|
||
}
|
||
//项目踏勘会签
|
||
$project_survey_signature = ProjectSurveySignature::where('project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$project_survey_signature->isEmpty()) {
|
||
self::setError('此数据关联了项目踏勘会签信息,须删除项目踏勘会签信息');
|
||
return false;
|
||
}
|
||
//项目整改
|
||
$project_rectification = ProjectRectification::where('project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$project_rectification->isEmpty()) {
|
||
self::setError('此数据关联了项目整改信息,须删除项目整改信息');
|
||
return false;
|
||
}
|
||
//项目进度汇报
|
||
$jianli_project_progress_report = JianliProjectProgressReport::where('project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$jianli_project_progress_report->isEmpty()) {
|
||
self::setError('此数据关联了项目进度汇报信息,须删除项目进度汇报信息');
|
||
return false;
|
||
}
|
||
//项目进度款
|
||
$project_progress_payment = ProjectProgressPayment::where('project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$project_progress_payment->isEmpty()) {
|
||
self::setError('此数据关联了项目进度款信息,须删除项目进度款信息');
|
||
return false;
|
||
}
|
||
//用章申请
|
||
$apply_with_seal = ApplyWithSeal::where('project_id', 'in', $params['id'])->findOrEmpty();
|
||
if (!$apply_with_seal->isEmpty()) {
|
||
self::setError('此数据关联了用章申请信息,须删除用章申请信息');
|
||
return false;
|
||
}
|
||
return CostProject::destroy($params['id']);
|
||
}
|
||
}
|