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.
285 lines
16 KiB
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;
|
|
}
|
|
}
|
|
|