智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

197 lines
5.5 KiB

<?php
namespace app\adminapi\controller\document;
use core\base\BaseAdminController;
use app\service\admin\document\DocumentTemplateServiceBasic;
use think\Response;
/**
* 文档模板控制器
*/
class DocumentTemplateBasic extends BaseAdminController
{
/**
* 上传模板
* @return Response
*/
public function upload(): Response
{
try {
$data = $this->request->params([
['contract_name', ''],
['contract_type', 'general']
]);
// 获取上传文件
$file = $this->request->file('file');
if (!$file) {
return fail('请选择要上传的文件');
}
$data['file'] = $file;
$result = (new DocumentTemplateServiceBasic())->uploadTemplate($data);
return success('上传成功', $result);
} catch (\Exception $e) {
return fail($e->getMessage());
}
}
/**
* 解析占位符
* @return Response
*/
public function parse(): Response
{
try {
$filePath = $this->request->param('file_path', '');
if (empty($filePath)) {
return fail('文件路径不能为空');
}
$absolutePath = public_path() . '/' . $filePath;
if (!file_exists($absolutePath)) {
return fail('文件不存在');
}
$placeholders = (new DocumentTemplateServiceBasic())->parsePlaceholders($absolutePath);
return success('解析成功', ['placeholders' => $placeholders]);
} catch (\Exception $e) {
return fail($e->getMessage());
}
}
/**
* 配置数据源
* @return Response
*/
public function configDataSource(): Response
{
try {
$data = $this->request->params([
['contract_id', 0],
['config', []]
]);
if (empty($data['contract_id'])) {
return fail('合同ID不能为空');
}
if (empty($data['config'])) {
return fail('配置数据不能为空');
}
$result = (new DocumentTemplateServiceBasic())->configDataSource(
$data['contract_id'],
$data['config']
);
return success('配置成功');
} catch (\Exception $e) {
return fail($e->getMessage());
}
}
/**
* 获取模板列表
* @return Response
*/
public function lists(): Response
{
try {
$data = $this->request->params([
['page', 1],
['limit', 20],
['name', ''],
['type', '']
]);
$where = [];
if (!empty($data['name'])) {
$where[] = ['name', 'like', '%' . $data['name'] . '%'];
}
if (!empty($data['type'])) {
$where[] = ['type', '=', $data['type']];
}
$list = \app\model\contract\Contract::where($where)
->field('id, name, type, file_path, status, created_at')
->order('created_at desc')
->paginate([
'list_rows' => $data['limit'],
'page' => $data['page']
]);
return success('获取成功', $list);
} catch (\Exception $e) {
return fail($e->getMessage());
}
}
/**
* 获取模板详情
* @param int $id
* @return Response
*/
public function info(int $id): Response
{
try {
$contract = \app\model\contract\Contract::find($id);
if (!$contract) {
return fail('模板不存在');
}
// 获取数据源配置
$configs = \app\model\document\DocumentDataSourceConfig::where('contract_id', $id)
->field('id, placeholder, table_name, field_name, field_type, is_required, default_value')
->select()
->toArray();
$result = $contract->toArray();
$result['configs'] = $configs;
return success('获取成功', $result);
} catch (\Exception $e) {
return fail($e->getMessage());
}
}
/**
* 删除模板
* @param int $id
* @return Response
*/
public function del(int $id): Response
{
try {
$contract = \app\model\contract\Contract::find($id);
if (!$contract) {
return fail('模板不存在');
}
// 删除文件
if (!empty($contract['file_path'])) {
$filePath = public_path() . '/' . $contract['file_path'];
if (file_exists($filePath)) {
unlink($filePath);
}
}
// 删除数据源配置
\app\model\document\DocumentDataSourceConfig::where('contract_id', $id)->delete();
// 删除合同记录
$contract->delete();
return success('删除成功');
} catch (\Exception $e) {
return fail($e->getMessage());
}
}
}