This commit is contained in:
2025-09-13 00:47:18 +08:00
parent 4b66c61782
commit f65d07884f
12 changed files with 1895 additions and 1 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/vendor/
/.idea

View File

@ -0,0 +1,369 @@
<?php
//declare(strict_types=1);
namespace Application\Controller;
use Application\Common\Container;
use Application\Form\ExportModel;
use Application\Mvc\Controller\Plugins\RenderApiJson;
use Application\Service\DB\Dictionary\FormGroup;
use Application\Service\Extension\Helper\ExcelHelper;
use Application\Service\Extension\Laminas;
use Application\Service\Extension\Queue\jobs\SyncPatientFormJob;
use Application\Service\Extension\Queue\QueueApplication;
use Application\Service\Extension\Xml\LaboratoryXmlGenerator;
use Laminas\ApiTools\Admin\Module as AdminModule;
use Laminas\Http\Response;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use function class_exists;
/**
*
* @package Application\Controller
*
* @method RenderApiJson RenderApiJson()
* @method Container LocalService()
*/
class IndexController extends AbstractActionController
{
const Genercsetinfotype='Genercsetinfotype';//字典项分类-1
const Genercsetinfo='Genercsetinfo';//字典项通用名
/**
* @return Response|ViewModel
*/
public static function yieldFuc($num)
{
$oper_type = [0,1,2];
$log_type = [0,1,3];
$formData = include $_SERVER['DOCUMENT_ROOT'].'/../formData/formMap.php';
for($i = 0; $i < $num; $i++){
$logData = [
'user_id' => 1,
'event_from' => array_rand($formData),
'event_id' => $i,
'create_time' => time(),
'log_ip' => '127.0.0.1',
'oper_type' => array_rand($oper_type),
'log_type' => array_rand($log_type),
'change_data' => '测试'
];
yield $logData;
}
}
public function indexAction()
{
die('123');
set_time_limit(0);
$datas = self::yieldFuc(10000);
foreach($datas as $data){
$this->LocalService()->adminLog->save($data);
}
exit('finish');
echo "<pre>";print_r($this->LocalService()->identity->getIdentityData());exit;
for($i = 19728; $i <= 19830; $i++){
echo $i.' ';
}
exit;
$formFieldData = $this->Introduce(self::Genercsetinfotype);
$formFieldData = empty($formFieldData) ? [] : array_values($formFieldData);
$formValData = 1 ? $this->LocalService()->dictionaryGenercsetinfotype->fetchOne(['where' => 'id = 1']) : [];
return $this->RenderApiJson()->Success($formValData, '', ['formFieldData' => $formFieldData]);
$maxId = $this->LocalService()->adminUser->getOneFieldVal('id', 'status = 1', 'id desc');
$maxOrder = $this->LocalService()->adminUser->getMaxOrder('id', 'status = 1');
echo 'maxId'.$maxId.' </br>';
echo 'maxOrder'.$maxOrder.' </br>';exit;
$this->LocalService()->adminUser->check_field_repeat('mobile', '15001062410', ['field' => 'is_del', 'value' => 1]);
// 操作前数据
$oprt_pre = [
'id' => 1,
'name' => '张三',
'status' => 0,
'mobile' => '12345678901',
'role_id' => 1
];
// 操作后数据
$oprt_last = [
'id' => 1,
'name' => '张山',
'status' => 0,
'mobile' => '01234567890',
'role_id' => '1,2,3,4,5'
];
//日志文件数据
$logData = [
'event' => 'AdminUser',
'ip' => '127.0.0.1',
'user_id' => 1,
'user_name' => '超级管理员',
'time' => time(),
'oprt_pre' => $oprt_pre,
'oprt_last' => $oprt_last
];
// 获取修改的字段
$changeData = array_diff_assoc($logData['oprt_last'], $logData['oprt_pre']);
if(!empty($changeData)){
$formMapData = include $_SERVER['DOCUMENT_ROOT'].'/../data/FormData/formMap.php';
$form_col_desc_data = include $_SERVER['DOCUMENT_ROOT'].'/../data/FormData/'.$logData['event'].'Data.php';
$event_name = $formMapData[$logData['event']];
foreach($changeData as $changeKey => &$changeVal){
if(isset($form_col_desc_data[$changeKey]['val_source']) and is_callable($form_col_desc_data[$changeKey]['val_source'])){
$changeVal = $form_col_desc_data[$changeKey]['val_source']($this->LocalService(), $changeVal);
}
$desc_data[] = $form_col_desc_data[$changeKey]['title'].''.$changeVal;
}
}
echo "<pre>";print_r($changeData);
echo $logData['user_name'].' 修改了:</br></br>'.implode('</br>', $desc_data);
echo "<pre>";print_r($logData);exit;
if (class_exists(AdminModule::class, false)) {
return $this->redirect()->toRoute('api-tools/ui');
}
return new ViewModel();
}
protected int $contentId = 0;
protected string $prop = '';
public function testAction()
{
$model = new ExportModel();
// $model->exportLogicError();
//2267; // pumch - 1101
ExcelHelper::exportExcel($model->exportLogicError(1101), [
[
['项目ID', 'item_id', 'text'],
['中心编号', 'sign_id', 'text'],
['筛选号', 'patient_id', 'text'],
['访视名称', 'checktime_id', 'text'],
['表单名称', 'form_id', 'text'],
['字段名称', 'prop', 'text'],
['原来值', 'origin_value', 'text'],
['更正值', 'value', 'text'],
// ['更正原因', 'note', 'text'],
['质疑内容', 'expression_note', 'text'],
['质疑时间', 'create_time', 'text'],
['质疑发出人员/角色', 'create_user_id', 'text'],
['质疑回复内容', 'reply_content', 'text'],
['质疑回复时间', 'replay_time', 'text'],
['质疑回复人员/角色', 'replay_user_id', 'text'],
['质疑关闭时间', 'is_closed', 'text'],
['质疑关闭人员/角色', 'closed_user_id', 'text'],
]
], time(), 'xlsx', '', ['质疑数据']);
die;
// $a = new App();
// $a->itemId = 1084;
// $a->signId = 1248;
// $a->menuId = App::MODULE_CS;
// $a->push([37]);
// die('123123');
// var_dump(Laminas::$serviceManager->itemForm->getPreviewConfig(518, true));die;
// $model = new SyncPatientFormJob();
// $model = new FormContentXmlGenerator();
// $model->patientId = 4134;
// $model->itemSignId = 272;
// $model->itemId = 101;
// $model->formId = 947; // 3917 //747 717;
// $model->checkTimeId = 566; //747 717;
// $xmlModel = new XmlBuilder();
// $data = $xmlModel->build($model->generate());
// echo $data;die;
//// echo json_encode($data, JSON_UNESCAPED_SLASHES);die;
////// $model->run();
// echo QueueApplication::push($model);die;
// die;
$model = new LaboratoryXmlGenerator();
// $model->setHeader([
// [
// 'key' => 'TEST',
// 'value' => '是',
// 'transactionType' => 'Insert',
// ],
// [
// 'key' => 'DATE',
// 'value' => '2022-1-1',
// 'transactionType' => 'Update',
// ]
// ]);
// $model->setContent(
// [
// [
// ['itemOID' => 'INDICATORS', 'transactionType' => 'Insert', 'value' => '白细胞'], // 指标
// ['itemOID' => 'UNIT', 'transactionType' => 'Insert', 'value' => '10^9/L'], // 单位
// ],
// [
// ['itemOID' => 'INDICATORS', 'transactionType' => 'Insert', 'value' => '中性粒细胞绝对值'], // 指标
// ['itemOID' => 'UNIT', 'transactionType' => 'Insert', 'value' => '10^9/L'], // 单位
//// ['itemOID' => 'RESULT', 'transactionType' => 'Insert', 'value' => '4.05'], // 结果
//// ['itemOID' => 'RANGE', 'transactionType' => 'Insert', 'value' => '1.8-6.3'], // 范围
//// ['itemOID' => 'NORMAL', 'transactionType' => 'Insert', 'value' => 'true'], // 正常
// ]
// ]
// );
// $model->setFormId(3946);
// $model->setPatientId(1992);
// $model->generate();
// $builder = new XmlBuilder();
//
// echo $builder->build($model->generate());die;
$query = Laminas::$serviceManager->patient->fetchAll([
// 'where' => ['item_id' => 1084, 'itemsig_id' => 1344, 'is_del' => 0]
'where' =>
[
// 'id' => [2032, 2069, 2640, 4134, 4557, 5015, 5358, 5488, 5531, 5599, 5659, 5769, 6083]
// 'id' => [4814, 4813, 2032, 2069, 2640, 4134, 4557, 5015, 5358, 5488, 5531, 5599, 5659, 5769, 6083]//[2032, 2069, 2640, 4134, 4557, 5015, 5358, 5488, 5531, 5599, 5659, 5769, 6083],
// 'id' => [2069, 2640, 4134, 4557, 5015, 5358, 5488, 5531, 5599, 5659, 5769, 6083],
'id' => [5651, 5652, 5878, 6127, 6146],
// 'id' => [2367, 2368, 2369, 2370, 2539, 2540, 2541, 4813, 2863, 2864, 2865, 2866, 4814, 4584, 4585, 5651, 5652, 5669, 5670, 5878, 5879, 5941, 6127, 6146]
] // 1043
// 'where' => ['id' => [2367, 2368, 2369, 2370, 2539, 2540, 2541, 2863, 2864, 2865, 2866, 4584, 4585]] // 2368, 2369, 2370, 2539, 2540, 2541, 2863, 2864, 2865, 2866, 4584, 4585
// 'where' => ['id' => 2069] // 1043
]);
//
// $model = new SyncPatientFormJob();
//// $model = new FormContentXmlGenerator();
// $model->patientId = intval($query[0]['id']);
// $model->itemSignId = $query[0]['itemsig_id'];
// $model->itemId = intval($query[0]['item_id']);
// $model->formId = 3921; //747 717;
// $model->checkTimeId = intval(563); //747 717;
//// $xmlModel = new XmlBuilder();
//// $data = $xmlModel->build($model->generate());
//// echo $data;die;
// $model->run();
// die;
////// 新增 一个受试者
// die;
// var_dump($query);die;
// 处理 ae
foreach ($query as $item) {
// $model = new SyncPatientJob();
////// $model = new PatientXmlGenerator();
// $model->patientId = intval($item['id']); // 受试者id
// $model->itemSignId = $item['itemsig_id']; // 中心id
//// $xmlModel = new XmlBuilder();
//// $data = $xmlModel->build($model->generate());
//// echo $data;die;
//// $model->run();
// echo QueueApplication::push($model);
// // 1406, 1407, 1409, 1410, 1411, 1412, 1408, 1413, 1414, 99
//
//// foreach ([560, 561, 562, 575, 563, 564, 565, 566, 570, 567, 571, 569, 572, 573, 99] as $v) {
// foreach ([1409] as $v) {
// $model = new SyncPatientFormJob();
//// $model = new FormContentXmlGenerator();
// $model->patientId = intval($item['id']);
// $model->itemSignId = 1344; //$item['itemsig_id'];
// $model->itemId = 1084; // intval($item['item_id']);
// $model->formId = 4602; //82841, 2841;
// $model->checkTimeId = intval($v); //747 717;
//// $model->isSync = true;
//// $xmlModel = new XmlBuilder();
//// $data = $xmlModel->build($model->generate());
//// echo json_encode($data, JSON_UNESCAPED_SLASHES);die;
// echo QueueApplication::push($model);
//// $model->isSync = false;
//// echo QueueApplication::push($model);
// }
//die;
// $model = new SyncPatientFormJob();
// $model = new FormContentXmlGenerator();
// $model->patientId = intval($item['id']);
// $model->itemSignId = 272; //$item['itemsig_id'];
// $model->itemId = 101; // intval($item['item_id']);
// $model->formId = 3918; //747 717;
// $model->checkTimeId = intval(1412); //747 717;
//// $model->isDeleteItemData = true;
//// echo QueueApplication::push($model);die;
// $xmlModel = new XmlBuilder();
// $data = $xmlModel->build($model->generate());
// echo json_encode($data, JSON_UNESCAPED_SLASHES);die;
$this->syncPatientForm($item);
}
die;
}
private function syncPatientForm(array $query)
{
$allCheckTime = Laminas::$serviceManager->itemPatientchecktime->fetchAll([
'columns' => ['checktime_id'],
'where' => [
'patient_id' => $query['id']
]
]);
$allCheckTime[] = [
'checktime_id' => 99
];
foreach ($allCheckTime as $checkTime) {
if ($checkTime['checktime_id'] == 99) {
$allFormId = Laminas::$serviceManager->itemForm->fetchCol('id', [
'item_id' => $query['item_id'],
'group_id' => [FormGroup::SAE, FormGroup::AE, FormGroup::THROUGH_PROCESS, FormGroup::TEST_SUMMARY],
'is_del' => 0
]);
} else {
$allFormId = Laminas::$serviceManager->patientForm->fetchCol('form_id', ['patient_id' => $query['id'], 'is_del' => 0, 'checktime_id' => $checkTime['checktime_id']]);
}
$allFormId = array_unique(array_values($allFormId));
foreach ($allFormId as $formId) {
// var_dump($formId);
// $formId = intval($formId['form_id']);
$form = Laminas::$serviceManager->itemForm->fetchOne([
'where' => ['id' => $formId]
]);
if ($form['group_id'] != FormGroup::CHECK_OCR) {
continue;
}
if ($checkTime['checktime_id'] != 99) {
if (in_array($form['group_id'], [FormGroup::SAE, FormGroup::AE, FormGroup::THROUGH_PROCESS, FormGroup::TEST_SUMMARY])) {
continue;
}
}
$model = new SyncPatientFormJob();
// $model = new FormContentXmlGenerator();
$model->patientId = intval($query['id']);
$model->itemSignId = $query['itemsig_id'];
$model->itemId = intval($query['item_id']);
$model->formId = $formId; //747 717;
$model->checkTimeId = intval($checkTime['checktime_id']); //747 717;
// 有数据说明写了
// if ($model->isSync() === false || $model->getFormContent('fetchOne', false) === false || $model->getIsProcessSync() === true) {
// continue;
// }
// $model->formContent = [];
// $xmlModel = new XmlBuilder();
// $data = $xmlModel->build($model->generate());
// echo $data;
// $model->run();
echo "受试者: [{$query['id']}]. 检查点: [{$checkTime['checktime_id']}]. 表单 [{$formId}]. " . PHP_EOL;
QueueApplication::push($model);
}
}
}
}

View File

@ -0,0 +1,30 @@
<?php
/*
* @Author: 863465124@qq.com
* @Date: 2022-07-12 22:22:02
* @LastEditors: 863465124 863465124@qq.com
* @LastEditTime: 2022-07-12 22:27:57
* @FilePath: /RemoteWorking/module/Application/config/cli/laminasCli.config.php
*/
use Application\Command\RunCommand;
use Application\Command\TestCommand;
use Application\Command\Swoole\Server\SwItemTipCommand;
use Application\Command\Swoole\Server\SwLogCommand;
use Application\Command\Swoole\Server\SwTimerCommand;
use Application\Command\Swoole\Server\WebSocketCommand;
use Application\Command\Swoole\Server\SwTaskCommand;
use Application\Command\UnitTestCommand;
return [
'commands' => [
'test' => TestCommand::class, // 测试
'oprtlog' => SwLogCommand::class, // 系统操作日志
'switemtip' => SwItemTipCommand::class, // webSocket
'sw:timer' => SwTimerCommand::class, // 定时任务
'swTaskSv' => SwTaskCommand::class, // 异步任务服务
'ws:start' => WebSocketCommand::class,
'unitTest:start' => UnitTestCommand::class,
'run:server' => RunCommand::class,
],
];

View File

@ -0,0 +1,40 @@
<?php
/*
* @files.saveConflictResolution: overwriteFileOnDisk
* @Author: llbjj
* @Date: 2022-07-04 19:59:46
* @LastEditTime: 2022-07-05 14:17:44
* @LastEditors: llbjj
* @Description:
* @FilePath: /RemoteWorking/module/Application/config/command.service.config.php
*/
/**
*
* @authorllbjj
* @DateTime2022/5/9 15:02
* @Description
*
*/
namespace Application;
use Application\Command\RunCommand;
use Application\Command\UnitTestCommand;
use Application\Factory\ServiceFactory;
use Application\Command\Swoole;
return [
'aliases' => [
'swLogClient' => Swoole\Client\SwLogClient::class,
'swTaskClient' => Swoole\Client\SwTaskClient::class,
],
'factories' => [
Command\TestCommand::class => ServiceFactory::class,
Swoole\Server\SwLogCommand::class => ServiceFactory::class,
Swoole\Client\SwLogClient::class => ServiceFactory::class,
Swoole\Server\SwItemTipCommand::class => ServiceFactory::class,
Swoole\Server\SwTimerCommand::class => ServiceFactory::class,
Swoole\Server\SwTaskCommand::class => ServiceFactory::class,
Swoole\Client\SwTaskClient::class => ServiceFactory::class,
Swoole\Server\WebSocketCommand::class => ServiceFactory::class,
UnitTestCommand::class => ServiceFactory::class,
RunCommand::class => ServiceFactory::class,
]
];

View File

@ -0,0 +1,798 @@
<?php
namespace Application;
use Application\Factory\ChainFactory;
use Application\Factory\DbFactory;
use Application\Factory\EdcDbFactory;
use Application\Factory\SdmFactory;
use Application\Factory\ShareDbFactory;
use Application\Service\DB;
use Application\Service\DB\Item\Planviolate;
use Application\Service\Extension\Helper\ArrayHelper;
$dbServerMap = [
'aliases' => [
'itemInfo' => DB\Item\Info::class,
'itemCenterdata' => DB\Item\Centerdata::class,
'itemDrugbatch' => DB\Item\ItemDrugbatch::class,
'itemSigdrugbatch' => DB\Item\ItemSigdrugbatch::class,
'itemSigdrugset' => DB\Item\ItemSigdrugset::class,
'itemPatientdrugbatch' => DB\Item\ItemPatientdrugbatch::class,
'itemPatientdrugset' => DB\Item\ItemPatientdrugset::class,
'itemSignatory' => DB\Item\Signatory::class,
'itemResearchstage' => DB\Item\Researchstage::class,
'itemRandom' => DB\Item\Random::class,
'itemJobstaff' => DB\Item\Jobstaff::class,
'itemResearchflowcat' => DB\Item\Researchflowcat::class,
'itemChecktime' => DB\Item\Checktime::class,
'itemCheckname' => DB\Item\Checknames::class,
'itemItemdocument' => DB\Item\Itemdocument::class,
'itemDocumentcontent' => DB\Item\Documentcontent::class,
'itemResearchremark' => DB\Item\Researchremark::class,
'itemSuperrole' => DB\Item\Superrole::class,
'itemCheckcontent' => DB\Item\Checkcontent::class,
'itemPatientcheckcontent' => DB\Item\Patientcheckcontent::class,
'DictionaryCheckcategory' => DB\Dictionary\Checkcategory::class,
'DictionaryCheckname' => DB\Dictionary\Checkname::class,
'DictionaryCsset' => DB\Dictionary\Csset::class,
'DictionaryDocument' => DB\Dictionary\Document::class,
'Jobstaff' => DB\Item\Jobstaff::class,
'Researchflowcat' => DB\Item\Researchflowcat::class,
'DictionaryGenercsetinfo' => DB\Dictionary\Genercsetinfo::class,
'DictionaryGenercsetinfotype' => DB\Dictionary\Genercsetinfotype::class,
'DictionaryPatientattrselect' => DB\Dictionary\Patientattrselect::class,
'dictionaryCheckcategory' => DB\Dictionary\Checkcategory::class,
'dictionaryCheckname' => DB\Dictionary\Checkname::class,
'dictionaryCsset' => DB\Dictionary\Csset::class,
'dictionaryDocument' => DB\Dictionary\Document::class,
'dictionaryGenercsetinfo' => DB\Dictionary\Genercsetinfo::class,
'dictionaryGenercsetinfotype' => DB\Dictionary\Genercsetinfotype::class,
'dictionaryItemjob' => DB\Dictionary\Itemjob::class,
'dictionaryPatientattr' => DB\Dictionary\Patientattr::class,
'dictionaryPatientattrselect' => DB\Dictionary\Patientattrselect::class,
'dictionaryChecknameattr' => DB\Dictionary\Checknameattr::class,
'dictionaryUnblinding' => DB\Dictionary\Unblinding::class,
'dictionaryOcr' => DB\Dictionary\Ocr::class,
'dictionaryUnit' => DB\Dictionary\Unit::class,
'adminMenu' => DB\Admin\Menu::class,
'adminUser' => DB\Admin\User::class,
'adminRole' => DB\Admin\Role::class,
'adminAppletsrolemenurelation' => DB\Admin\Appletsrolemenurelation::class,
'adminAppletsmenu' => DB\Admin\Appletsmenu::class,
'roleMenuRelation' => DB\Admin\Rolemenurelation::class,
'roleSignatoryRelation' => DB\Admin\Realrolesignatoryrelation::class,
'userRoleRelation' => DB\Admin\Userrolerelation::class,
'realRole' => DB\Admin\Realrole::class,
'adminLog' => DB\Admin\Log::class,
'signatoryInfo' => DB\Signatory\Info::class,
'signatoryUser' => DB\Signatory\User::class,
'signatoryDepartment' => DB\Signatory\Department::class,
'patient' => DB\Item\Patient::class,
'patientForm' => DB\Item\PatientForm::class,
'patientFormContent' => DB\Item\PatientFormContent::class,
'patientFormContentImg' => DB\Item\PatientFormContentImg::class,
'patientattrs' => DB\Item\Patientattrs::class,
'dictionaryForm' => DB\Dictionary\Form::class,
'dictionaryFormVersion' => DB\Dictionary\FormVersion::class,
'patientCard' => DB\Item\PatientCard::class,
'itemRandblock' => DB\Item\Randblock::class,
'itemRandgroup' => DB\Item\Randgroup::class,
'itemRandnumber' => DB\Item\Randnumber::class,
'itemRandomdetails' => DB\Item\Randomdetails::class,
'itemBlockgroup' => DB\Item\Blockgroup::class,
'dictionaryFormField' => DB\Dictionary\FormField::class,
'dictionaryFormFieldText' => DB\Dictionary\ItemFormFieldText::class,
'dictionaryFormFieldRadio' => DB\Dictionary\ItemFormFieldRadio::class,
'itemFormFieldText' => DB\Item\FormFieldText::class,
'itemFormFieldRadio' => DB\Item\FormFieldRadio::class,
'dictionaryFormGroup' => DB\Dictionary\FormGroup::class,
'itemForm' => DB\Dictionary\ItemForm::class,
'itemFormVersion' => DB\Item\ItemFormVersion::class,
'itemFormField' => DB\Dictionary\ItemFormField::class,
'itemFormGroup' => DB\Dictionary\ItemFormGroup::class,
'realRolemodulerelation' => DB\Item\Rolemodulerelation::class,
'itemPatientchecktime' => DB\Item\Patientchecktime::class,
'itemInformedconsent' => DB\Item\Informedconsent::class,
'itemImgtxtdiscern' => DB\Item\Imgtxtdiscern::class,
'itemPatientworkannex' => DB\Project\Patientworkannex::class,
'itemIdentificationresult' => DB\Project\Identificationresult::class,
'itemUnblinding' => DB\Item\Unblindings::class,
'itemIdentificationresultchange' => DB\Project\Identificationresultchange::class,
'itemUrgentunblind' => DB\Item\Urgentunblind::class,
'itemFile' => DB\Item\File::class,
'dictionarySetocrfield' => DB\Project\Setocrfield::class,
'itemQuestion' => DB\Item\Question::class,
'itemReply' => DB\Item\Reply::class,
'dictionaryFormRelation' => DB\Dictionary\FormRelation::class,
'itemFormRelation' => DB\Item\FormRelation::class,
'itemExport' => DB\Item\Export::class,
'itemPatientFormContentFieldLock' => DB\Item\PatientFormContentFieldLock::class,
'itemPatientbooked' => DB\Item\Patientbooked::class,
'itemCsae' => DB\Project\Csae::class,
'itemPatientChecktimeForm' => DB\Item\PatientChecktimeForm::class,
'itemPatientAeContent' => DB\Item\PatientAeContent::class,
'itemCsaeRelation' => DB\Project\CsaeRelation::class,
'itemMedication' => DB\Item\Medication::class,
'itemAppletsdata' => DB\Item\Appletsdata::class,
'itemVicecopy' => DB\Item\Vicecopy::class,
'itemInformedconsentsign' => DB\Item\Informedconsentsign::class,
'workShow' => DB\Work\Show::class,
'workSchedule' => DB\Work\Schedule::class,
'workApproval' => DB\Work\Approval::class,
'itemDownpicture' => DB\Item\Downpicture::class,
'itemCsaeChecked' => DB\Item\ItemCsaeChecked::class,
'itemQuestionanswer' => DB\Item\Answer::class,
'signatoryPatient' => DB\Item\Signatorypatient::class,
'itemAgecountset' => DB\Item\Agecountset::class,
'dictionaryRule' => DB\Dictionary\Rule::class,
'dictionaryFormtype' => DB\Dictionary\Formtype::class,
'dictionaryFormtyperule' => DB\Dictionary\Formtyperule::class,
'dictionaryWorkset' => DB\Dictionary\Workset::class,
'worklistItemworklist' => DB\Worklist\Itemworklist::class,
'worklistItemcustomname' => DB\Worklist\Itemcustomname::class,
'worklistItemworklistset' => DB\Worklist\Itemworklistset::class,
'worklistSigworklist' => DB\Worklist\Sigworklist::class,
'worklistSigcustomname' => DB\Worklist\Sigcustomname::class,
'worklistSigworklistset' => DB\Worklist\Sigworklistset::class,
'worklistPatientinfo' => DB\Worklist\Patientinfo::class,
'worklistPatientconnect' => DB\Worklist\Patientconnect::class,
'worklistPatientworklist' => DB\Worklist\Patientworklist::class,
'itemFormpatientsign' => DB\Item\Formpatientsign::class,
'dictionaryListset' => DB\Dictionary\Listset::class,
'listsetItemlist' => DB\Listset\Itemlist::class,
'listsetSiglist' => DB\Listset\Siglist::class,
'listsetOperate' => DB\Listset\Operate::class,
'listsetAnnex' => DB\Listset\Annex::class,
'listsetAnnexcat' => DB\Listset\Annexcat::class,
'listsetFlow' => DB\Listset\Flow::class,
'businessCategory' => DB\Business\Category::class,
'businessRecord' => DB\Business\Record::class,
'businessRecordannex' => DB\Business\Recordannex::class,
'arkQuery' => DB\Ark\ArkQuery::class,
'itemBackupschange' => DB\Project\Backupschange::class,
'dictionaryQuestionanswer' => DB\Dictionary\Questionanswer::class,
'odmSyncRecord' => DB\Odm\OdmSyncRecord::class,
'itemInfosign' => DB\Item\ItemInfosign::class,
'itemLogtype' => DB\Item\Logtype::class,
'itemExportpdf' => DB\Item\Exportpdf::class,
'itemIdentificationresultdestroy' => DB\Project\Identificationresultdestroy::class,
'patientFormUnlock' => DB\Item\PatientFormUnlock::class, // 受试者表单申请解锁表
'patientWorkCount' => DB\Item\PatientWorkCount::class,
'itemChangesendlog' => DB\Project\Changesendlog::class,
'itemLock' => DB\Item\Lock::class,
'adminWebsitefiling' => DB\Admin\Websitefiling::class,
'itemDoctoridea' => DB\Project\Doctoridea::class,
'itemQuestionconfig' => DB\Dictionary\Questionconfig::class,
'Configtable' => DB\Admin\Configtable::class,
'patientChecktimeList' => DB\Item\PatientChecktimeList::class,
'Send' => DB\Admin\Send::class,
'ocrKeyword' => DB\Ocr\Keyword::class,
'ocrRawdata' => DB\Ocr\Rawdata::class,
'ocrMatedata' => DB\Ocr\Matedata::class,
'ocrMedicalword' => DB\Ocr\Medicalword::class,
'ocrMatewhite' => DB\Ocr\Matewhite::class,
'ocrMateblack' => DB\Ocr\Mateblack::class,
'ocrSigpatient' => DB\Ocr\Medicalmate::class,
'ocrSigpatient' => DB\Ocr\Sigpatient::class,
'ocrMedical' => DB\Ocr\Medical::class,
'ocrOcrannex' => DB\Ocr\Ocrannex::class,
'ocrRawword' => DB\Ocr\Rawword::class,
'ocrRawblack' => DB\Ocr\Rawblack::class,
'itemFormmodel' => DB\Item\Formmodel::class,
'ocrRawlock' => DB\Ocr\Rawlock::class,
'ocrMedicallock' => DB\Ocr\Medicallock::class,
'ocrChangetype' => DB\Ocr\Changetype::class,
'ocrDeletename' => DB\Ocr\Deletename::class,
'ocrReplace' => DB\Ocr\Replace::class,
'ocrAnnextype' => DB\Ocr\Annextype::class,
'ocrSigkeyword' => DB\Ocr\Sigkeyword::class,
'ocrCt' => DB\Ocr\Ct::class,
'blindMethodLog' => DB\Item\Blindmethodlog::class,
'ocrLoseannex' => DB\Ocr\Loseannex::class,
'dictionaryChecknameweight' => DB\Dictionary\Checknameweight::class,
'ocrMatesearch' => DB\Ocr\Matesearch::class,
'itemChecknameweight' => DB\Item\Checknameweight::class,
'itemSign' => DB\Item\Sign::class,
'itemOcrCsae' => DB\Project\OcrCsae::class,
'itemOcrTitleKeys' => DB\Project\OcrTitleKeys::class,
'itemOcrCsaePaitent' => DB\Project\OcrCsaePaitent::class,
'itemOcrCsaePaitentDetail' => DB\Project\OcrCsaePatientDetail::class,
'itemOcrCasePatientSpecialdetail' => DB\Project\OcrCasePatientSpecialdetail::class,
'itemRemarks' => DB\Item\ItemRemarks::class,
'ocrCtcase' => DB\Ocr\Ctcase::class,
'ocrCaseremark' => DB\Ocr\Caseremark::class,
'itemOcrCsaeNew' => DB\Project\OcrCsaeNew::class,
'itemOcrCsaePaitentDetailNew' => DB\Project\OcrCsaePatientDetailNew::class,
'itemOcrCasePatientSpecialdetailNew' => DB\Project\OcrCasePatientSpecialdetailNew::class,
'ocrOcrannexnew' => DB\Ocr\Ocrannexnew::class,
'ocrDrug' => DB\Ocr\Drug::class,
'ocrTake' => DB\Ocr\Take::class,
'ocrCtreplace' => DB\Ocr\Ctreplace::class,
'ocrMatedrug' => DB\Ocr\Matedrug::class,
'ocrDrugcategory' => DB\Ocr\Drugcategory::class,
'dictionaryMedicaltake' => DB\Dictionary\Medicaltake::class,
'dictionaryMedicalword' => DB\Dictionary\Medicalword::class,
'dictionaryDrugcategory' => DB\Dictionary\Drugcategory::class,
'dictionaryDrug' => DB\Dictionary\Drug::class,
'itemConfirm' => DB\Item\Confirm::class,
'itemLock' => DB\Item\Lock::class,
'medicalMatewhite' => DB\Medical\Matewhite::class,
'medicalMateblack' => DB\Medical\Mateblack::class,
'medicalMatedrug' => DB\Medical\Matedrug::class,
'medicalOcrdata' => DB\Medical\Ocrdata::class,
'medicalLock' => DB\Medical\Lock::class,
'Allowpatientwrite' => DB\Item\Allowpatientwrite::class,
'changeUpdateLog' => DB\Project\Changeupdatelog::class,
'Recharge' => DB\Pay\Recharge::class,
'Transfer' => DB\Pay\Transfer::class,
'tmpDeletename' => DB\Tmp\Deletename::class,
'tmpDrug' => DB\Tmp\Drug::class,
'tmpDrugcategory' => DB\Tmp\Drugcategory::class,
'tmpKeyword' => DB\Tmp\Keyword::class,
'tmpMedical' => DB\Tmp\Medical::class,
'tmpMedicalblack' => DB\Tmp\Medicalblack::class,
'tmpMedicaldrug' => DB\Tmp\Medicaldrug::class,
'tmpMedicallock' => DB\Tmp\Medicallock::class,
'tmpMedicaltake' => DB\Tmp\Medicaltake::class,
'tmpMedicalwhite' => DB\Tmp\Medicalwhite::class,
'tmpMedicalword' => DB\Tmp\Medicalword::class,
'tmpRawblack' => DB\Tmp\Rawblack::class,
'tmpRawdata' => DB\Tmp\Rawdata::class,
'tmpRawlock' => DB\Tmp\Rawlock::class,
'tmpRawmate' => DB\Tmp\Rawmate::class,
'tmpRawword' => DB\Tmp\Rawword::class,
'tmpReplace' => DB\Tmp\Replace::class,
'tmpSigkeyword' => DB\Tmp\Sigkeyword::class,
'tmpHospital' => DB\Tmp\Hospital::class,
'tmpInspect' => DB\Tmp\Inspect::class,
'tmpPatienthospital' => DB\Tmp\Patienthospital::class,
'tmpReport' => DB\Tmp\Report::class,
'dictionaryDiseasecategory' => DB\Dictionary\Diseasecategory::class,
'dictionaryDisease' => DB\Dictionary\Disease::class,
'tmpAnnex' => DB\Tmp\Annex::class,
'tmpPatient' => DB\Tmp\Patient::class,
'tmpPatientct' => DB\Tmp\Patientct::class,
'tmpCustom' => DB\Tmp\Custom::class,
'tmpTable' => DB\Tmp\Table::class,
'tmpText' => DB\Tmp\Text::class,
'tmpOutmedical' => DB\Tmp\Outmedical::class,
'tmpIntervene' => DB\Tmp\Intervene::class,
'tmpIntervene0' => DB\Tmp\Intervene0::class,
'tmpIntervene1' => DB\Tmp\Intervene1::class,
'tmpIntervene2' => DB\Tmp\Intervene2::class,
'ocrRawlockunique' => DB\Ocr\Rawlockunique::class,
'tmpCtreplace' => DB\Tmp\Ctreplace::class,
'TmpDoctoradviceoriginal' => DB\Tmp\Doctoradviceoriginal::class,
'tmpDoctoradvicelock' => DB\Tmp\Doctoradvicelock::class,
'tmpDoctoradviceannex' => DB\Tmp\Doctoradviceannex::class,
'tmpDoctoradvicereplace' => DB\Tmp\Doctoradvicereplace::class,
'tmpDoctoradvicematewhite' => DB\Tmp\Doctoradvicematewhite::class,
'tmpDoctoradvicemateblack' => DB\Tmp\Doctoradvicemateblack::class,
'tmpDoctoradvicematedrug' => DB\Tmp\Doctoradvicematedrug::class,
'tmpDoctoradvicetable' => DB\Tmp\Doctoradvicetable::class,
'tmpDoctoradvicepatient' => DB\Tmp\Doctoradvicepatient::class,
'tmpDoctoradviceformal' => DB\Tmp\Doctoradviceformal::class,
'itemMessageField' => DB\Item\MessageField::class,
'itemMessageSend' => DB\Item\MessageSend::class,
'itemMessageSendPatient' => DB\Item\MessageSendPatient::class,
'itemMessageSendLog' => DB\Item\MessageSendLog::class,
'collectCategory' => DB\Collect\Category::class,
'collectInspect' => DB\Collect\Inspect::class,
'collectHospital' => DB\Collect\Hospital::class,
'collectItemhospital' => DB\Collect\Itemhospital::class,
'collectOut' => DB\Collect\Out::class,
'collectItemout' => DB\Collect\Itemout::class,
'collectDrugcategory' => DB\Collect\Drugcategory::class,
'collectDrug' => DB\Collect\Drug::class,
'collectMedicaltake' => DB\Collect\Medicaltake::class,
'collectMedicalword' => DB\Collect\Medicalword::class,
'collectItemdrug' => DB\Collect\Itemdrug::class,
'collectEcg' => DB\Collect\Ecg::class,
'collectItemecg' => DB\Collect\Itemecg::class,
'collectCt' => DB\Collect\Ct::class,
'collectItemct' => DB\Collect\Itemct::class,
'collectReport' => DB\Collect\Report::class,
'collectItemreport' => DB\Collect\Itemreport::class,
'collectKeywordcat' => DB\Collect\Keywordcat::class,
'collectKeyword' => DB\Collect\Keyword::class,
'collectRawword' => DB\Collect\Rawword::class,
'collectItemkeyword' => DB\Collect\Itemkeyword::class,
'collectCost' => DB\Collect\Cost::class,
'collectItemcost' => DB\Collect\Itemcost::class,
'itemMessagePatientChase' => DB\Item\MessageSendPatientChase::class,
'collectPatienthospital' => DB\Collect\Patienthospital::class,
'itemChangeReference' => DB\Project\ChangeReference::class,
'collectPatientecg' => DB\Collect\Patientecg::class,
'collectPatientct' => DB\Collect\Patientct::class,
'collectPatientreport' => DB\Collect\Patientreport::class,
'collectPatientraw' => DB\Collect\Patientraw::class,
'collectPatientrawmate' => DB\Collect\Patientrawmate::class,
'collectPatientrawblack' => DB\Collect\Patientrawblack::class,
'collectPatientrawlock' => DB\Collect\Patientrawlock::class,
'collectPatientmedical' => DB\Collect\Patientmedical::class,
'collectPatientmedicalwhite' => DB\Collect\Patientmedicalwhite::class,
'collectPatientmedicalblack' => DB\Collect\Patientmedicalblack::class,
'collectPatientmedicaldrug' => DB\Collect\Patientmedicaldrug::class,
'collectPatientmedicallock' => DB\Collect\Patientmedicallock::class,
'collectPatientout' => DB\Collect\Patientout::class,
'ocrSpecialmedical' => DB\Ocr\Specialmedical::class,
'collectPatient' => DB\Collect\Patient::class,
'collectAnnex' => DB\Collect\Annex::class,
'exportSas' => DB\Export\Sas::class,
'collectSighospital' => DB\Collect\Sighospital::class,
'collectSigout' => DB\Collect\Sigout::class,
'collectSigkeyword' => DB\Collect\Sigkeyword::class,
'itemFormrecognition' => DB\Project\Itemformrecognition::class,
'itemPatientFormContentRecognition' => DB\Project\PatientFormContentRecognition::class,
'itemPatientformimgcontent' => DB\Item\Patientformimgcontent::class,
'dictionaryDetectname' => DB\Dictionary\Detectname::class,
'dictionaryDetectkeyword' => DB\Dictionary\Detectkeyword::class,
'collectTable' => DB\Collect\Table::class,
'collectText' => DB\Collect\Text::class,
'collectCustom' => DB\Collect\Custom::class,
'dictionaryDetectblackword' => DB\Dictionary\Detectblackword::class,
'itemIdentificationexport' => DB\Project\Identificationexport::class,
'itemResultidentify' => DB\Item\ItemResultidentify::class,
'itemEventwatchdog' => DB\Item\itemEventwatchdog::class,
'templeAnnex' => DB\Temple\Annex::class,
'templeChecklist' => DB\Temple\checklist::class,
'itemMedicaltake' => DB\Item\ItemMedicaltake::class,
'doctoradviceOriginal' => DB\Doctoradvice\DoctoradviceOriginal::class,
'itemPatientinfo' => DB\Item\Patientinfo::class,
'dictionaryLeverform' => DB\Dictionary\Leverform::class,
'dictionaryLevervalue' => DB\Dictionary\Levervalue::class,
'itemSignaturebatch' => DB\Item\Signaturebatch::class,
'itemSignaturedetail' => DB\Item\Signaturedetail::class,
'itemSignatoryCollecttypeocr' => DB\Item\SignatoryCollecttypeocr::class,
'itemDetectpatient' => DB\Item\Detectpatient::class,
'dictionaryOcrreplace' => DB\Dictionary\Ocrreplace::class,
'itemCissclass' => DB\Item\Cissclass::class,
'itemCissoption' => DB\Item\Cissoption::class,
'itemPatientciss' => DB\Item\Patientciss::class,
'fixednametype' => DB\Dictionary\Fixednametype::class,
'fixedname' => DB\Dictionary\Fixedname::class,
'projectMsgset' => DB\Project\Msgset::class,
'projectMsginfo' => DB\Project\Msginfo::class,
'projectMsgsend' => DB\Project\Msgsend::class,
'itemPlanviolate' => DB\Item\Planviolate::class,
'adminWeblink' => DB\Admin\Weblink::class,
'adminWorkbatch' => DB\Admin\Workbatch::class,
'adminWorkinfo' => DB\Admin\Workinfo::class,
'dictionaryEventset' => DB\Dictionary\Eventset::class,
'dictionaryEventattr' => DB\Dictionary\Eventattr::class,
'adminMedicallock' => DB\Admin\Medicallock::class,
'itemPatientevent' => DB\Item\Patientevent::class,
'itemPatienteventannex' => DB\Item\Patienteventannex::class,
'itemPatienteventset' => DB\Item\Patienteventset::class,
'projectPatientwork' => DB\Project\Patientwork::class,
'itemRandomsecondary' => DB\Item\Randomsecondary::class,
'projectMedicalquestion' => DB\Project\Medicalquestion::class,
'projectMedicalquestioninfo' => DB\Project\Medicalquestioninfo::class,
'projectMedicalconfirm' => DB\Project\Medicalconfirm::class,
'projectMedicalconfirminfo' => DB\Project\Medicalconfirminfo::class,
'projectMedicalset' => DB\Project\Medicalset::class,
'itemCheckdate' => DB\Item\Checkdate::class,
'dictionaryRegion' => DB\Dictionary\Region::class,
'projectExceedswindow' => DB\Project\Exceedswindow::class,
'projectCmdrugset' => DB\Project\Cmdrugset::class,
'collectPatientdrug' => DB\Collect\Patientdrug::class,
'dictionaryItemcategory' => DB\Dictionary\Itemcategory::class,
'itemPackage' => DB\Item\Package::class,
],
'factories' => [
DB\Item\Info::class => DbFactory::class,
DB\Item\Centerdata::class => DbFactory::class,
DB\Item\ItemDrugbatch::class => DbFactory::class,
DB\Item\ItemSigdrugbatch::class => DbFactory::class,
DB\Item\ItemSigdrugset::class => DbFactory::class,
DB\Item\ItemPatientdrugbatch::class => DbFactory::class,
DB\Item\ItemPatientdrugset::class => DbFactory::class,
DB\Item\Signatory::class => DbFactory::class,
DB\Item\Jobstaff::class => DbFactory::class,
DB\Item\Researchflowcat::class => DbFactory::class,
DB\Item\Researchstage::class => DbFactory::class,
DB\Item\Random::class => DbFactory::class,
DB\Item\Checktime::class => DbFactory::class,
DB\Item\Checknames::class => DbFactory::class,
DB\Item\Itemdocument::class => DbFactory::class,
DB\Item\Documentcontent::class => DbFactory::class,
DB\Item\Researchremark::class => DbFactory::class,
DB\Item\PatientChecktimeForm::class => DbFactory::class,
DB\Item\Superrole::class => DbFactory::class,
DB\Item\Checkcontent::class => DbFactory::class,
DB\Item\Patientcheckcontent::class => DbFactory::class,
DB\Dictionary\Checkcategory::class => ShareDbFactory::class,
DB\Dictionary\Checkname::class => ShareDbFactory::class,
DB\Dictionary\Csset::class => ShareDbFactory::class,
DB\Dictionary\Document::class => ShareDbFactory::class,
DB\Dictionary\Genercsetinfo::class => ShareDbFactory::class,
DB\Dictionary\Genercsetinfotype::class => ShareDbFactory::class,
DB\Dictionary\Itemjob::class => ShareDbFactory::class,
DB\Dictionary\Patientattr::class => ShareDbFactory::class,
DB\Dictionary\Patientattrselect::class => ShareDbFactory::class,
DB\Dictionary\Checknameattr::class => ShareDbFactory::class,
DB\Dictionary\Unblinding::class => ShareDbFactory::class,
DB\Dictionary\Ocr::class => ShareDbFactory::class,
DB\Dictionary\Unit::class => ShareDbFactory::class,
DB\Admin\Menu::class => DbFactory::class,
DB\Admin\User::class => DbFactory::class,
DB\Admin\Role::class => DbFactory::class,
DB\Admin\Rolemenurelation::class => DbFactory::class,
DB\Admin\Userrolerelation::class => DbFactory::class,
DB\Admin\Realrole::class => DbFactory::class,
DB\Admin\Realrolesignatoryrelation::class => DbFactory::class,
DB\Admin\Log::class => DbFactory::class,
DB\Admin\Appletsrolemenurelation::class => DbFactory::class,
DB\Admin\Appletsmenu::class => DbFactory::class,
DB\Signatory\Info::class => DbFactory::class,
DB\Signatory\User::class => DbFactory::class,
DB\Signatory\Department::class => DbFactory::class,
DB\Item\Patient::class => DbFactory::class,
DB\Item\Patientattrs::class => DbFactory::class,
DB\Dictionary\Form::class => DbFactory::class,
DB\Item\PatientCard::class => DbFactory::class,
DB\Item\Randblock::class => DbFactory::class,
DB\Item\Randgroup::class => DbFactory::class,
DB\Item\Randnumber::class => DbFactory::class,
DB\Item\Randomdetails::class => DbFactory::class,
DB\Item\Blockgroup::class => DbFactory::class,
DB\Dictionary\FormField::class => DbFactory::class,
DB\Dictionary\FormVersion::class => DbFactory::class,
DB\Dictionary\FormGroup::class => DbFactory::class,
DB\Dictionary\ItemForm::class => DbFactory::class,
DB\Dictionary\ItemFormField::class => DbFactory::class,
DB\Item\ItemFormVersion::class => DbFactory::class,
DB\Dictionary\ItemFormGroup::class => DbFactory::class,
DB\Item\Rolemodulerelation::class => DbFactory::class,
DB\Dictionary\ItemFormFieldText::class => DbFactory::class,
DB\Dictionary\ItemFormFieldRadio::class => DbFactory::class,
DB\Item\FormFieldText::class => DbFactory::class,
DB\Item\FormFieldRadio::class => DbFactory::class,
DB\Item\Patientchecktime::class => DbFactory::class,
DB\Item\PatientForm::class => DbFactory::class,
DB\Item\Informedconsent::class => DbFactory::class,
DB\Item\Imgtxtdiscern::class => DbFactory::class,
DB\Project\Patientworkannex::class => DbFactory::class,
DB\Project\Identificationresult::class => DbFactory::class,
DB\Item\Unblindings::class => DbFactory::class,
DB\Item\PatientFormContent::class => DbFactory::class,
DB\Item\PatientFormContentImg::class => DbFactory::class,
DB\Project\Identificationresultchange::class => DbFactory::class,
DB\Item\Urgentunblind::class => DbFactory::class,
DB\Item\File::class => DbFactory::class,
DB\Project\Setocrfield::class => DbFactory::class,
DB\Item\Question::class => DbFactory::class,
DB\Item\Reply::class => DbFactory::class,
DB\Dictionary\FormRelation::class => DbFactory::class,
DB\Item\FormRelation::class => DbFactory::class,
DB\Item\Export::class => DbFactory::class,
DB\Item\PatientFormContentFieldLock::class => DbFactory::class,
DB\Item\Patientbooked::class => DbFactory::class,
DB\Project\Csae::class => DbFactory::class,
DB\Item\PatientAeContent::class => DbFactory::class,
DB\Project\CsaeRelation::class => DbFactory::class,
DB\Item\Medication::class => DbFactory::class,
DB\Item\Appletsdata::class => DbFactory::class,
DB\Item\Vicecopy::class => DbFactory::class,
DB\Item\Informedconsentsign::class => DbFactory::class,
DB\Work\Show::class => DbFactory::class,
DB\Work\Schedule::class => DbFactory::class,
DB\Work\Approval::class => DbFactory::class,
DB\Item\Downpicture::class => DbFactory::class,
DB\Item\ItemCsaeChecked::class => DbFactory::class,
DB\Item\Answer::class => DbFactory::class,
DB\Item\Signatorypatient::class => DbFactory::class,
DB\Item\Agecountset::class => DbFactory::class,
DB\Dictionary\Rule::class => ShareDbFactory::class,
DB\Dictionary\Formtype::class => ShareDbFactory::class,
DB\Dictionary\Formtyperule::class => ShareDbFactory::class,
DB\Dictionary\Workset::class => ShareDbFactory::class,
DB\Worklist\Itemworklist::class => ShareDbFactory::class,
DB\Worklist\Itemcustomname::class => ShareDbFactory::class,
DB\Worklist\Itemworklistset::class => ShareDbFactory::class,
DB\Worklist\Sigworklist::class => ShareDbFactory::class,
DB\Worklist\Sigcustomname::class => ShareDbFactory::class,
DB\Worklist\Sigworklistset::class => ShareDbFactory::class,
DB\Worklist\Patientinfo::class => ShareDbFactory::class,
DB\Worklist\Patientconnect::class => ShareDbFactory::class,
DB\Worklist\Patientworklist::class => ShareDbFactory::class,
DB\Item\Formpatientsign::class => ShareDbFactory::class,
DB\Dictionary\Listset::class => ShareDbFactory::class,
DB\Listset\Itemlist::class => ShareDbFactory::class,
DB\Listset\Siglist::class => ShareDbFactory::class,
DB\Listset\Operate::class => ShareDbFactory::class,
DB\Listset\Annex::class => ShareDbFactory::class,
DB\Listset\Annexcat::class => ShareDbFactory::class,
DB\Listset\Flow::class => ShareDbFactory::class,
DB\Business\Category::class => ShareDbFactory::class,
DB\Business\Record::class => ShareDbFactory::class,
DB\Business\Recordannex::class => ShareDbFactory::class,
DB\Ark\ArkQuery::class => ArkDbFactory::class,
DB\Project\Backupschange::class => ShareDbFactory::class,
DB\Dictionary\Questionanswer::class => ShareDbFactory::class,
DB\Project\Changesendlog::class => ShareDbFactory::class,
DB\Odm\OdmSyncRecord::class => DbFactory::class,
DB\Item\ItemInfosign::class => DbFactory::class,
DB\Item\Logtype::class => DbFactory::class,
DB\Item\Exportpdf::class => DbFactory::class,
DB\Project\Identificationresultdestroy::class => DbFactory::class,
DB\Item\PatientFormUnlock::class => DbFactory::class,
DB\Item\PatientWorkCount::class => DbFactory::class,
DB\Admin\Websitefiling::class => DbFactory::class,
DB\Project\Doctoridea::class => DbFactory::class,
DB\Item\PatientFormLogic::class => DbFactory::class,
DB\Item\PatientFormLogicError::class => DbFactory::class,
DB\Dictionary\Questionconfig::class => EdcDbFactory::class,
DB\Admin\Configtable::class => DbFactory::class,
DB\Admin\Send::class => DbFactory::class,
DB\Item\PatientChecktimeList::class => DbFactory::class,
DB\Item\Formmodel::class => DbFactory::class,
DB\Ocr\Keyword::class => ShareDbFactory::class,
DB\Ocr\Rawdata::class => ShareDbFactory::class,
DB\Ocr\Matedata::class => ShareDbFactory::class,
DB\Ocr\Medicalword::class => ShareDbFactory::class,
DB\Ocr\Matewhite::class => ShareDbFactory::class,
DB\Ocr\Mateblack::class => ShareDbFactory::class,
DB\Ocr\Sigpatient::class => ShareDbFactory::class,
DB\Ocr\Medical::class => ShareDbFactory::class,
DB\Ocr\Ocrannex::class => ShareDbFactory::class,
DB\Ocr\Rawword::class => ShareDbFactory::class,
DB\Ocr\Rawblack::class => ShareDbFactory::class,
DB\Ocr\Rawlock::class => ShareDbFactory::class,
DB\Ocr\Medicallock::class => ShareDbFactory::class,
DB\Ocr\Changetype::class => ShareDbFactory::class,
DB\Ocr\Deletename::class => ShareDbFactory::class,
DB\Ocr\Replace::class => ShareDbFactory::class,
DB\Ocr\Annextype::class => ShareDbFactory::class,
DB\Ocr\Sigkeyword::class => ShareDbFactory::class,
DB\Ocr\Ct::class => ShareDbFactory::class,
DB\Item\Blindmethodlog::class => DbFactory::class,
DB\Ocr\Loseannex::class => DbFactory::class,
DB\Dictionary\Checknameweight::class => ShareDbFactory::class,
DB\Ocr\Matesearch::class => DbFactory::class,
DB\Item\Checknameweight::class => DbFactory::class,
DB\Item\Sign::class => DbFactory::class,
DB\Item\Checknameweight::class => ShareDbFactory::class,
DB\Project\OcrCsae::class => DbFactory::class,
DB\Project\OcrTitleKeys::class => DbFactory::class,
DB\Project\OcrCsaePaitent::class => DbFactory::class,
DB\Project\OcrCsaePatientDetail::class => DbFactory::class,
DB\Project\OcrCasePatientSpecialdetail::class => DbFactory::class,
DB\Item\ItemRemarks::class => DbFactory::class,
DB\Ocr\Ctcase::class => ShareDbFactory::class,
DB\Ocr\Caseremark::class => ShareDbFactory::class,
DB\Project\OcrCsaeNew::class => DbFactory::class,
DB\Project\OcrCsaePatientDetailNew::class => DbFactory::class,
DB\Project\OcrCasePatientSpecialdetailNew::class => DbFactory::class,
DB\Ocr\Ocrannexnew::class => ShareDbFactory::class,
DB\Ocr\Drug::class => ShareDbFactory::class,
DB\Ocr\Take::class => ShareDbFactory::class,
DB\Ocr\Ctreplace::class => ShareDbFactory::class,
DB\Ocr\Matedrug::class => ShareDbFactory::class,
DB\Ocr\Drugcategory::class => ShareDbFactory::class,
DB\Dictionary\Medicaltake::class => ShareDbFactory::class,
DB\Dictionary\Medicalword::class => ShareDbFactory::class,
DB\Dictionary\Drugcategory::class => ShareDbFactory::class,
DB\Dictionary\Drug::class => ShareDbFactory::class,
DB\Medical\Matewhite::class => ShareDbFactory::class,
DB\Medical\Mateblack::class => ShareDbFactory::class,
DB\Medical\Matedrug::class => ShareDbFactory::class,
DB\Medical\Ocrdata::class => ShareDbFactory::class,
DB\Medical\Lock::class => ShareDbFactory::class,
DB\Item\Allowpatientwrite::class => DbFactory::class,
DB\Project\Changeupdatelog::class => DbFactory::class,
DB\Pay\Recharge::class => DbFactory::class,
DB\Pay\Transfer::class => DbFactory::class,
DB\Tmp\Deletename::class => ShareDbFactory::class,
DB\Tmp\Drug::class => ShareDbFactory::class,
DB\Tmp\Drugcategory::class => ShareDbFactory::class,
DB\Tmp\Keyword::class => ShareDbFactory::class,
DB\Tmp\Medical::class => ShareDbFactory::class,
DB\Tmp\Medicalblack::class => ShareDbFactory::class,
DB\Tmp\Medicaldrug::class => ShareDbFactory::class,
DB\Tmp\Medicallock::class => ShareDbFactory::class,
DB\Tmp\Medicaltake::class => ShareDbFactory::class,
DB\Tmp\Medicalwhite::class => ShareDbFactory::class,
DB\Tmp\Medicalword::class => ShareDbFactory::class,
DB\Tmp\Rawblack::class => ShareDbFactory::class,
DB\Tmp\Rawdata::class => ShareDbFactory::class,
DB\Tmp\Rawlock::class => ShareDbFactory::class,
DB\Tmp\Rawmate::class => ShareDbFactory::class,
DB\Tmp\Rawword::class => ShareDbFactory::class,
DB\Tmp\Replace::class => ShareDbFactory::class,
DB\Tmp\Sigkeyword::class => ShareDbFactory::class,
DB\Tmp\Hospital::class => ShareDbFactory::class,
DB\Tmp\Inspect::class => ShareDbFactory::class,
DB\Tmp\Patienthospital::class => ShareDbFactory::class,
DB\Tmp\Report::class => ShareDbFactory::class,
DB\Dictionary\Disease::class => ShareDbFactory::class,
DB\Dictionary\Diseasecategory::class => ShareDbFactory::class,
DB\Tmp\Annex::class => ShareDbFactory::class,
DB\Tmp\Patient::class => ShareDbFactory::class,
DB\Tmp\Patientct::class => ShareDbFactory::class,
DB\Tmp\Custom::class => ShareDbFactory::class,
DB\Tmp\Table::class => ShareDbFactory::class,
DB\Tmp\Text::class => ShareDbFactory::class,
DB\Tmp\Outmedical::class => ShareDbFactory::class,
DB\Tmp\Intervene::class => ShareDbFactory::class,
DB\Tmp\Intervene0::class => ShareDbFactory::class,
DB\Tmp\Intervene1::class => ShareDbFactory::class,
DB\Tmp\Intervene2::class => ShareDbFactory::class,
DB\Ocr\Rawlockunique::class => ShareDbFactory::class,
DB\Tmp\Ctreplace::class => ShareDbFactory::class,
DB\Tmp\Doctoradviceoriginal::class => ShareDbFactory::class,
DB\Tmp\Doctoradvicelock::class => ShareDbFactory::class,
DB\Tmp\Doctoradvicematewhite::class => ShareDbFactory::class,
DB\Tmp\Doctoradvicemateblack::class => ShareDbFactory::class,
DB\Tmp\Doctoradvicematedrug::class => ShareDbFactory::class,
DB\Tmp\Doctoradvicetable::class => ShareDbFactory::class,
DB\Tmp\Doctoradviceannex::class => ShareDbFactory::class,
DB\Tmp\Doctoradvicepatient::class => ShareDbFactory::class,
DB\Tmp\Doctoradviceformal::class => ShareDbFactory::class,
DB\Item\MessageField::class => DbFactory::class,
DB\Item\MessageSend::class => DbFactory::class,
DB\Item\MessageSendPatient::class => DbFactory::class,
DB\Item\MessageSendLog::class => DbFactory::class,
DB\Collect\Category::class => ShareDbFactory::class,
DB\Collect\Inspect::class => ShareDbFactory::class,
DB\Collect\Hospital::class => ShareDbFactory::class,
DB\Collect\Itemhospital::class => ShareDbFactory::class,
DB\Collect\Out::class => ShareDbFactory::class,
DB\Collect\Itemout::class => ShareDbFactory::class,
DB\Collect\Drugcategory::class => ShareDbFactory::class,
DB\Collect\Drug::class => ShareDbFactory::class,
DB\Collect\Medicaltake::class => ShareDbFactory::class,
DB\Collect\Medicalword::class => ShareDbFactory::class,
DB\Collect\Itemdrug::class => ShareDbFactory::class,
DB\Collect\Ecg::class => ShareDbFactory::class,
DB\Collect\Itemecg::class => ShareDbFactory::class,
DB\Collect\Ct::class => ShareDbFactory::class,
DB\Collect\Itemct::class => ShareDbFactory::class,
DB\Collect\Report::class => ShareDbFactory::class,
DB\Collect\Itemreport::class => ShareDbFactory::class,
DB\Collect\Keywordcat::class => ShareDbFactory::class,
DB\Collect\Keyword::class => ShareDbFactory::class,
DB\Collect\Rawword::class => ShareDbFactory::class,
DB\Collect\Itemkeyword::class => ShareDbFactory::class,
DB\Collect\Cost::class => ShareDbFactory::class,
DB\Collect\Itemcost::class => ShareDbFactory::class,
DB\Item\MessageSendPatientChase::class => DbFactory::class,
DB\Collect\Patienthospital::class => ShareDbFactory::class,
DB\Project\ChangeReference::class => DbFactory::class,
DB\Collect\Patientecg::class => ShareDbFactory::class,
DB\Collect\Patientct::class => ShareDbFactory::class,
DB\Collect\Patientreport::class => ShareDbFactory::class,
DB\Collect\Patientraw::class => ShareDbFactory::class,
DB\Collect\Patientrawmate::class => ShareDbFactory::class,
DB\Collect\Patientrawblack::class => ShareDbFactory::class,
DB\Collect\Patientrawlock::class => ShareDbFactory::class,
DB\Collect\Patientmedical::class => ShareDbFactory::class,
DB\Collect\Patientmedicalwhite::class => ShareDbFactory::class,
DB\Collect\Patientmedicalblack::class => ShareDbFactory::class,
DB\Collect\Patientmedicaldrug::class => ShareDbFactory::class,
DB\Collect\Patientmedicallock::class => ShareDbFactory::class,
DB\Collect\Patientout::class => ShareDbFactory::class,
DB\Ocr\Specialmedical::class => ShareDbFactory::class,
DB\Collect\Patient::class => ShareDbFactory::class,
DB\Collect\Annex::class => ShareDbFactory::class,
DB\Export\Sas::class => DbFactory::class,
DB\Collect\Sighospital::class => ShareDbFactory::class,
DB\Collect\Sigout::class => ShareDbFactory::class,
DB\Collect\Sigkeyword::class => ShareDbFactory::class,
DB\Project\Itemformrecognition::class => DbFactory::class,
DB\Project\PatientFormContentRecognition::class => DbFactory::class,
DB\Item\Patientformimgcontent::class => DbFactory::class,
DB\Dictionary\Detectname::class => ShareDbFactory::class,
DB\Dictionary\Detectkeyword::class => ShareDbFactory::class,
DB\Dictionary\Detectblackword::class => ShareDbFactory::class,
DB\Collect\Table::class => ShareDbFactory::class,
DB\Collect\Text::class => ShareDbFactory::class,
DB\Collect\Custom::class => ShareDbFactory::class,
DB\Project\Identificationexport::class => DbFactory::class,
DB\Item\ItemResultidentify::class => DbFactory::class,
DB\Item\itemEventwatchdog::class => DbFactory::class,
DB\Temple\Annex::class => DbFactory::class,
DB\Temple\checklist::class => DbFactory::class,
DB\Item\ItemMedicaltake::class => DbFactory::class,
DB\Doctoradvice\DoctoradviceOriginal::class => DbFactory::class,
DB\Item\Patientinfo::class => DbFactory::class,
DB\Dictionary\Leverform::class => ShareDbFactory::class,
DB\Dictionary\Levervalue::class => ShareDbFactory::class,
DB\Item\SignatoryCollecttypeocr::class => DbFactory::class,
DB\Item\Detectpatient::class => ShareDbFactory::class,
DB\Dictionary\Ocrreplace::class => ShareDbFactory::class,
DB\Item\Cissclass::class => ShareDbFactory::class,
DB\Item\Cissoption::class => ShareDbFactory::class,
DB\Item\Patientciss::class => ShareDbFactory::class,
DB\Dictionary\Fixednametype::class => ShareDbFactory::class,
DB\Dictionary\Fixedname::class => ShareDbFactory::class,
DB\Project\Msgset::class => ShareDbFactory::class,
DB\Project\Msginfo::class => ShareDbFactory::class,
DB\Project\Msgsend::class => ShareDbFactory::class,
DB\Item\Planviolate::class => ShareDbFactory::class,
DB\Admin\Weblink::class => DbFactory::class,
DB\Admin\Workbatch::class => ShareDbFactory::class,
DB\Admin\Workinfo::class => ShareDbFactory::class,
DB\Dictionary\Eventset::class => ShareDbFactory::class,
DB\Dictionary\Eventattr::class => ShareDbFactory::class,
DB\Admin\Medicallock::class => ShareDbFactory::class,
DB\Item\Patientevent::class => ShareDbFactory::class,
DB\Item\Patienteventannex::class => ShareDbFactory::class,
DB\Item\Patienteventset::class => ShareDbFactory::class,
DB\Project\Patientwork::class => ShareDbFactory::class,
DB\Item\Randomsecondary::class => ShareDbFactory::class,
DB\Project\Medicalquestion::class => ShareDbFactory::class,
DB\Project\Medicalquestioninfo::class => ShareDbFactory::class,
DB\Project\Medicalconfirm::class => ShareDbFactory::class,
DB\Project\Medicalconfirminfo::class => ShareDbFactory::class,
DB\Project\Medicalset::class => ShareDbFactory::class,
DB\Item\Checkdate::class => ShareDbFactory::class,
DB\Dictionary\Region::class => ShareDbFactory::class,
DB\Project\Exceedswindow::class => ShareDbFactory::class,
DB\Project\Cmdrugset::class => ShareDbFactory::class,
DB\Collect\Patientdrug::class => ShareDbFactory::class,
DB\Dictionary\Itemcategory::class => ShareDbFactory::class,
DB\Item\Package::class => ShareDbFactory::class,
]
];
$appendMap = [
'itemPatientFormLogicErrorQuery' => [DB\Item\PatientFormLogicErrorQuery::class, EdcDbFactory::class],
'itemPatientFormLogicErrorPointer' => [DB\Item\PatientFormLogicErrorPointer::class, EdcDbFactory::class], // 逻辑核查错误表
'itemPatientFormLogic' => [DB\Item\PatientFormLogic::class, EdcDbFactory::class], // 逻辑核查公式表
'itemPatientFormLogicError' => [DB\Item\PatientFormLogicError::class, EdcDbFactory::class], // 逻辑核查错误表
'itemPatientFormLogicErrorLog' => [DB\Item\PatientFormLogicErrorLog::class, EdcDbFactory::class],
'patientChecktimeListEdc' => [DB\Item\PatientChecktimeListEdc::class, EdcDbFactory::class],
'patientWorkCountEdc' => [DB\Item\PatientWorkCountEdc::class, EdcDbFactory::class],
'realRolemodulerelationEdc' => [DB\Item\RolemodulerelationEdc::class, EdcDbFactory::class],
'adminMenuEdc' => [DB\Admin\MenuEdc::class, EdcDbFactory::class],
'itemLock' => [DB\Item\Lock::class, EdcDbFactory::class],
'itemConfirm' => [DB\Item\Confirm::class, EdcDbFactory::class],
'patientFormLock' => DB\Item\PatientFormLock::class,
'itemFormEdc' => [DB\Item\ItemFormEdc::class, EdcDbFactory::class],
'itemCheckcontentEdc' => [DB\Item\ItemCheckcontentEdc::class, EdcDbFactory::class],
'patientFormContentUpdated' => DB\Item\PatientFormContentUpdated::class,
'patientFormContentUpdatedLog' => [DB\Item\PatientFormContentUpdatedLog::class, ChainFactory::class],
'patientFormContentCm' => DB\Item\PatientFormContentCm::class,
'itemSignaturebatch' => [DB\Item\Signaturebatch::class, EdcDbFactory::class],
'itemSignaturedetail' => [DB\Item\Signaturedetail::class, EdcDbFactory::class],
'itemLogicErrorReportBlack' => [DB\Item\ItemLogicErrorReportBlack::class, EdcDbFactory::class],
'patientFormResultchangeUpdated' => DB\Item\PatientFormResultchangeUpdated::class,
'itemPatientFormContentDelete' => DB\Item\PatientFormContentDelete::class,
'projectPatientworkbatch' => [DB\Project\Patientworkbatch::class, EdcDbFactory::class],
'projectPatientworkinfo' => [DB\Project\Patientworkinfo::class, EdcDbFactory::class],
'logLogin' => [DB\Log\LogLogin::class, DbFactory::class],
];
//function generate123 ($appendMap): array {
// $r = [];
// foreach ($appendMap as $name => $db) {
// if (is_array($db)) {
// list($class, $factory) = $db;
// $r['aliases'][$name] = $class;
// $r['factories'][$class] = $factory;
// } else {
// $r['aliases'][$name] = $db;
// $r['factories'][$db] = DbFactory::class;
// }
// }
//
// return $r;
//}
return ArrayHelper::merge($dbServerMap, call_user_func(function () use ($appendMap) {
$r = [];
foreach ($appendMap as $name => $db) {
if (is_array($db)) {
list($class, $factory) = $db;
$r['aliases'][$name] = $class;
$r['factories'][$class] = $factory;
} else {
$r['aliases'][$name] = $db;
$r['factories'][$db] = DbFactory::class;
}
}
return $r;
}));

View File

@ -0,0 +1,107 @@
<?php
declare(strict_types=1);
namespace Application;
use Application\Controller\CmController;
use Application\Controller\DashboardController;
use Application\Controller\ExposeController;
use Application\Controller\FieldController;
use Application\Controller\FormController;
use Application\Controller\FormgroupController;
use Application\Controller\LogController;
use Application\Controller\LogicController;
use Application\Controller\PatientH5Controller;
use Application\Controller\project\ae\AeController;
use Application\Controller\project\ItemPhotoController;
use Application\Controller\project\SaeController;
use Application\Controller\SasController;
use Application\Controller\Temple\ChecklistController;
use Application\Controller\ThirdController;
use Application\Controller\v2\ItemFieldController;
use Application\Controller\WechatController;
use Application\Factory\ServiceFactory;
use Application\Mvc\Controller\Plugins\LocalService;
use Application\Mvc\Controller\Plugins\RenderApiJson;
use Application\Service\Extension\Helper\ArrayHelper;
use Laminas\ServiceManager\Factory\InvokableFactory;
use Project\Controller\AeresultController;
$routes = include 'routes/v1.php';
$routesV2 = include 'routes/v2.php';
$dashboardRoutes = include 'routes/dashboard.php';
// 这里的路由会自动注册controller
$mainRoutes = include 'routes/main.php';
$allRoutes = [];
foreach ([$routes, $routesV2, $dashboardRoutes, $mainRoutes->getRoutes()] as $route) {
$allRoutes = ArrayHelper::merge($allRoutes, $route);
}
return [
'router' => [
'routes' => $allRoutes
],
'controllers' => [
'factories' => ArrayHelper::merge([
Controller\IndexController::class => InvokableFactory::class,
Controller\LoginController::class => InvokableFactory::class,
Controller\CommonController::class => InvokableFactory::class,
FormController::class => InvokableFactory::class,
FieldController::class => InvokableFactory::class,
\Application\Controller\item\FormController::class => InvokableFactory::class,
\Application\Controller\item\FieldController::class => InvokableFactory::class,
FormgroupController::class => InvokableFactory::class,
\Application\Controller\item\patient\FormController::class => InvokableFactory::class,
ItemPhotoController::class => InvokableFactory::class,
\Project\Controller\ItemphotoController::class => InvokableFactory::class,
AeController::class => InvokableFactory::class,
AeresultController::class => InvokableFactory::class,
\Application\Controller\item\QuestionController::class => InvokableFactory::class,
\Application\Controller\CrontabController::class => InvokableFactory::class,
SaeController::class => InvokableFactory::class,
WechatController::class => InvokableFactory::class,
LogicController::class => InvokableFactory::class,
ExposeController::class => InvokableFactory::class,
SasController::class => InvokableFactory::class,
DashboardController::class => InvokableFactory::class,
CmController::class => InvokableFactory::class,
ChecklistController::class => InvokableFactory::class,
PatientH5Controller::class => InvokableFactory::class,
LogController::class => InvokableFactory::class,
ItemFieldController::class => InvokableFactory::class,
ThirdController::class => InvokableFactory::class,
], $mainRoutes->getControllers()),
],
'controller_plugins' => [
'aliases' => [
'LocalService' => LocalService::class,
'RenderApiJson' => RenderApiJson::class,
],
'factories' => [
LocalService::class => ServiceFactory::class,
RenderApiJson::class => InvokableFactory::class,
],
],
'service_manager' => include __DIR__."/service.config.php",
'laminas-cli' => include __DIR__.'/cli/laminasCli.config.php',
'view_manager' => [
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => [
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
'layout/dashboardLayout' => __DIR__ . '/../view/layout/dashboardLayout.phtml',
'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
],
'template_path_stack' => [
__DIR__ . '/../view',
],
],
];

View File

@ -0,0 +1,20 @@
<?php
return \Application\Service\Extension\Helper\RouterHelper::generateRouteMap([
\Application\Controller\DashboardController::class => [
['/dashboard' => 'index'],
['/dashboard/file-timestamp' => 'fileTimestamp'],
['/dashboard/exception' => 'exception'],
['/api/dashboard/file-timestamp' => 'apiFileTimestamp'],
['/api/dashboard/exception' => 'apiException'],
['/api/dashboard/exception/detail' => 'apiExceptionDetail'],
['/dashboard/unit-test' => 'unitTest'],
['/api/dashboard/unitTest' => 'apiUnitTest'],
['/dashboard/redis' => 'redis'],
['/api/dashboard/redis' => 'apiRedis'],
['/dashboard/form-log' => 'formLog'],
['/api/dashboard/form-log' => 'apiFormLog'],
['/dashboard/analysis' => 'analysis'],
['/dashboard/analysis-response-time' => 'analysisResponseTime'],
['/api/dashboard/analysisResponseTime' => 'apiAnalysisResponseTime'],
]
]);

View File

@ -0,0 +1,71 @@
<?php
use Application\Service\Extension\Helper\RouterHelper;
use Laminas\ServiceManager\Factory\InvokableFactory;
/**
* 下面是定义路由地址的规则
*
* 如果路由定义重复了, 这里会覆盖掉之前定义的路由地址
*
* 路由地址 => [控制器类, 方法名]
* '/item/field/view' => ['ItemFieldControllerV2', 'view'],
*
* ItemFieldControllerV2 相当于是 \Application\Controller\v2\ItemFieldController::class
* 因为在下面的 CONTROLLER_ALIAS 定义了别名
*
* 你也可以这么写
* '/item/field/view' => [\Application\Controller\v2\ItemFieldController::class, 'view'],
*/
$mainRoutes = [
// '/item/field/view' => ['ItemFieldControllerV2', 'view'],
'/patient/form/inactive' => ['PatientFormControllerV2', 'inactive'], // 受试者表单失活
'/patient/form/compare' => [\Application\Controller\item\patient\FormController::class, 'compare'], // 受试者表单失活
];
return new class ($mainRoutes) {
private array $_routes = [];
private array $_controllers = [];
const CONTROLLER_ALIAS = [
'ItemFieldControllerV2' => \Application\Controller\v2\ItemFieldController::class,
'PatientFormControllerV2' => \Application\Controller\v2\PatientFormController::class,
];
public function __construct($routes)
{
$this->_routes = $routes;
}
private function _getControllerClass(string $controllerClass)
{
$class = self::CONTROLLER_ALIAS[$controllerClass] ?? $controllerClass;
if (!isset($this->_controllers[$class])) {
$this->_controllers[$class] = InvokableFactory::class;
}
return $class;
}
public function getRoutes(): array
{
$res = [];
foreach ($this->_routes as $url => $params) {
$res[$url] = RouterHelper::literalRoute($url, $this->_getControllerClass($params[0]), $params[1]);
}
return $res;
}
public function getControllers(): array
{
return $this->_controllers;
}
};

View File

@ -0,0 +1,306 @@
<?php
/**
* 所有所属v1的控制器路由
*/
use Application\Controller\CommonController;
use Application\Controller\CrontabController;
use Application\Controller\FieldController;
use Application\Controller\FormController;
use Application\Controller\FormgroupController;
use Application\Controller\LoginController;
use Application\Controller\project\SaeController;
use Application\Service\Extension\Helper\RouterHelper;
return RouterHelper::generateRouteMap([
LoginController::class => [
['/login-code' => 'loginCode'],
['/v2/login-code' => 'loginCodeV2'],
['/is-scan' => 'isScan'],
['/forward' => 'forward'],
['/upload' => 'upload'],
['/callback' => 'callback'],
['/send-sms' => 'sendSms'],
['/h5/send-sms' => 'h5SendSms'],
['/bind' => 'bind'],
['/h5/bind' => 'h5Bind'],
['/logout' => 'logout'],
['/mini-login' => 'miniLogin'],
['/' => 'index'],
['/wechatuser' => 'wechatuser'],
['/oauth' => 'oauth'],
['/getwebsitefiling' => 'getwebsitefiling'],
['/patientH5/oauth' => 'patientH5Oauth'],
['/patientH5' => 'patientH5'],
['/webH5' => 'webH5'],
['/webH5/oauth' => 'webH5Oauth'],
['/webH5Forward' => 'webH5Forward'],
['/webH5Callback' => 'webH5Callback'],
['/login/accountPwd' => 'accountPwd'],
['/login/send-sms' => 'sendLoginSms'],
],
\Application\Controller\WechatController::class => [
['/wechat/entry' => 'entry'],
['/wechat/bind' => 'bind'],
['/wechat/bind-captcha' => 'bindCaptcha'],
['/wechat/bind-submit' => 'bindSubmit'],
],
FormController::class => [
['/dictionary/form' => 'index'],
['/dictionary/form/del' => 'del'],
['/dictionary/form/view' => 'view'],
['/dictionary/form/getField' => 'getField'],
['/dictionary/form/create' => 'create'],
['/dictionary/form/preview' => 'preview'],
['/dictionary/form/copyTo' => 'copyTo'],
['/dictionary/form/copy' => 'copy'],
],
FieldController::class => [
['/dictionary/field' => 'index'],
['/dictionary/field/view' => 'view'],
['/dictionary/field/version' => 'version'],
['/dictionary/field/create' => 'create'],
['/dictionary/field/del' => 'del'],
['/dictionary/field/addVersion' => 'addVersion'],
['/dictionary/field/getRelationInformation' => 'getRelationInformation'],
],
\Application\Controller\item\FieldController::class => [
['/item/field' => 'index'],
['/item/field/view' => 'view'],
['/item/field/version' => 'version'],
['/item/field/create' => 'create'],
['/item/field/del' => 'del'],
['/item/field/addVersion' => 'addVersion'],
['/item/field/getRelationInformation' => 'getRelationInformation'],
['/item/field/selectcheck' => 'selectcheck'],
['/item/field/selectform' => 'selectform'],
['/item/field/selectchecktime' => 'selectchecktime'],
['/item/field/selectformchecktime' => 'selectformchecktime'],
['/item/field/setolddata' => 'setolddata'],
['/item/field/formFieldSelect' => 'formFieldSelect'],
['/item/field/formChecktimeSelect' => 'formChecktimeSelect'],
['/item/field/checktimeFormRealtion' => 'checktimeFormRealtion']
],
\Application\Controller\item\FormController::class => [
['/item/form' => 'index'],
['/item/form/del' => 'del'],
['/item/form/view' => 'view'],
['/v1/item/form/lock' => 'lock'], // 锁定表单
['/item/form/create' => 'create'],
/** @see \Application\Controller\item\FormController::previewAction() */
['/item/form/getdrugcm' => 'getdrugcm'], //获取合并用药表单-药物-默认用药原因
['/item/form/preview' => 'preview'], // 表单结构预览
['/v1/item/form/unlock' => 'unlock'], // 解锁表单
['/v1/item/form/detail' => 'detail'], // 查看表单详情
['/v1/item/form/getannexdata' => 'getannexdata'], // 获取化验单锁定数据
['/v1/item/form/getanneximg' => 'getanneximg'], // 获取一对多化验单图片
['/item/form/getField' => 'getField'],
['/v1/item/form/outPreview' => 'outPreview'], // 预览脱落表单
['/v2/item/form/outPreview' => 'outPreviewV2'], // 预览脱落表单V2
['/v1/item/form/createOutForm' => 'createOutForm'], // 创建/编辑 脱落表单
['/v1/item/form/viewOutForm' => 'viewOutForm'], // 查看脱离表单详情,
['/item/form/processed' => 'processed'], //一对多表单删除后对应的质疑历史数据的处理
/** @see \Application\Controller\item\FormController::scoreFormPreviewAction() */
['/v1/item/form/scoreFormPreview' => 'scoreFormPreview'], // 预览评分功能表单
/** @see \Application\Controller\item\FormController::scoreFormListAction() */
['/v1/item/form/scoreFormList' => 'scoreFormList'], // 获取所有评分功能表单列表
/** @see \Application\Controller\item\FormController::scoreFormViewAction() */
['/v1/item/form/scoreFormView' => 'scoreFormView'], // 获取所有评分功能表单列表
['/item/form/itemFormSource' => 'itemFormSource'], // 获取项目表单数据源数据
],
FormgroupController::class => [
['/dictionary/formgroup/treelist' => 'treelist'],
['/dictionary/formgroup/list' => 'list'],
['/dictionary/formgroup/edit' => 'edit'],
['/dictionary/formgroup/save' => 'save'],
['/dictionary/formgroup/delete' => 'delete'],
],
\Application\Controller\item\patient\FormController::class => [
['/patient/form' => 'index'],
['/patient/form/del' => 'del'],
/** @see \Application\Controller\item\patient\FormController::viewAction() */
['/patient/form/view' => 'view'],
['/patient/form/flush' => 'flush'], // 清空表单数据
['/patient/form/recovery' => 'recovery'], // 恢复删除的表单
['/patient/form/unlock' => 'unlock'], // 申请表单解锁
['/patient/form/create' => 'create'],
['/patient/form/cover-by-question-reply' => 'coverByQuestionReply'],
['/patient/form/applyunlock' => 'applyunlock'],
['/patient/form/saveApplyunlock' => 'saveApplyunlock'],
['/patient/form/confirmApplyunlock' => 'confirmApplyunlock'],
/** @see \Application\Controller\item\patient\FormController::scoreFormCreateAction() */
['/v1/item/form/scoreFormCreate' => 'scoreFormCreate'], // 获取所有评分功能表单列表
/** @see \Application\Controller\item\patient\FormController::importAction() */
['/patient/form/import' => 'import'], // 导入受试者表单数据
['/patient/form/importCheckForm' => 'importCheckForm'], // 导入受试者表单数据
['/patient/form/getImportErrorData' => 'getImportErrorData'], // 获取错误数据
['/patient/form/getImportErrorInfo' => 'getImportErrorInfo'], // 获取错误数据
['/patient/form/importDataSave' => 'importDataSave'], // 数据录入
['/patient/form/importDataExecute' => 'importDataExecute'], // 数据验证
['/patient/form/delErrorInfo' => 'delErrorInfo'], // 删除某一条数据
['/patient/form/delCache' => 'delCache'], // 删除缓存
/** @see \Application\Controller\item\patient\FormController::tempStorageAction() */
['/patient/form/tempStorage' => 'tempStorage'], // 暂存表单数据
/** @see \Application\Controller\item\patient\FormController::lockShareForm() */
['/patient/form/lockShareForm' => 'lockShareForm'], // 锁定常规识别类表单
['/patient/form/unlockShareForm' => 'unlockShareForm'], // 解锁常规识别类表单
['/patient/form/uploadMultiShareFormImage' => 'uploadMultiShareFormImage'],
['/patient/form/deleteShareFormMulti' => 'deleteShareFormMulti']
],
CommonController::class => [
['/common/upload' => 'upload'],
['/common/uploadImg' => 'uploadImg'],
['/common/renderFormComponent' => 'renderFormComponent'],
['/common/formatExpression' => 'formatExpression'],
['/common/calculate' => 'calculateExpression'],
['/common/v2/calculate' => 'calculateExpressionV2'], // 表单公式计算v2
['/common/showPic' => 'showPic'],
['/common/errormsg' => 'errormsg'],
['/common/miniVersion' => 'miniVersion'], // 获取最新小程序版本
['/common/patient-mobile' => 'patientMobile'], // 受试者手机号码是否存在
//['/com/editSend'=>'editSend'],
//['/com/savePatientSend' => 'savePatientSend'],
['/common/download' => 'download'], // 在线下载文件
['/common/signFileUrl' => 'signFileUrl'], // 在线下载文件签名
['/common/qrcode' => 'qrcode'], // 企业微信图片
],
SaeController::class => [
['/v1/item/sae' => 'index'],
['/v1/item/sae/patient' => 'patient'],
['/v1/item/sae/saecount' => 'saecount'],
['/v1/item/sae/form' => 'form'],
['/v1/item/sae/create' => 'create'],
['/v1/item/sae/view' => 'view'],
],
\Application\Controller\item\QuestionController::class => [
['/v1/item/question/preview' => 'preview'],
['/v1/item/question/updateQuestion' => 'updateQuestion'],
['/v1/item/question/replyQuestion' => 'replyQuestion'],
['/v1/item/question/historyReply' => 'historyReply'],
['/question/view' => 'questionView'],
],
CrontabController::class => [
['/crontab/manyReidentification' => 'manyReidentification'],
],
\Application\Controller\IndexController::class => [
['/test' => 'test'],
],
\Application\Controller\EdcController::class => [
['/v1/edc/importQuery' => 'importQuery']
],
\Application\Controller\QAController::class => [
['/qa' => 'form'],
['/qa/submit' => 'submit'],
],
\Application\Controller\LogicController::class => [
/** @see LogicController::indexAction */
['/logic' => 'index'],
['/logic/view' => 'view'],
['/logic/delete' => 'delete'],
['/logic/create' => 'create'],
['/logic/config' => 'config'],
['/logic/formList' => 'formList'],
['/logic/varList' => 'varList'],
['/logic/varListV2' => 'varListV2'],
['/logic/errorList' => 'errorList'],
['/logic/execute' => 'execute'],
['/logic/formList' => 'formList'],
/** @see LogicController::formViewAction() */
['/logic/form/view' => 'formView'],
/** @see LogicController::formDetailAction() */
['/logic/form/detail' => 'formDetail'],
/** @see LogicController::errorClosedAction() */
['/logic/error/closed' => 'errorClosed'], // 关闭质疑
/** @see LogicController::queriedErrorListAction() */
['/logic/error/queried' => 'queriedErrorList'], // sdm质疑列表
/** @see LogicController::errorQueriedCreateAction() */
['/logic/error/queried/create' => 'errorQueriedCreate'], // 发送质疑
/** @see LogicController::errorReplyAction() */
['/logic/error/reply' => 'errorReply'],
/** @see LogicController::setQueriedAction() */
['/logic/error/setQueried' => 'setQueried'],
/** @see LogicController::geterrorpatientListAction() */
['/logic/error/geterrorpatientList' => 'geterrorpatientList'], // 逻辑核查-受试者列表
/** @see LogicController::geterrorpatientListAction() */
['/logic/error/geterrorchecktimeList' => 'geterrorchecktimeList'], // 逻辑核查-受试者检查点列表
/** @see LogicController::geterrorpatientListAction() */
['/logic/error/getlasterror' => 'getlasterror'], // 逻辑核查-受试者检查点列表
],
\Application\Controller\ExposeController::class => [
/** @see \Application\Controller\ExposeController::reportAction() */
['/expose/report' => 'report'], // edc 化验单质疑推送
['/expose/fileTimestamp' => 'fileTimestamp']
],
\Application\Controller\Drug\DrugController::class => [
['/app/drug/patientDrug' => 'patientDrug'],
['/app/drug/drugLock' => 'drugLock'],
['/app/drug/drugDaySave' => 'drugDaySave'],
['/app/drug/drugDay' => 'drugDay'],
['/app/drug/arrangeDrugSave' => 'arrangeDrugSave'],
],
\Application\Controller\SasController::class => [
['/sas/export' => 'export'],
['/sas/edit' => 'edit'],
['/sas/list' => 'list'],
['/sas/delete' => 'delete'],
],
\Application\Controller\CmController::class => [
['/cm' => 'index'],
['/cm/preview' => 'preview'],
['/cm/view' => 'view'],
['/cm/create' => 'create'],
['/cm/ae/index' => 'aeList'],
['/cm/ae/view' => 'aeListView'],
['/cm/ae/viewRow' => 'aeViewRow'],
['/cm/ae/edit' => 'aeEdit'],
['/cm/ae/delete' => 'aeDelete'],
],
\Application\Controller\Temple\ChecklistController::class => [
['/temple/checklist/siglist' => 'siglist'],
['/temple/checklist/patientlist' => 'patientlist'],
['/temple/checklist/list' => 'list'],
['/temple/checklist/edit' => 'edit'],
['/temple/checklist/save' => 'save'],
['/temple/checklist/delete' => 'delete'],
['/temple/checklist/lock' => 'lock'],
['/temple/checklist/annexlist' => 'annexlist'],
],
\Application\Controller\PatientH5Controller::class => [
['/com/editSend'=>'editSend'],
['/com/savePatientSend' => 'savePatientSend'],
],
\Application\Controller\ThirdController::class => [
['/third/source' => 'source']
]
]);

View File

@ -0,0 +1,10 @@
<?php
use Application\Service\Extension\Helper\RouterHelper;
return RouterHelper::generateRouteMap([
\Project\Controller\AeresultController::class => [
['/v2/project/aeresult/save' => 'v2Save'],
['/v2/project/aeresult/del' => 'v2Del'],
]
]);

View File

@ -0,0 +1,79 @@
<?php
/**
*
* @authorllbjj
* @DateTime2022/5/4 19:28
* @Description
*
*/
namespace Application;
use Application\Factory\RedisExtendFactory;
use Application\Factory\ServiceFactory;
use Application\Service\Baidu\Ocr;
use Application\Service\Extension\Helper\SDMHelper;
use Application\Service\Extension\Wechat\WechatWork;
use Application\Service\Extension\Formatter\Formatter;
use Application\Service\Extension\HttpException;
use Application\Service\Extension\Identity\Identity;
use Application\Service\Extension\Sms\SmsApplication;
use Application\Service\Extension\Uploader\ImageUploader;
use Application\Service\Extension\CommonServiceFactory;
use Application\Service\Extension\Wechat\Wechat;
use Application\Service\HttpSv;
use Application\Service\Logic\form\CheckFormLogic;
use Application\Service\Login\LoginClient;
use Application\Service\Logs;
use Application\Service\OA\OaClient;
use Application\Service\ToolSys\SyncOcrAnnex;
use Application\Service\ToolSys\ToolSys;
use Zend\Stdlib\ArrayUtils;
use Application\SdmWork\WorkUser;
$dbServerConfig = include __DIR__ . "/db.server.config.php";
$CommandServiceConfig = include __DIR__ . "/command.service.config.php";
$serverConfig = [
'aliases' => [
'redisExtend' => Service\Redis\RedisExtend::class,
'imageUploader' => ImageUploader::class,
'wechat' => Wechat::class,
'sms' => SmsApplication::class,
'identity' => Identity::class,
'formatter' => Formatter::class,
'log' => Logs::class,
'httpSv' => HttpSv::class,
'wechatWork' => WechatWork::class,
'workUser' => WorkUser::class,
'ocr' => Ocr::class,
'toolSys' => ToolSys::class,
'syncOcrAnnex' => SyncOcrAnnex::class,
'SDMHelper' => SDMHelper::class,
'OAClient' => OaClient::class,
'CheckFormLogic' => CheckFormLogic::class,
'loginClient' => LoginClient::class,
],
'factories' => [
// 全局的异常处理
'HttpExceptionStrategy'=> HttpException::class,
Wechat::class => CommonServiceFactory::class,
SmsApplication::class => CommonServiceFactory::class,
Service\Redis\RedisExtend::class => RedisExtendFactory::class,
ImageUploader::class => CommonServiceFactory::class,
Identity::class => CommonServiceFactory::class,
Logs::class => ServiceFactory::class,
Formatter::class => CommonServiceFactory::class,
HttpSv::class => ServiceFactory::class,
WechatWork::class => ServiceFactory::class,
WorkUser::class => ServiceFactory::class,
Ocr::class => ServiceFactory::class,
ToolSys::class =>ServiceFactory::class,
SyncOcrAnnex::class => ServiceFactory::class,
SDMHelper::class => ServiceFactory::class,
OaClient::class => ServiceFactory::class,
CheckFormLogic::class => ServiceFactory::class,
LoginClient::class => ServiceFactory::class,
]
];
$serverConfig = ArrayUtils::merge($serverConfig, $dbServerConfig);
return ArrayUtils::merge($serverConfig, $CommandServiceConfig);

View File

@ -1,2 +1,64 @@
<?php
phpinfo();
/**
* @see https://github.com/laminas-api-tools/api-tools-skeleton for the canonical source repository
* @copyright https://github.com/laminas-api-tools/api-tools-skeleton/blob/master/COPYRIGHT.md
* @license https://github.com/laminas-api-tools/api-tools-skeleton/blob/master/LICENSE.md New BSD License
*/
use Laminas\ApiTools\Application;
use Laminas\Stdlib\ArrayUtils;
/**
* This makes our life easier when dealing with paths. Everything is relative
* to the application root now.
*/
chdir(dirname(__DIR__));
date_default_timezone_set('Asia/Chongqing');
// 定义项目目录
define('APP_PATH', dirname(__DIR__));
// Redirect legacy requests to enable/disable development mode to new tool
if (php_sapi_name() === 'cli'
&& $argc > 2
&& 'development' == $argv[1]
&& in_array($argv[2], ['disable', 'enable'])
) {
// Windows needs to execute the batch scripts that Composer generates,
// and not the Unix shell version.
$script = defined('PHP_WINDOWS_VERSION_BUILD') && constant('PHP_WINDOWS_VERSION_BUILD')
? '.\\vendor\\bin\\laminas-development-mode.bat'
: './vendor/bin/laminas-development-mode';
system(sprintf('%s %s', $script, $argv[2]), $return);
exit($return);
}
// Decline static file requests back to the PHP built-in webserver
if (php_sapi_name() === 'cli-server' && is_file(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))) {
return false;
}
if (! file_exists('vendor/autoload.php')) {
throw new RuntimeException(
'Unable to load application.' . PHP_EOL
. '- Type `composer install` if you are developing locally.' . PHP_EOL
. '- Type `vagrant ssh -c \'composer install\'` if you are using Vagrant.' . PHP_EOL
. '- Type `docker-compose run api-tools composer install` if you are using Docker.'
);
}
// Setup autoloading
include 'vendor/autoload.php';
$appConfig = include 'config/application.config.php';
if (file_exists('config/development.config.php')) {
$appConfig = ArrayUtils::merge(
$appConfig,
include 'config/development.config.php'
);
}
// Run the application!
Application::init($appConfig)->run();