This commit is contained in:
weiz 2024-04-06 10:12:56 +08:00
parent 6ea7d4469b
commit 80202c29f6
3 changed files with 365 additions and 366 deletions

View File

@ -43,7 +43,7 @@
{ {
return [ return [
'=' => ['business_nature', 'industry_nature', 'fund_sources', 'const_area', 'status'], '=' => ['business_nature', 'industry_nature', 'fund_sources', 'const_area', 'status'],
'%like%' => ['contract_name', 'contract_num', 'part_a', 'part_b'], '%like%' => ['contract_name', 'contract_code', 'part_a', 'part_b'],
]; ];
} }

View File

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

View File

@ -11,61 +11,68 @@
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
// | author: likeadminTeam // | author: likeadminTeam
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
namespace app\common\model\cost_project;
use app\common\model\auth\Admin;
use app\common\model\BaseModel;
use app\common\model\dict\DictData;
use think\model\concern\SoftDelete;
/**
* 造价项目台账模型
* Class CostProject
* @package app\common\model\cost_project
*/
class CostProject extends BaseModel
{
use SoftDelete;
protected $name = 'cost_project';
protected $deleteTime = 'delete_time';
public function contract()
{
return $this->hasOne(CostApprovedProject::class, 'id','contract_id');
}
public function CostProjectContract()
{
return $this->hasOne(CostProjectContract::class, 'id','contract_id');
}
public function getTypesTextAttr($value,$data){ namespace app\common\model\cost_project;
$dict = DictData::where('type_value','consultation_type')->column('name','value');
return !empty($data['types']) ? $dict[$data['types']] : '';
}
public function getPersonAttr($value){
return !empty($value) ? json_decode($value,true) : '';
}
public function getStartingAttr($value){ use app\common\model\auth\Admin;
return !empty($value) ? date('Y-m-d',$value) : ''; use app\common\model\BaseModel;
} use app\common\model\dict\DictData;
use app\common\model\marketing\MarketingContract;
use think\model\concern\SoftDelete;
public function getEndtimeAttr($value){
return !empty($value) ? date('Y-m-d',$value) : '';
}
public function getDateAttr($value){ /**
return !empty($value) ? date('Y-m-d',$value) : ''; * 造价项目台账模型
} * Class CostProject
* @package app\common\model\cost_project
public function getPersonTextAttr($value,$data): string */
class CostProject extends BaseModel
{ {
$person = Admin::where('id','in',json_decode($data['person'],true))->column('name'); use SoftDelete;
return !empty($person) ? implode(',',$person) : '';
} protected $name = 'cost_project';
} protected $deleteTime = 'delete_time';
public function contract()
{
return $this->hasOne(MarketingContract::class, 'id', 'contract_id');
}
public function CostProjectContract()
{
return $this->hasOne(MarketingContract::class, 'id', 'contract_id');
}
public function getTypesTextAttr($value, $data)
{
$dict = DictData::where('type_value', 'consultation_type')->column('name', 'value');
return !empty($data['types']) ? $dict[$data['types']] : '';
}
public function getPersonAttr($value)
{
return !empty($value) ? json_decode($value, true) : '';
}
public function getStartingAttr($value)
{
return !empty($value) ? date('Y-m-d', $value) : '';
}
public function getEndtimeAttr($value)
{
return !empty($value) ? date('Y-m-d', $value) : '';
}
public function getDateAttr($value)
{
return !empty($value) ? date('Y-m-d', $value) : '';
}
public function getPersonTextAttr($value, $data): string
{
$person = Admin::where('id', 'in', json_decode($data['person'], true))->column('name');
return !empty($person) ? implode(',', $person) : '';
}
}