|
|
@ -28,6 +28,103 @@ class ContractSignFormService extends BaseApiService |
|
|
parent::__construct(); |
|
|
parent::__construct(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 根据合同签署记录ID获取签署表单配置 |
|
|
|
|
|
* 优先使用contract_sign_id获取该签署关系专属的字段配置 |
|
|
|
|
|
* |
|
|
|
|
|
* @param array $params 请求参数 |
|
|
|
|
|
* - contract_sign_id: 合同签署记录ID (优先) |
|
|
|
|
|
* - contract_id: 合同模板ID (兼容旧版本) |
|
|
|
|
|
* - student_id: 学员ID (必填) |
|
|
|
|
|
* @return array 返回格式化的表单配置数据 |
|
|
|
|
|
*/ |
|
|
|
|
|
public function getStudentContractSignFormBySignId(array $params) |
|
|
|
|
|
{ |
|
|
|
|
|
try { |
|
|
|
|
|
// 验证必要参数 |
|
|
|
|
|
if (empty($params['contract_sign_id']) || empty($params['student_id'])) { |
|
|
|
|
|
throw new \Exception('缺少必要参数:contract_sign_id 和 student_id'); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$contract_sign_id = (int)$params['contract_sign_id']; |
|
|
|
|
|
$student_id = (int)$params['student_id']; |
|
|
|
|
|
|
|
|
|
|
|
Log::info('根据签署记录ID获取合同签署表单', [ |
|
|
|
|
|
'contract_sign_id' => $contract_sign_id, |
|
|
|
|
|
'student_id' => $student_id |
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
|
|
// 1. 从签署记录获取合同ID |
|
|
|
|
|
$sign_record = Db::table('school_contract_sign') |
|
|
|
|
|
->where('id', $contract_sign_id) |
|
|
|
|
|
->where('student_id', $student_id) |
|
|
|
|
|
->find(); |
|
|
|
|
|
|
|
|
|
|
|
if (!$sign_record) { |
|
|
|
|
|
throw new \Exception('合同签署记录不存在'); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$contract_id = $sign_record['contract_id']; |
|
|
|
|
|
|
|
|
|
|
|
// 2. 获取合同模板基本信息 |
|
|
|
|
|
$contract = $this->getContractInfo($contract_id); |
|
|
|
|
|
if (!$contract) { |
|
|
|
|
|
throw new \Exception('合同模板不存在或已删除'); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 3. 获取学员基本信息 |
|
|
|
|
|
$student = $this->getStudentInfo($student_id); |
|
|
|
|
|
if (!$student) { |
|
|
|
|
|
throw new \Exception('学员信息不存在'); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 4. 从document_data_source_config表获取该签署关系专属的字段配置 |
|
|
|
|
|
$form_fields = $this->getSignSpecificFormFields($contract_sign_id, $student); |
|
|
|
|
|
|
|
|
|
|
|
// 5. 组装返回数据 |
|
|
|
|
|
$result = [ |
|
|
|
|
|
'contract_id' => $contract_id, |
|
|
|
|
|
'contract_sign_id' => $contract_sign_id, |
|
|
|
|
|
'contract_name' => $contract['contract_name'], |
|
|
|
|
|
'contract_type' => $contract['contract_type'], |
|
|
|
|
|
'contract_content' => $contract['contract_content'] ?? '', |
|
|
|
|
|
'form_fields' => $form_fields, |
|
|
|
|
|
'student_info' => [ |
|
|
|
|
|
'id' => $student['id'], |
|
|
|
|
|
'name' => $student['name'], |
|
|
|
|
|
'phone' => $student['contact_phone'] ?? '', |
|
|
|
|
|
'user_id' => $student['user_id'] |
|
|
|
|
|
] |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
Log::info('根据签署记录ID获取表单成功', [ |
|
|
|
|
|
'contract_sign_id' => $contract_sign_id, |
|
|
|
|
|
'student_id' => $student_id, |
|
|
|
|
|
'form_fields_count' => count($form_fields) |
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
|
|
return [ |
|
|
|
|
|
'code' => 1, |
|
|
|
|
|
'msg' => '获取成功', |
|
|
|
|
|
'data' => $result |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
} catch (\Exception $e) { |
|
|
|
|
|
Log::error('根据签署记录ID获取表单失败', [ |
|
|
|
|
|
'contract_sign_id' => $params['contract_sign_id'] ?? 0, |
|
|
|
|
|
'student_id' => $params['student_id'] ?? 0, |
|
|
|
|
|
'error' => $e->getMessage(), |
|
|
|
|
|
'trace' => $e->getTraceAsString() |
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
|
|
return [ |
|
|
|
|
|
'code' => 0, |
|
|
|
|
|
'msg' => $e->getMessage(), |
|
|
|
|
|
'data' => [] |
|
|
|
|
|
]; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 获取学员合同签署表单配置 |
|
|
* 获取学员合同签署表单配置 |
|
|
* 该方法为移动端提供合同签署表单的完整配置信息 |
|
|
* 该方法为移动端提供合同签署表单的完整配置信息 |
|
|
@ -598,4 +695,204 @@ class ContractSignFormService extends BaseApiService |
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 获取签署关系专属的表单字段 |
|
|
|
|
|
* @param int $contract_sign_id 合同签署记录ID |
|
|
|
|
|
* @param array $student 学员信息 |
|
|
|
|
|
* @return array |
|
|
|
|
|
*/ |
|
|
|
|
|
private function getSignSpecificFormFields($contract_sign_id, $student) |
|
|
|
|
|
{ |
|
|
|
|
|
try { |
|
|
|
|
|
// 从document_data_source_config表获取该签署关系专属的字段配置 |
|
|
|
|
|
$configs = Db::table('school_document_data_source_config') |
|
|
|
|
|
->where('contract_sign_id', $contract_sign_id) |
|
|
|
|
|
->select() |
|
|
|
|
|
->toArray(); |
|
|
|
|
|
|
|
|
|
|
|
if (empty($configs)) { |
|
|
|
|
|
Log::warning('该签署记录无字段配置', ['contract_sign_id' => $contract_sign_id]); |
|
|
|
|
|
return []; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$form_fields = []; |
|
|
|
|
|
|
|
|
|
|
|
foreach ($configs as $config) { |
|
|
|
|
|
// 基础字段信息 |
|
|
|
|
|
$field = [ |
|
|
|
|
|
'name' => $config['placeholder'] ?? '', |
|
|
|
|
|
'placeholder' => $config['placeholder'] ?? '', |
|
|
|
|
|
'data_type' => $config['data_type'] ?? 'user_input', |
|
|
|
|
|
'field_type' => $config['field_type'] ?? 'text', |
|
|
|
|
|
'is_required' => (int)($config['is_required'] ?? 0), |
|
|
|
|
|
'default_value' => '', |
|
|
|
|
|
'validation_rule' => $config['validation_rule'] ?? '', |
|
|
|
|
|
'sign_party' => $config['sign_party'] ?? '', |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
// 根据数据类型处理默认值 |
|
|
|
|
|
switch ($config['data_type'] ?? 'user_input') { |
|
|
|
|
|
case 'database': |
|
|
|
|
|
// 数据库类型:从相关表获取数据 |
|
|
|
|
|
$field['default_value'] = $this->getDatabaseFieldValueFromConfig($config, $student); |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case 'system': |
|
|
|
|
|
// 系统函数类型:调用系统函数获取值 |
|
|
|
|
|
$field['default_value'] = $this->getSystemFunctionValueFromConfig($config); |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case 'user_input': |
|
|
|
|
|
// 用户输入类型:使用配置的默认值 |
|
|
|
|
|
$field['default_value'] = $config['default_value'] ?? ''; |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case 'signature': |
|
|
|
|
|
// 电子签名类型:无默认值,需要用户手写签名 |
|
|
|
|
|
$field['signature_type'] = 'handwrite'; |
|
|
|
|
|
$field['default_value'] = ''; |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case 'sign_img': |
|
|
|
|
|
// 签名图片类型:无默认值,需要用户上传或选择 |
|
|
|
|
|
$field['sign_image_source'] = 'upload'; |
|
|
|
|
|
$field['default_value'] = ''; |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
default: |
|
|
|
|
|
$field['default_value'] = $config['default_value'] ?? ''; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$form_fields[] = $field; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Log::info('获取签署关系专属字段完成', [ |
|
|
|
|
|
'contract_sign_id' => $contract_sign_id, |
|
|
|
|
|
'fields_count' => count($form_fields) |
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
|
|
return $form_fields; |
|
|
|
|
|
|
|
|
|
|
|
} catch (\Exception $e) { |
|
|
|
|
|
Log::error('获取签署关系专属字段失败', [ |
|
|
|
|
|
'contract_sign_id' => $contract_sign_id, |
|
|
|
|
|
'error' => $e->getMessage(), |
|
|
|
|
|
'trace' => $e->getTraceAsString() |
|
|
|
|
|
]); |
|
|
|
|
|
return []; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 从配置中获取数据库字段值 |
|
|
|
|
|
* @param array $config 字段配置 |
|
|
|
|
|
* @param array $student 学员信息 |
|
|
|
|
|
* @return string |
|
|
|
|
|
*/ |
|
|
|
|
|
private function getDatabaseFieldValueFromConfig($config, $student) |
|
|
|
|
|
{ |
|
|
|
|
|
try { |
|
|
|
|
|
$table_name = $config['table_name'] ?? ''; |
|
|
|
|
|
$field_name = $config['field_name'] ?? ''; |
|
|
|
|
|
|
|
|
|
|
|
if (empty($table_name) || empty($field_name)) { |
|
|
|
|
|
return ''; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$value = ''; |
|
|
|
|
|
|
|
|
|
|
|
switch ($table_name) { |
|
|
|
|
|
case 'school_student': |
|
|
|
|
|
// 学员表:直接从学员信息获取 |
|
|
|
|
|
$value = $student[$field_name] ?? ''; |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case 'school_customer_resources': |
|
|
|
|
|
// 用户表:通过学员的user_id关联查询 |
|
|
|
|
|
if (!empty($student['user_id'])) { |
|
|
|
|
|
$value = Db::table('school_customer_resources') |
|
|
|
|
|
->where('id', $student['user_id']) |
|
|
|
|
|
->value($field_name) ?? ''; |
|
|
|
|
|
} |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case 'school_order_table': |
|
|
|
|
|
// 订单表:查询该学员最新的订单信息 |
|
|
|
|
|
$value = Db::table('school_order_table') |
|
|
|
|
|
->where('student_id', $student['id']) |
|
|
|
|
|
->order('created_at', 'desc') |
|
|
|
|
|
->value($field_name) ?? ''; |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case 'school_personnel': |
|
|
|
|
|
// 员工表:这里可能需要根据业务逻辑确定关联的员工 |
|
|
|
|
|
// 暂时返回空值,具体业务逻辑需要根据实际需求调整 |
|
|
|
|
|
$value = ''; |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
default: |
|
|
|
|
|
Log::warning('不支持的数据库表', [ |
|
|
|
|
|
'table_name' => $table_name, |
|
|
|
|
|
'field_name' => $field_name |
|
|
|
|
|
]); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 对特殊字段进行格式化处理 |
|
|
|
|
|
$value = $this->formatFieldValue($field_name, $value); |
|
|
|
|
|
|
|
|
|
|
|
return (string)$value; |
|
|
|
|
|
|
|
|
|
|
|
} catch (\Exception $e) { |
|
|
|
|
|
Log::error('从配置获取数据库字段值失败', [ |
|
|
|
|
|
'config' => $config, |
|
|
|
|
|
'student_id' => $student['id'], |
|
|
|
|
|
'error' => $e->getMessage() |
|
|
|
|
|
]); |
|
|
|
|
|
return ''; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 从配置中获取系统函数值 |
|
|
|
|
|
* @param array $config 字段配置 |
|
|
|
|
|
* @return string |
|
|
|
|
|
*/ |
|
|
|
|
|
private function getSystemFunctionValueFromConfig($config) |
|
|
|
|
|
{ |
|
|
|
|
|
try { |
|
|
|
|
|
$system_function = $config['system_function'] ?? ''; |
|
|
|
|
|
|
|
|
|
|
|
if (empty($system_function)) { |
|
|
|
|
|
return ''; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 检查函数是否存在 |
|
|
|
|
|
if (!function_exists($system_function)) { |
|
|
|
|
|
Log::warning('系统函数不存在', [ |
|
|
|
|
|
'function_name' => $system_function |
|
|
|
|
|
]); |
|
|
|
|
|
return ''; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 调用系统函数 |
|
|
|
|
|
$value = call_user_func($system_function); |
|
|
|
|
|
|
|
|
|
|
|
Log::info('系统函数调用成功', [ |
|
|
|
|
|
'function_name' => $system_function, |
|
|
|
|
|
'result' => $value |
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
|
|
return (string)$value; |
|
|
|
|
|
|
|
|
|
|
|
} catch (\Exception $e) { |
|
|
|
|
|
Log::error('从配置获取系统函数值失败', [ |
|
|
|
|
|
'config' => $config, |
|
|
|
|
|
'error' => $e->getMessage() |
|
|
|
|
|
]); |
|
|
|
|
|
return ''; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |