香洲二院小程序
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.
 
 
 
mini_xzey/app/Utils/Transfer/HisSoap/ClientMockTransfer.php

285 lines
16 KiB

<?php
declare(strict_types=1);
namespace App\Utils\Transfer\HisSoap;
use App\Exceptions\GeneralException;
use App\Utils\Transfer\TransferAbstract;
use Exception;
class ClientMockTransfer extends TransferAbstract
{
/**
* ClientMockTransfer Construct
* @param string $his_name
*/
public function __construct(string $his_name = "")
{
parent::__construct($his_name);
}
/**
* 设置客户端选项
* @return array
*/
public function clientOption(): array
{
return [];
}
/**
* @param string $class_name
* @return $this
*/
public function transferClass(string $class_name): static
{
return $this;
}
/**
* @throws GeneralException
*/
public function transferMethod(string $method_name, array $request_data = []): self
{
// 使用 match 替代 switch
return match ($method_name) {
'CreateCardPatInfo' => $this->mockRegisterCard($request_data),
'GetCardInfo' => $this->mockGetPatientInfo($request_data),
'GetDepType' => $this->mockGetDepLists($request_data),
'GetDoctList' => $this->mockGetDoctorLists($request_data),
'GetGHMXList' => $this->mockGetRegisterRecordLists($request_data),
'GHCancelCheck' => $this->mockCheckRefundRegisterStatus($request_data),
'GHCancelConfirm' => $this->mockRefundRegister($request_data),
'ListVisitRec' => $this->mockGetPendingLists($request_data),
'ListRecipe' => $this->mockGetPendingDetails($request_data),
'OutpatientExpenseRecord' => $this->mockGetPaidLists($request_data),
'OutpatientDetailRecord' => $this->mockGetPaidDetails($request_data),
'CreateOutpatientinvoiceEBill' => $this->mockCreateElectronInvoice($request_data),
'SendOutpatientinvoiceEBill' => $this->mockSendElectronInvoiceToHis($request_data),
'GetDictionary' => $this->mockGetDictionaryLists($request_data),
'GetChargeList' => $this->mockGetChargeList($request_data),
default => throw new GeneralException("Method '{$method_name}' not found"),
};
}
/**
* 响应格式化
* @param mixed $data
* @return mixed
* @throws Exception
*/
public function responseFormat(mixed $data): mixed
{
try {
// 此处为xml格式
$obj = simplexml_load_string((string)$data, 'SimpleXMLElement', LIBXML_NOCDATA);
return json_decode((string)json_encode($obj), true);
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
/**
* 获取返回值
* @param bool $is_format
* @return mixed
* @throws Exception
*/
public function getResult(bool $is_format = true): mixed
{
return $this->responseFormat($this->transfer_response);
}
/**
* 返回值字段
* @return string
*/
public function transferResponseStr(): string
{
return '';
}
/**
* mockRegisterCard
* @param array $params
* @return self
*/
private function mockRegisterCard(array $params): self
{
$this->transfer_response = '<RESPONSE><RESULTCODE>0</RESULTCODE><ERRORMSG>建卡成功</ERRORMSG><PATIENTID></PATIENTID></RESPONSE>';
return $this;
}
/**
* mockGetPatientInfo
* @param array $params
* @return self
*/
private function mockGetPatientInfo(array $params): self
{
$this->transfer_response = '<RESPONSE><RESULTCODE>0</RESULTCODE><ERRORMSG></ERRORMSG><PATIENTID>1104468</PATIENTID><CARDNO>452323193712153735</CARDNO><NAME>唐超积</NAME><SEX>1</SEX><BIRTHDAY>1937-12-15</BIRTHDAY><CARDSTATUS>0</CARDSTATUS><BRXZ>123</BRXZ><MZHM>299811204468</MZHM></RESPONSE>';
return $this;
}
/**
* mockGetDepLists
* @param array $params
* @return self
*/
private function mockGetDepLists(array $params): self
{
$this->transfer_response = '<RESPONSE><RESULTCODE>0</RESULTCODE><ERRORMSG>Success</ERRORMSG><ITEM><DEPID>12345</DEPID><YBDEPID>67890</YBDEPID><DEPNAME>内科</DEPNAME><FEE>50.00</FEE><FEECODE>001</FEECODE><YSCOUNT>5</YSCOUNT><JZCOUNT>3</JZCOUNT><REGISTERAREA>1</REGISTERAREA><INTRODUCE>内科专注于诊治呼吸、消化、心血管等系统疾病。</INTRODUCE><KSGHXE>5</KSGHXE><KSYGRS>20</KSYGRS><KSKGRS>10</KSKGRS><YSGHXE>10</YSGHXE><YSYGRS>15</YSYGRS><YSKGRS>25</YSKGRS><KYYYSCOUNT>2</KYYYSCOUNT></ITEM><ITEM><DEPID>23456</DEPID><YBDEPID>78901</YBDEPID><DEPNAME>外科</DEPNAME><FEE>60.00</FEE><FEECODE>002</FEECODE><YSCOUNT>8</YSCOUNT><JZCOUNT>4</JZCOUNT><REGISTERAREA>2</REGISTERAREA><INTRODUCE>外科提供专业的手术治疗服务,包括创伤、整形及器官移植。</INTRODUCE><KSGHXE>6</KSGHXE><KSYGRS>30</KSYGRS><KSKGRS>15</KSKGRS><YSGHXE>12</YSGHXE><YSYGRS>20</YSYGRS><YSKGRS>30</YSKGRS><KYYYSCOUNT>3</KYYYSCOUNT></ITEM><ITEM><DEPID>34567</DEPID><YBDEPID>89012</YBDEPID><DEPNAME>儿科</DEPNAME><FEE>40.00</FEE><FEECODE>003</FEECODE><YSCOUNT>6</YSCOUNT><JZCOUNT>2</JZCOUNT><REGISTERAREA>1</REGISTERAREA><INTRODUCE>儿科为0-18岁儿童提供专业的诊疗与健康管理服务。</INTRODUCE><KSGHXE>4</KSGHXE><KSYGRS>25</KSYGRS><KSKGRS>8</KSKGRS><YSGHXE>8</YSGHXE><YSYGRS>10</YSYGRS><YSKGRS>18</YSKGRS><KYYYSCOUNT>4</KYYYSCOUNT></ITEM><ITEM><DEPID>45678</DEPID><YBDEPID>90123</YBDEPID><DEPNAME>皮肤科</DEPNAME><FEE>30.00</FEE><FEECODE>004</FEECODE><YSCOUNT>4</YSCOUNT><JZCOUNT>1</JZCOUNT><REGISTERAREA>1</REGISTERAREA><INTRODUCE>皮肤科诊治常见皮肤病、性病及皮肤美容问题。</INTRODUCE><KSGHXE>3</KSGHXE><KSYGRS>15</KSYGRS><KSKGRS>7</KSKGRS><YSGHXE>6</YSGHXE><YSYGRS>5</YSYGRS><YSKGRS>11</YSKGRS><KYYYSCOUNT>1</KYYYSCOUNT></ITEM></RESPONSE>';
return $this;
}
/**
* mockGetDoctorLists
* @param array $params
* @return self
*/
private function mockGetDoctorLists(array $params): self
{
$this->transfer_response = '<RESPONSE><RESULTCODE>0</RESULTCODE><ERRORMSG>Success</ERRORMSG><ITEM><DOCTID>10001</DOCTID><YBDOCTID>20001</YBDOCTID><DOCTNAME>张三</DOCTNAME><DEPLOCATION>内科一诊室</DEPLOCATION><TYPENAME>主任医师</TYPENAME><ISKSDOC>1</ISKSDOC><SHIFT><DOCTID>10001</DOCTID><REGID>30001</REGID><FDATE>2024-12-27</FDATE><RANKID>1</RANKID><RANKNAME>上午班</RANKNAME><STARTTIME>08:00</STARTTIME><ENDTIME>12:00</ENDTIME><FEE>50.00</FEE><FEECODE>001</FEECODE><REGCOUNT>20</REGCOUNT><JZCOUNT>15</JZCOUNT></SHIFT><SHIFT><DOCTID>10001</DOCTID><REGID>30002</REGID><FDATE>2024-12-28</FDATE><RANKID>2</RANKID><RANKNAME>下午班</RANKNAME><STARTTIME>14:00</STARTTIME><ENDTIME>18:00</ENDTIME><FEE>55.00</FEE><FEECODE>002</FEECODE><REGCOUNT>18</REGCOUNT><JZCOUNT>12</JZCOUNT></SHIFT><SHIFT><DOCTID>10001</DOCTID><REGID>30003</REGID><FDATE>2024-12-29</FDATE><RANKID>3</RANKID><RANKNAME>夜班</RANKNAME><STARTTIME>20:00</STARTTIME><ENDTIME>00:00</ENDTIME><FEE>60.00</FEE><FEECODE>003</FEECODE><REGCOUNT>10</REGCOUNT><JZCOUNT>8</JZCOUNT></SHIFT><XMBH>XM001</XMBH><GJMLBM>1234567890</GJMLBM><XMMC>挂号诊查费</XMMC><JG>50</JG><MCYL>10</MCYL><JE>500</JE></ITEM><ITEM><DOCTID>10002</DOCTID><YBDOCTID>20002</YBDOCTID><DOCTNAME>李四</DOCTNAME><DEPLOCATION>外科二诊室</DEPLOCATION><TYPENAME>副主任医师</TYPENAME><ISKSDOC>0</ISKSDOC><SHIFT><DOCTID>10002</DOCTID><REGID>30004</REGID><FDATE>2024-12-27</FDATE><RANKID>1</RANKID><RANKNAME>上午班</RANKNAME><STARTTIME>08:00</STARTTIME><ENDTIME>12:00</ENDTIME><FEE>60.00</FEE><FEECODE>004</FEECODE><REGCOUNT>25</REGCOUNT><JZCOUNT>20</JZCOUNT></SHIFT><SHIFT><DOCTID>10002</DOCTID><REGID>30005</REGID><FDATE>2024-12-28</FDATE><RANKID>2</RANKID><RANKNAME>下午班</RANKNAME><STARTTIME>14:00</STARTTIME><ENDTIME>18:00</ENDTIME><FEE>65.00</FEE><FEECODE>005</FEECODE><REGCOUNT>20</REGCOUNT><JZCOUNT>18</JZCOUNT></SHIFT><XMBH>XM002</XMBH><GJMLBM>0987654321</GJMLBM><XMMC>挂号诊查费</XMMC><JG>100</JG><MCYL>15</MCYL><JE>1500</JE></ITEM></RESPONSE>
';
return $this;
}
/**
* mockGetRegisterRecordLists
* @param array $params
* @return self
*/
private function mockGetRegisterRecordLists(array $params): self
{
$this->transfer_response = '<RESPONSE><RESULTCODE>0</RESULTCODE><ERRORMSG>成功</ERRORMSG><ITEM><VISITNO>3405227</VISITNO><FTYPE>当天挂号</FTYPE><STATUS>0</STATUS><WAITNUM>143</WAITNUM><TREAID>600240002968</TREAID><GHDATE>2021-07-17</GHDATE><PATIENTID>1103903</PATIENTID><PATIENTNAME>杨尧</PATIENTNAME><RANKID>2</RANKID><RANKNAME>下午</RANKNAME><OPPATNO>600005001000</OPPATNO><DEPLOCATION>门诊一楼</DEPLOCATION><TRANSNUM>0</TRANSNUM><ORDERTYPE>线上预约</ORDERTYPE><PAYFEE>17</PAYFEE><DEPID>16</DEPID><DEPNAME>急诊科</DEPNAME></ITEM><ITEM><VISITNO>3405228</VISITNO><FTYPE>预约挂号</FTYPE><STATUS>1</STATUS><WAITNUM>58</WAITNUM><TREAID>600240002969</TREAID><GHDATE>2021-07-18</GHDATE><PATIENTID>1103904</PATIENTID><PATIENTNAME>李梅</PATIENTNAME><RANKID>1</RANKID><RANKNAME>上午</RANKNAME><OPPATNO>600005001001</OPPATNO><DEPLOCATION>门诊二楼</DEPLOCATION><TRANSNUM>1</TRANSNUM><ORDERTYPE>现场挂号</ORDERTYPE><PAYFEE>25</PAYFEE><DEPID>20</DEPID><DEPNAME>内科</DEPNAME></ITEM><ITEM><VISITNO>3405229</VISITNO><FTYPE>当天挂号</FTYPE><STATUS>0</STATUS><WAITNUM>23</WAITNUM><TREAID>600240002970</TREAID><GHDATE>2021-07-19</GHDATE><PATIENTID>1103905</PATIENTID><PATIENTNAME>张强</PATIENTNAME><RANKID>3</RANKID><RANKNAME>夜间</RANKNAME><OPPATNO>600005001002</OPPATNO><DEPLOCATION>急诊大厅</DEPLOCATION><TRANSNUM>2</TRANSNUM><ORDERTYPE>电话预约</ORDERTYPE><PAYFEE>30</PAYFEE><DEPID>18</DEPID><DEPNAME>儿科</DEPNAME></ITEM><ITEM><VISITNO>3405230</VISITNO><FTYPE>预约挂号</FTYPE><STATUS>1</STATUS><WAITNUM>78</WAITNUM><TREAID>600240002971</TREAID><GHDATE>2021-07-20</GHDATE><PATIENTID>1103906</PATIENTID><PATIENTNAME>王丽</PATIENTNAME><RANKID>1</RANKID><RANKNAME>上午</RANKNAME><OPPATNO>600005001003</OPPATNO><DEPLOCATION>门诊三楼</DEPLOCATION><TRANSNUM>0</TRANSNUM><ORDERTYPE>线上预约</ORDERTYPE><PAYFEE>45</PAYFEE><DEPID>22</DEPID><DEPNAME>眼科</DEPNAME></ITEM></RESPONSE>';
return $this;
}
/**
* mockCheckRefundRegisterStatus
* @param array $params
* @return self
*/
private function mockCheckRefundRegisterStatus(array $params): self
{
$this->transfer_response = '<RESPONSE><RESULTCODE>0</RESULTCODE><ERRORMSG>可退号</ERRORMSG></RESPONSE>';
return $this;
}
/**
* mockRefundRegister
* @param array $params
* @return self
*/
private function mockRefundRegister(array $params): self
{
$this->transfer_response = '<RESPONSE><RESULTCODE>0</RESULTCODE><ERRORMSG>退号成功</ERRORMSG></RESPONSE>';
return $this;
}
private function mockGetPendingLists(array $params)
{
return [
'status' => 'success',
'message' => 'Pending list retrieved successfully.',
'data' => [
[
'visit_no' => '12345',
'patient_id' => $params['PATIENTID'],
'amount' => '100.00'
]
]
];
}
private function mockGetPendingDetails(array $params)
{
return [
'status' => 'success',
'message' => 'Pending details retrieved successfully.',
'data' => [
'cf_ids' => $params['CFID'],
'jz_xh' => $params['JZXH'],
'details' => 'Detailed description of the treatment.'
]
];
}
private function mockGetPaidLists(array $params)
{
return [
'status' => 'success',
'message' => 'Paid list retrieved successfully.',
'data' => [
[
'receipt_id' => 'R12345',
'amount' => '200.00',
'payment_date' => '2024-01-01'
]
]
];
}
private function mockGetPaidDetails(array $params)
{
return [
'status' => 'success',
'message' => 'Paid details retrieved successfully.',
'data' => [
'receipt_id' => $params['Rcptid'],
'amount' => '200.00',
'details' => 'Detailed description of the paid service.'
]
];
}
private function mockCreateElectronInvoice(array $params)
{
return [
'status' => 'success',
'message' => 'Electron invoice created successfully.',
'data' => $params
];
}
private function mockSendElectronInvoiceToHis(array $params)
{
return [
'status' => 'success',
'message' => 'Electron invoice sent successfully.',
'data' => $params
];
}
/**
* mockGetDictionaryLists
* @param array $params
* @return self
*/
private function mockGetDictionaryLists(array $params): self
{
$this->transfer_response = '<RESPONSE><RESULTCODE>0</RESULTCODE><ERRORMSG></ERRORMSG><ITEM><TYPEID>1</TYPEID><TYPENAME>手术费</TYPENAME></ITEM><ITEM><TYPEID>2</TYPEID><TYPENAME>治疗费</TYPENAME></ITEM><ITEM><TYPEID>3</TYPEID><TYPENAME>中药费</TYPENAME></ITEM><ITEM><TYPEID>4</TYPEID><TYPENAME>西药费</TYPENAME></ITEM><ITEM><TYPEID>5</TYPEID><TYPENAME>检查费</TYPENAME></ITEM><ITEM><TYPEID>6</TYPEID><TYPENAME>诊查费</TYPENAME></ITEM><ITEM><TYPEID>7</TYPEID><TYPENAME>护理费</TYPENAME></ITEM></RESPONSE>';
return $this;
}
/**
* mockGetChargeList
* @param array $params
* @return self
*/
private function mockGetChargeList(array $params): self
{
$this->transfer_response = '<RESPONSE><RESULTCODE>0</RESULTCODE><ERRORMSG></ERRORMSG><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>苯巴比妥片</COSTNAME><UNIT>片</UNIT><COSTSPEC>30MG</COSTSPEC><CDNAME>上海信谊药厂</CDNAME><PRICE>0.097</PRICE><REMARK></REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>阿莫西林胶囊</COSTNAME><UNIT>粒</UNIT><COSTSPEC>500MG</COSTSPEC><CDNAME>华北制药厂</CDNAME><PRICE>0.12</PRICE><REMARK>用于治疗细菌感染</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>复方氯噻吨片</COSTNAME><UNIT>片</UNIT><COSTSPEC>0.25G</COSTSPEC><CDNAME>长春药业</CDNAME><PRICE>0.15</PRICE><REMARK>缓解高血压症状</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>洛伐他汀片</COSTNAME><UNIT>片</UNIT><COSTSPEC>20MG</COSTSPEC><CDNAME>中科院制药</CDNAME><PRICE>0.25</PRICE><REMARK>降低血脂</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>维生素C片</COSTNAME><UNIT>片</UNIT><COSTSPEC>500MG</COSTSPEC><CDNAME>美国善格</CDNAME><PRICE>0.05</PRICE><REMARK>增强免疫力</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>布洛芬片</COSTNAME><UNIT>片</UNIT><COSTSPEC>200MG</COSTSPEC><CDNAME>华药集团</CDNAME><PRICE>0.1</PRICE><REMARK>缓解轻度疼痛</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>氯氮平片</COSTNAME><UNIT>片</UNIT><COSTSPEC>25MG</COSTSPEC><CDNAME>南京医药</CDNAME><PRICE>0.3</PRICE><REMARK>用于治疗精神分裂症</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>头孢克肟胶囊</COSTNAME><UNIT>粒</UNIT><COSTSPEC>500MG</COSTSPEC><CDNAME>石药集团</CDNAME><PRICE>0.18</PRICE><REMARK>抗菌药物</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>硝苯地平片</COSTNAME><UNIT>片</UNIT><COSTSPEC>10MG</COSTSPEC><CDNAME>国药集团</CDNAME><PRICE>0.2</PRICE><REMARK>用于治疗高血压</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>美托洛尔片</COSTNAME><UNIT>片</UNIT><COSTSPEC>25MG</COSTSPEC><CDNAME>拜耳制药</CDNAME><PRICE>0.22</PRICE><REMARK>用于治疗心脏病</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>甲硝唑片</COSTNAME><UNIT>片</UNIT><COSTSPEC>250MG</COSTSPEC><CDNAME>南京同仁堂</CDNAME><PRICE>0.12</PRICE><REMARK>用于治疗感染</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>阿托伐他汀片</COSTNAME><UNIT>片</UNIT><COSTSPEC>10MG</COSTSPEC><CDNAME>默沙东</CDNAME><PRICE>0.3</PRICE><REMARK>调节血脂</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>硫酸氢氯噻吨片</COSTNAME><UNIT>片</UNIT><COSTSPEC>12.5MG</COSTSPEC><CDNAME>齐鲁制药</CDNAME><PRICE>0.15</PRICE><REMARK>用于治疗水肿</REMARK></ITEM><ITEM><TYPENAME>西药费</TYPENAME><COSTNAME>兰索拉唑胶囊</COSTNAME><UNIT>粒</UNIT><COSTSPEC>30MG</COSTSPEC><CDNAME>百时美施贵宝</CDNAME><PRICE>0.18</PRICE><REMARK>治疗胃酸过多</REMARK></ITEM></RESPONSE>';
return $this;
}
}