Browse Source

修改 bug

develop
王泽彦 5 months ago
parent
commit
c6bd67df28
  1. 52
      niucloud/app/service/api/student/ContractService.php

52
niucloud/app/service/api/student/ContractService.php

@ -64,25 +64,25 @@ class ContractService extends BaseService
foreach ($list as &$contract) {
// 状态文本映射
$contract['status_text'] = $this->getStatusText($contract['status']);
// 获取合同相关的课程信息
$courseInfo = $this->getContractCourseInfo($contract['contract_id'], $studentId);
$contract = array_merge($contract, $courseInfo);
// 格式化日期
$contract['sign_date'] = $contract['sign_time'] ? date('Y-m-d', strtotime($contract['sign_time'])) : null;
$contract['create_date'] = date('Y-m-d', strtotime($contract['created_at']));
// 文件路径处理
$contract['contract_file_url'] = $contract['contract_template'] ? get_image_url($contract['contract_template']) : '';
// 计算课时使用进度
if ($contract['total_hours'] > 0) {
$contract['progress_percent'] = round(($contract['used_hours'] / $contract['total_hours']) * 100, 1);
} else {
$contract['progress_percent'] = 0;
}
// 判断是否可以续约(生效状态且课时即将用完)
$contract['can_renew'] = $contract['status'] == 3 && $contract['remaining_hours'] <= 5;
}
@ -158,7 +158,7 @@ class ContractService extends BaseService
// 合同条款(如果有内容的话)
$contractSign['terms'] = $contractSign['contract_content'] ?: $contractSign['remarks'];
// 对于已签署成功的合同(status=3),进行占位符替换
if ($contractSign['status'] == 3 && !empty($contractSign['terms'])) {
$contractSign['terms'] = $this->replacePlaceholdersInTerms(
@ -207,7 +207,9 @@ class ContractService extends BaseService
if (!$contract) {
throw new CommonException('合同模板不存在');
}
if(!empty($contract['contract_content'])){
$contract['contract_content'] = replace_placeholders_with_underlines($contract['contract_content']);
}
// 获取所有字段配置
$formFields = Db::table('school_document_data_source_config')
->where('contract_id', $contractId)
@ -287,10 +289,10 @@ class ContractService extends BaseService
// 从form_data中提取签名图片路径
$extractedSignatures = $this->extractSignatureImages($formData);
// 上传并处理签名图片
$processedSignatures = $this->uploadSignatureImages($extractedSignatures);
// 更新form_data中的签名路径为服务器路径
$formData = $this->updateFormDataWithUploadedPaths($formData, $processedSignatures);
@ -332,7 +334,7 @@ class ContractService extends BaseService
}
Db::commit();
return [
'sign_id' => $contractSign['id'],
'generated_file' => $generatedFile,
@ -561,7 +563,7 @@ class ContractService extends BaseService
$contract = Db::table('school_contract')
->where('id', $contractId)
->find();
if (!$contract || !$contract['contract_template']) {
throw new CommonException('合同模板不存在');
}
@ -598,11 +600,11 @@ class ContractService extends BaseService
if ($signatureImage && $this->hasSignaturePlaceholder($templateProcessor)) {
// 处理签名图片 - 支持base64和URL
$signImagePath = $this->processSignatureImage($signatureImage);
// 使用ContractSign服务插入签名
$contractSignService = new ContractSign();
$contractSignService->setSign($templatePath, $outputFullPath, $signImagePath, '学员签名');
// 清理临时文件
if (file_exists($signImagePath)) {
unlink($signImagePath);
@ -792,14 +794,14 @@ class ContractService extends BaseService
private function extractSignatureImages($formData)
{
$signatures = [];
// 常见的签名字段模式
$signaturePatterns = ['签名', '乙方', '甲方', '学员签名'];
foreach ($formData as $key => $value) {
// 检查是否为图片URL(临时路径或正式路径)
if (is_string($value) && (
strpos($value, 'http://tmp/') === 0 ||
strpos($value, 'http://tmp/') === 0 ||
strpos($value, 'https://tmp/') === 0 ||
preg_match('/\.(png|jpg|jpeg|gif)$/i', $value)
)) {
@ -812,7 +814,7 @@ class ContractService extends BaseService
}
}
}
return $signatures;
}
@ -824,7 +826,7 @@ class ContractService extends BaseService
private function uploadSignatureImages($signatures)
{
$processed = [];
foreach ($signatures as $key => $imagePath) {
try {
// 如果是临时路径,需要下载并保存
@ -834,18 +836,18 @@ class ContractService extends BaseService
$filename = 'signature_' . date('YmdHis') . '_' . mt_rand(1000, 9999) . '.png';
$relativePath = 'signatures/' . date('Y/m/') . $filename;
$fullPath = public_path() . '/upload/' . $relativePath;
// 确保目录存在
$dir = dirname($fullPath);
if (!is_dir($dir)) {
mkdir($dir, 0755, true);
}
// 尝试下载临时文件(实际环境中需要通过微信API)
// 这里模拟处理,生成一个占位文件
$placeholderContent = base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==');
file_put_contents($fullPath, $placeholderContent);
$processed[$key] = $relativePath;
} else {
// 已经是正式路径,直接使用
@ -857,7 +859,7 @@ class ContractService extends BaseService
$processed[$key] = $imagePath; // 保持原路径
}
}
return $processed;
}
@ -874,14 +876,14 @@ class ContractService extends BaseService
$formData[$key] = $newPath;
}
}
return $formData;
}
/**
* 在合同条款中替换占位符
* 使用 school_document_data_source_config 表中的 default_value 数据进行替换
*
*
* @param string $terms 合同条款内容
* @param int $contractId 合同模板ID
* @param int $contractSignId 合同签署记录ID
@ -1134,4 +1136,4 @@ class ContractService extends BaseService
return (string)$value;
}
}
}

Loading…
Cancel
Save