|
|
|
@ -15,6 +15,8 @@ use app\Request; |
|
|
|
use app\service\api\apiService\ContractService; |
|
|
|
use app\service\api\apiService\ContractSignFormService; |
|
|
|
use core\base\BaseApiService; |
|
|
|
use think\facade\Db; |
|
|
|
use think\facade\Log; |
|
|
|
|
|
|
|
/** |
|
|
|
* 合同管理控制器 |
|
|
|
@ -426,8 +428,107 @@ class Contract extends BaseApiService |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 确认生成合同文档 |
|
|
|
* @param Request $request |
|
|
|
* @return mixed |
|
|
|
*/ |
|
|
|
public function confirmGenerateContract(Request $request) |
|
|
|
{ |
|
|
|
$contract_sign_id = $request->param('contract_sign_id', 0); |
|
|
|
|
|
|
|
if (empty($contract_sign_id)) { |
|
|
|
return fail('合同签署记录ID不能为空'); |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
// 获取合同签署记录信息 |
|
|
|
$contractSign = Db::table('school_contract_sign') |
|
|
|
->where('id', $contract_sign_id) |
|
|
|
->where('deleted_at', 0) |
|
|
|
->find(); |
|
|
|
|
|
|
|
if (!$contractSign) { |
|
|
|
return fail('合同签署记录不存在'); |
|
|
|
} |
|
|
|
|
|
|
|
// 检查状态是否允许生成文档 |
|
|
|
if ($contractSign['status'] == 3) { |
|
|
|
return fail('合同文档已生成,无需重复生成'); |
|
|
|
} |
|
|
|
|
|
|
|
// 获取合同模板信息 |
|
|
|
$contract = Db::table('school_contract') |
|
|
|
->where('id', $contractSign['contract_id']) |
|
|
|
->where('deleted_at', 0) |
|
|
|
->find(); |
|
|
|
|
|
|
|
if (!$contract) { |
|
|
|
return fail('合同模板不存在'); |
|
|
|
} |
|
|
|
|
|
|
|
// 使用ContractSignFormService的公共方法获取完整的表单数据(包括处理后的default_value) |
|
|
|
$contractSignFormService = new ContractSignFormService(); |
|
|
|
$signFormData = $contractSignFormService->getStudentContractSignFormBySignId($contract_sign_id, $contractSign['student_id']); |
|
|
|
|
|
|
|
if (empty($signFormData) || empty($signFormData['form_fields'])) { |
|
|
|
return fail('未找到合同字段配置数据'); |
|
|
|
} |
|
|
|
|
|
|
|
// 准备填充数据 - 使用处理后的default_value |
|
|
|
$fillData = []; |
|
|
|
foreach ($signFormData['form_fields'] as $field) { |
|
|
|
$placeholder = $field['placeholder']; |
|
|
|
$defaultValue = $field['default_value'] ?? ''; |
|
|
|
$fillData[$placeholder] = $defaultValue; |
|
|
|
} |
|
|
|
|
|
|
|
// 调用DocumentTemplateService生成Word文档 |
|
|
|
$documentService = new \app\service\admin\document\DocumentTemplateService(); |
|
|
|
$generateData = [ |
|
|
|
'template_id' => $contractSign['contract_id'], |
|
|
|
'fill_data' => $fillData, |
|
|
|
'output_filename' => $contract['contract_name'] . '_' . $contractSign['student_id'] . '_' . date('YmdHis') . '.docx' |
|
|
|
]; |
|
|
|
|
|
|
|
$result = $documentService->generateDocument($generateData); |
|
|
|
|
|
|
|
// 更新school_contract_sign表的sign_file字段和status字段 |
|
|
|
$updateResult = Db::table('school_contract_sign') |
|
|
|
->where('id', $contract_sign_id) |
|
|
|
->update([ |
|
|
|
'sign_file' => $result['file_path'], |
|
|
|
'status' => 3, |
|
|
|
'updated_at' => time() |
|
|
|
]); |
|
|
|
|
|
|
|
if (!$updateResult) { |
|
|
|
return fail('更新合同签署记录失败'); |
|
|
|
} |
|
|
|
|
|
|
|
// 记录日志 |
|
|
|
Log::info('合同文档生成成功', [ |
|
|
|
'contract_sign_id' => $contract_sign_id, |
|
|
|
'contract_id' => $contractSign['contract_id'], |
|
|
|
'student_id' => $contractSign['student_id'], |
|
|
|
'file_path' => $result['file_path'] |
|
|
|
]); |
|
|
|
|
|
|
|
return success([ |
|
|
|
'file_path' => $result['file_path'], |
|
|
|
'file_name' => $result['file_name'], |
|
|
|
'download_url' => $result['download_url'] |
|
|
|
], '合同文档生成成功'); |
|
|
|
|
|
|
|
} catch (\Exception $e) { |
|
|
|
// 记录错误日志 |
|
|
|
Log::error('合同文档生成失败', [ |
|
|
|
'contract_sign_id' => $contract_sign_id, |
|
|
|
'error' => $e->getMessage(), |
|
|
|
'trace' => $e->getTraceAsString() |
|
|
|
]); |
|
|
|
|
|
|
|
return fail('合同文档生成失败:' . $e->getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |