|
|
@ -4,6 +4,7 @@ declare(strict_types=1); |
|
|
namespace app\service\school_approval; |
|
|
namespace app\service\school_approval; |
|
|
|
|
|
|
|
|
use app\model\personnel\Personnel; |
|
|
use app\model\personnel\Personnel; |
|
|
|
|
|
use app\model\personnel\PersonnelInfo; |
|
|
use app\model\school_approval\SchoolApprovalConfig; |
|
|
use app\model\school_approval\SchoolApprovalConfig; |
|
|
use app\model\school_approval\SchoolApprovalConfigNode; |
|
|
use app\model\school_approval\SchoolApprovalConfigNode; |
|
|
use app\model\school_approval\SchoolApprovalParticipants; |
|
|
use app\model\school_approval\SchoolApprovalParticipants; |
|
|
@ -33,8 +34,8 @@ class SchoolApprovalProcessService |
|
|
|
|
|
|
|
|
$list = (new SchoolApprovalProcess()) |
|
|
$list = (new SchoolApprovalProcess()) |
|
|
->alias("a") |
|
|
->alias("a") |
|
|
->join(['school_personnel' => 'b'],'a.applicant_id = b.id','left') |
|
|
->join(['school_personnel' => 'b'], 'a.applicant_id = b.id', 'left') |
|
|
->join(['school_personnel' => 'c'],'a.current_approver_id = c.id','left') |
|
|
->join(['school_personnel' => 'c'], 'a.current_approver_id = c.id', 'left') |
|
|
->where($where) |
|
|
->where($where) |
|
|
->field($field) |
|
|
->field($field) |
|
|
->order($order) |
|
|
->order($order) |
|
|
@ -59,8 +60,8 @@ class SchoolApprovalProcessService |
|
|
{ |
|
|
{ |
|
|
$info = (new SchoolApprovalProcess()) |
|
|
$info = (new SchoolApprovalProcess()) |
|
|
->alias("a") |
|
|
->alias("a") |
|
|
->join(['school_personnel' => 'b'],'a.applicant_id = b.id','left') |
|
|
->join(['school_personnel' => 'b'], 'a.applicant_id = b.id', 'left') |
|
|
->join(['school_personnel' => 'c'],'a.current_approver_id = c.id','left') |
|
|
->join(['school_personnel' => 'c'], 'a.current_approver_id = c.id', 'left') |
|
|
->with(['participants']) |
|
|
->with(['participants']) |
|
|
->where(['a.id' => $id]) |
|
|
->where(['a.id' => $id]) |
|
|
->field('a.*,b.name as applicant_name,c.name as current_approver_name') |
|
|
->field('a.*,b.name as applicant_name,c.name as current_approver_name') |
|
|
@ -96,15 +97,15 @@ class SchoolApprovalProcessService |
|
|
|
|
|
|
|
|
// 创建审批流程 |
|
|
// 创建审批流程 |
|
|
$process = [ |
|
|
$process = [ |
|
|
'process_name' => $data['process_name'], |
|
|
'process_name' => $data['process_name'], |
|
|
'applicant_id' => $data['applicant_id'], |
|
|
'applicant_id' => $data['applicant_id'], |
|
|
'application_time' => date("Y-m-d H:i:s"), |
|
|
'application_time' => date("Y-m-d H:i:s"), |
|
|
'current_approver_id' => 0, // 初始时为0,后面会更新 |
|
|
'current_approver_id' => 0, // 初始时为0,后面会更新 |
|
|
'approval_status' => SchoolApprovalProcess::STATUS_PENDING, |
|
|
'approval_status' => SchoolApprovalProcess::STATUS_PENDING, |
|
|
'remarks' => $data['remarks'] ?? '', |
|
|
'remarks' => $data['remarks'] ?? '', |
|
|
'business_type' => $data['business_type'] ?? '', |
|
|
'business_type' => $data['business_type'] ?? '', |
|
|
'business_id' => $data['business_id'] ?? 0, |
|
|
'business_id' => $data['business_id'] ?? 0, |
|
|
'business_data' => isset($data['business_data']) ? json_encode($data['business_data']) : '' |
|
|
'business_data' => isset($data['business_data']) ? json_encode($data['business_data']) : '' |
|
|
]; |
|
|
]; |
|
|
|
|
|
|
|
|
$process_id = (new SchoolApprovalProcess())->insertGetId($process); |
|
|
$process_id = (new SchoolApprovalProcess())->insertGetId($process); |
|
|
@ -113,17 +114,17 @@ class SchoolApprovalProcessService |
|
|
$participants = []; |
|
|
$participants = []; |
|
|
foreach ($config_info['nodes'] as $sequence => $node) { |
|
|
foreach ($config_info['nodes'] as $sequence => $node) { |
|
|
$approver_ids = explode(',', $node['approver_ids']); |
|
|
$approver_ids = explode(',', $node['approver_ids']); |
|
|
|
|
|
|
|
|
// 动态获取审批人 |
|
|
// 动态获取审批人 |
|
|
$actual_approvers = $this->getDynamicApprovers($node['approver_type'], $approver_ids); |
|
|
$actual_approvers = $this->getDynamicApprovers($node['approver_type'], $approver_ids); |
|
|
|
|
|
|
|
|
foreach ($actual_approvers as $approver_id) { |
|
|
foreach ($actual_approvers as $approver_id) { |
|
|
$participants[] = [ |
|
|
$participants[] = [ |
|
|
'process_id' => $process_id, |
|
|
'process_id' => $process_id, |
|
|
'participant_id' => $approver_id, |
|
|
'participant_id' => $approver_id, |
|
|
'sequence' => $node['sequence'], |
|
|
'sequence' => $node['sequence'], |
|
|
'status' => SchoolApprovalParticipants::STATUS_PENDING, |
|
|
'status' => SchoolApprovalParticipants::STATUS_PENDING, |
|
|
'sign_type' => $node['sign_type'] |
|
|
'sign_type' => $node['sign_type'] |
|
|
]; |
|
|
]; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -236,7 +237,7 @@ class SchoolApprovalProcessService |
|
|
(new SchoolApprovalProcess())->where(['id' => $process_id]) |
|
|
(new SchoolApprovalProcess())->where(['id' => $process_id]) |
|
|
->update([ |
|
|
->update([ |
|
|
'approval_status' => SchoolApprovalProcess::STATUS_REJECTED, |
|
|
'approval_status' => SchoolApprovalProcess::STATUS_REJECTED, |
|
|
'approval_time' => time(), |
|
|
'approval_time' => date('Y-m-d H:i:s'), |
|
|
'remarks' => $remarks |
|
|
'remarks' => $remarks |
|
|
]); |
|
|
]); |
|
|
|
|
|
|
|
|
@ -271,7 +272,7 @@ class SchoolApprovalProcessService |
|
|
(new SchoolApprovalProcess())->where(['id' => $process_id]) |
|
|
(new SchoolApprovalProcess())->where(['id' => $process_id]) |
|
|
->update([ |
|
|
->update([ |
|
|
'approval_status' => SchoolApprovalProcess::STATUS_APPROVED, |
|
|
'approval_status' => SchoolApprovalProcess::STATUS_APPROVED, |
|
|
'approval_time' => time() |
|
|
'approval_time' => date('Y-m-d H:i:s') |
|
|
]); |
|
|
]); |
|
|
|
|
|
|
|
|
// 处理业务逻辑 |
|
|
// 处理业务逻辑 |
|
|
@ -327,7 +328,7 @@ class SchoolApprovalProcessService |
|
|
(new SchoolApprovalProcess())->where(['id' => $process_id]) |
|
|
(new SchoolApprovalProcess())->where(['id' => $process_id]) |
|
|
->update([ |
|
|
->update([ |
|
|
'approval_status' => SchoolApprovalProcess::STATUS_REJECTED, |
|
|
'approval_status' => SchoolApprovalProcess::STATUS_REJECTED, |
|
|
'approval_time' => time(), |
|
|
'approval_time' => date('Y-m-d H:i:s'), |
|
|
'remarks' => '申请人撤销' |
|
|
'remarks' => '申请人撤销' |
|
|
]); |
|
|
]); |
|
|
|
|
|
|
|
|
@ -391,18 +392,39 @@ class SchoolApprovalProcessService |
|
|
try { |
|
|
try { |
|
|
// 调用API人员服务创建正式人员记录(避免info字段问题) |
|
|
// 调用API人员服务创建正式人员记录(避免info字段问题) |
|
|
$personnelService = new \app\service\api\apiService\PersonnelService(); |
|
|
$personnelService = new \app\service\api\apiService\PersonnelService(); |
|
|
|
|
|
|
|
|
// 准备人员数据 |
|
|
// 准备人员数据 |
|
|
$createData = $personnelData; |
|
|
$createData = $personnelData; |
|
|
$createData['status'] = 2; // 设置为已审核状态 |
|
|
$createData['status'] = 2; // 设置为已审核状态 |
|
|
|
|
|
|
|
|
// 创建人员记录 |
|
|
$insert_status = (new Personnel())->where(['phone' => $createData['phone']])->order('id', 'desc')->find(); |
|
|
$result = $personnelService->addPersonnel($createData); |
|
|
if ($insert_status) { |
|
|
if (!$result['code']) { |
|
|
$personnelId = $insert_status->id; |
|
|
throw new \Exception($result['msg']); |
|
|
//获取Personnel模型中所有字段 |
|
|
|
|
|
$fields = (new Personnel())->getFields(); |
|
|
|
|
|
// 过滤只保留字符串和整数类型的键 |
|
|
|
|
|
$fields = array_filter($fields, function($field) { |
|
|
|
|
|
return is_string($field) || is_int($field); |
|
|
|
|
|
}); |
|
|
|
|
|
$PersonnelData = array_intersect_key($createData, array_flip($fields)); |
|
|
|
|
|
(new Personnel())->where(['id' => $insert_status->id])->update($PersonnelData); |
|
|
|
|
|
$fields = (new PersonnelInfo())->getFields(); |
|
|
|
|
|
// 过滤只保留字符串和整数类型的键 |
|
|
|
|
|
$fields = array_filter($fields, function($field) { |
|
|
|
|
|
return is_string($field) || is_int($field); |
|
|
|
|
|
}); |
|
|
|
|
|
$PersonnelInfoData = array_intersect_key($createData, array_flip($fields)); |
|
|
|
|
|
(new PersonnelInfo())->where(['person_id' => $insert_status->id])->update($PersonnelInfoData); |
|
|
|
|
|
} else { |
|
|
|
|
|
// 创建人员记录 |
|
|
|
|
|
$result = $personnelService->addPersonnel($createData); |
|
|
|
|
|
if (!$result['code']) { |
|
|
|
|
|
throw new \Exception($result['msg']); |
|
|
|
|
|
} |
|
|
|
|
|
$personnelId = $result['data']['personnel_id']; |
|
|
} |
|
|
} |
|
|
$personnelId = $result['data']['personnel_id']; |
|
|
|
|
|
|
|
|
|
|
|
// 更新流程的business_id为实际创建的人员ID |
|
|
// 更新流程的business_id为实际创建的人员ID |
|
|
(new SchoolApprovalProcess())->where(['id' => $process['id']]) |
|
|
(new SchoolApprovalProcess())->where(['id' => $process['id']]) |
|
|
->update(['business_id' => $personnelId]); |
|
|
->update(['business_id' => $personnelId]); |
|
|
@ -555,10 +577,10 @@ class SchoolApprovalProcessService |
|
|
*/ |
|
|
*/ |
|
|
private function recordApprovalHistory(int $process_id, int $participant_id, int $sequence, string $status, string $remarks): void |
|
|
private function recordApprovalHistory(int $process_id, int $participant_id, int $sequence, string $status, string $remarks): void |
|
|
{ |
|
|
{ |
|
|
$action = ($status == SchoolApprovalParticipants::STATUS_APPROVED) ? |
|
|
$action = ($status == SchoolApprovalParticipants::STATUS_APPROVED) ? |
|
|
SchoolApprovalHistory::ACTION_APPROVE : SchoolApprovalHistory::ACTION_REJECT; |
|
|
SchoolApprovalHistory::ACTION_APPROVE : SchoolApprovalHistory::ACTION_REJECT; |
|
|
|
|
|
|
|
|
$history_status = ($status == SchoolApprovalParticipants::STATUS_APPROVED) ? |
|
|
$history_status = ($status == SchoolApprovalParticipants::STATUS_APPROVED) ? |
|
|
SchoolApprovalHistory::STATUS_APPROVED : SchoolApprovalHistory::STATUS_REJECTED; |
|
|
SchoolApprovalHistory::STATUS_APPROVED : SchoolApprovalHistory::STATUS_REJECTED; |
|
|
|
|
|
|
|
|
(new SchoolApprovalHistory())->insert([ |
|
|
(new SchoolApprovalHistory())->insert([ |
|
|
@ -615,23 +637,23 @@ class SchoolApprovalProcessService |
|
|
// 根据通知类型设置消息内容 |
|
|
// 根据通知类型设置消息内容 |
|
|
$title = ''; |
|
|
$title = ''; |
|
|
$content = ''; |
|
|
$content = ''; |
|
|
|
|
|
|
|
|
switch ($type) { |
|
|
switch ($type) { |
|
|
case 'pending': |
|
|
case 'pending': |
|
|
$title = '待审批通知'; |
|
|
$title = '待审批通知'; |
|
|
$content = "您有一个审批流程需要处理:{$process['process_name']},申请人:{$process['applicant_name']}"; |
|
|
$content = "您有一个审批流程需要处理:{$process['process_name']},申请人:{$process['applicant_name']}"; |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
case 'approved': |
|
|
case 'approved': |
|
|
$title = '审批通过通知'; |
|
|
$title = '审批通过通知'; |
|
|
$content = "您的审批申请已通过:{$process['process_name']}"; |
|
|
$content = "您的审批申请已通过:{$process['process_name']}"; |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
case 'rejected': |
|
|
case 'rejected': |
|
|
$title = '审批拒绝通知'; |
|
|
$title = '审批拒绝通知'; |
|
|
$content = "您的审批申请已被拒绝:{$process['process_name']}"; |
|
|
$content = "您的审批申请已被拒绝:{$process['process_name']}"; |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
default: |
|
|
default: |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|