diff --git a/niucloud/app/api/controller/apiController/Contract.php b/niucloud/app/api/controller/apiController/Contract.php index 5d650acd..7fe38da7 100644 --- a/niucloud/app/api/controller/apiController/Contract.php +++ b/niucloud/app/api/controller/apiController/Contract.php @@ -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()); + } } } \ No newline at end of file diff --git a/uniapp/common/config.js b/uniapp/common/config.js index c98a2253..2459f37b 100644 --- a/uniapp/common/config.js +++ b/uniapp/common/config.js @@ -1,6 +1,6 @@ // 环境变量配置 -const env = 'development' -// const env = 'prod' +// const env = 'development' +const env = 'prod' const isMockEnabled = false // 默认禁用Mock优先模式,仅作为回退 const isDebug = false // 默认启用调试模式 const devurl = 'http://localhost:20080/api'