lo7su / php-sdk-umc-temp
关于您的包功能的简短描述
This package is not auto-updated.
Last update: 2024-09-26 18:15:18 UTC
README
要求
PHP >= 7.4
BIT.UMC >=2.0.48.15(Prof)
BIT.UMC >=2.1.24.9(Corp)
安装
通过 composer 安装
在 composer.json
中添加包依赖
{
"require":{"alex-nzr/bit-umc-sdk":"dev-master"}
}
运行安装 composer
$ php composer.phar install
或者
composer require alex-nzr/bit-umc-sdk:dev-master
下载源代码
最新版本,解压并将其复制到项目文件夹中。
使用
发布 1C 数据库
为了使集成工作,1C 数据库必须在 Web 服务器上发布,并且能够接收外部资源的请求。
API
要开始使用 API,需要创建一个客户端实例,并传递必要的配置数据。
以下是一个示例。1C 用户登录名 - 1cUser
,密码 - 1cUserPassword
。1C 数据库已发布在 Web 服务器上,地址为 http://88.29.123.512:3500/umc/
。
use ANZ\BitUmc\SDK\Service\Builder\ClientBuilder;
$client = ClientBuilder::init()
->setLogin('1cUser')
->setPassword('1cUserPassword')
->setHttps(false)
->setAddress('88.29.123.512:3500')
->setBaseName('umc')
->build();
ClientBuilder 还有一个 setHsScope() 方法,用于通过 http 而不是 soap 连接。但这个功能尚未完全实现,大多数类只是占位符,因为 BIT.УМЦ 中的 http 服务不发达(在编写此说明时,有与 Bitrix24 和 ЕГИСЗ 集成以及创建潜在客户的服务的服务,还有一个创建候补者的服务)。
下一步是获取读取和写入信息的服务。
use ANZ\BitUmc\SDK\Service\Factory\ServiceFactory;
use ANZ\BitUmc\SDK\Tools\Debug;
$factory = new ServiceFactory($client);
$reader = $factory->getReader();
$writer = $factory->getWriter();
之后就可以开始与 1C 进行“交流”了。
诊所列表
$result = $reader->getClinics();
if ($result->isSuccess())
{
Debug::print($result->getData());
/*
Array
(
[4c68deb4-22c3-11df-8618-002618dcef2c] => Array
(
[uid] => 4c68deb4-22c3-11df-8618-002618dcef2c
[name] => Второй центр
)
[66abf7b4-2ff9-11df-8625-002618dcef2c] => Array
(
[uid] => 66abf7b4-2ff9-11df-8625-002618dcef2c
[name] => Третий центр
)
[f679444a-22b7-11df-8618-002618dcef2c] => Array
(
[uid] => f679444a-22b7-11df-8618-002618dcef2c
[name] => Центральная клиника
)
)
*/
}
else
{
Debug::print($result->getErrorMessages());
/*
Array
(
[0] => some error-1
[1] => some error-2
)
*/
}
所有方法中处理失败响应的方式与上述示例类似,因此后续示例中不再考虑。
员工列表
注意: 特殊化的唯一 ID 是从其名称在运行时生成的,因为无法通过现有的 API 从 1C 获取它。也只返回选定的主要专业化。API 中未规定获取额外的专业化。如果主要专业化未指定,员工在相应栏位中将显示“没有主要专业化”
$result = $reader->getEmployees();
if ($result->isSuccess())
{
Debug::print($result->getData());
/*
Array
(
[2eb1f97b-6a3c-11e9-936d-1856809fe650] => Array
(
[uid] => 2eb1f97b-6a3c-11e9-936d-1856809fe650
[name] => Юрий
[surname] => Безногов
[middleName] => Сергеевич
[fullName] => Безногов Юрий Сергеевич
[clinicUid] => f679444a-22b7-11df-8618-002618dcef2c
[photo] => "base64_encoded_photo"
[description] => 'Краткое описание из 1с'
[rating] =>
[specialtyName] => Офтальмология
[specialtyUid] => 0j7rhngc0ldqu9gm0lzqvtc70l7qs9c40y8
[services] => Array
(
[5210c9dc-65a2-11e9-936d-1856809fe650] => Array
(
[uid] => 5210c9dc-65a2-11e9-936d-1856809fe650
[personalDuration] => 0
)
[dc58bfa0-65b4-11e9-936d-1856809fe650] => Array
(
[uid] => dc58bfa0-65b4-11e9-936d-1856809fe650
[personalDuration] => 0
)
)
)
)
*/
}
目录
$clinicUid = 'f679444a-22b7-11df-8618-002618dcef2c';
$result = $reader->getNomenclature($clinicUid);
if ($result->isSuccess())
{
Debug::print($result->getData());
/*
Array
(
[a0230570-3ef7-11de-8086-001485c0d477] => Array
(
[uid] => a0230570-3ef7-11de-8086-001485c0d477
[name] => Массаж век
[typeOfItem] => Услуга
[artNumber] =>
[price] => 160
[duration] => 1800
[measureUnit] => мин
[parent] => 5210c9bf-65a2-11e9-936d-1856809fe650
)
[a0230571-3ef7-11de-8086-001485c0d477] => Array
(
[uid] => a0230571-3ef7-11de-8086-001485c0d477
[name] => Гель для массажа
[typeOfItem] => Материал
[artNumber] => K-101-55
[price] => 100
[duration] => 0
[measureUnit] => мл
[parent] => 85812f74-1cc9-11dc-b7bd-000461ac6871
)
)
*/
日程安排
注意: 特殊化的唯一 ID 是从其名称在运行时生成的,因为无法通过 1C 获取它
方法中的任何参数都不是必需的。默认情况下,返回所有诊所所有医生在接下来的 14 天的日程安排。
返回数组的结构如下
第一级键 — 诊所的唯一标识符。
第二级键 — 在该诊所可用的特殊化的唯一标识符。
第三级键 — 在上一级诊所中已形成日程安排的医生的唯一标识符,并且在上一个设置中选择的主要专业化在 1C 的设置中选中。
在医生的数据数组中,有他的姓名、专业名称、1C 设置中的接收时间长度(durationFrom1C)、从 1C 转换为秒的接收时间长度(durationInSeconds)以及日程安排(timetable)。
日程安排有三个键
free
- 不按接收时间长度拆分的总空闲时间。如果有占用时间段,则可以将其分割成部分。如果没有占用时间段,则将表示为等于相应员工工作日长度的单个区间。
busy
- 占用时间。
freeFormatted
- 自由时间,按1С的接收持续时间(durationFrom1C)间隔分割,或者如果没有收到持续时间数据,则按每30分钟一个间隔。
这三个部分都包含以“d-m-Y”格式为键的日期数组。内部相应地包含属于该天的时段。
typeOfTimeUid
- 时间图表类型标识符。除了标识符之外,不提供任何相关信息。
$period = 21;//days
$clinicUid = 'f679444a-22b7-11df-8618-002618dcef2c';
$employeeUids = [
'19cb6fa5-1578-11ed-9bee-5c3a455eb0d0',
'99868528-0928-11dc-93d1-0004614ae652',
'2eb1f97b-6a3c-11e9-936d-1856809fe650'
];
$res = $reader->getSchedule($period, $clinicUid, $employeUids);
if ($result->isSuccess())
{
Debug::print($result->getData());
/*
Array
(
[f679444a-22b7-11df-8618-002618dcef2c] => Array
(
[0klqtdga0ldqv9c40y8] => Array
(
[99868528-0928-11dc-93d1-0004614ae652] => Array
(
[specialtyName] => Терапия
[employeeName] => Денисов Дмитрий Алексеевич
[durationFrom1C] => 0001-01-01T00:00:00
[durationInSeconds] => 0
[timetable] => Array
(
[free] => Array
(
[21-09-2022] => Array
(
[0] => Array
(
[typeOfTimeUid] => 624f2a40-5aa8-4f01-83f4-0f38535364bb
[date] => 2022-09-21T00:00:00
[timeBegin] => 2022-09-21T08:00:00
[timeEnd] => 2022-09-21T12:00:00
[formattedDate] => 21-09-2022
[formattedTimeBegin] => 08:00
[formattedTimeEnd] => 12:00
)
)
)
[busy] => Array
(
)
[freeFormatted] => Array
(
[21-09-2022] => Array
(
[0] => Array
(
[typeOfTimeUid] => 624f2a40-5aa8-4f01-83f4-0f38535364bb
[date] => 2022-09-21T00:00:00
[timeBegin] => 2022-09-21T08:00:00
[timeEnd] => 2022-09-21T08:30:00
[formattedDate] => 21-09-2022
[formattedTimeBegin] => 08:00
[formattedTimeEnd] => 08:30
)
[1] => Array
(
[typeOfTimeUid] => 624f2a40-5aa8-4f01-83f4-0f38535364bb
[date] => 2022-09-21T00:00:00
[timeBegin] => 2022-09-21T08:30:00
[timeEnd] => 2022-09-21T09:00:00
[formattedDate] => 21-09-2022
[formattedTimeBegin] => 08:30
[formattedTimeEnd] => 09:00
)
[2] => Array
(
[typeOfTimeUid] => 624f2a40-5aa8-4f01-83f4-0f38535364bb
[date] => 2022-09-21T00:00:00
[timeBegin] => 2022-09-21T09:00:00
[timeEnd] => 2022-09-21T09:30:00
[formattedDate] => 21-09-2022
[formattedTimeBegin] => 09:00
[formattedTimeEnd] => 09:30
)
...
)
)
)
)
)
[0j7rhngc0ldqu9gm0lzqvtc70l7qs9c40y8] => Array
(
[ac30e13a-3087-11dc-8594-005056c00008] => Array
(
[specialtyName] => Офтальмология
[employeeName] => Барбышева Евгения Петровна
[durationFrom1C] => 0001-01-01T00:00:00
[durationInSeconds] => 0
[timetable] => Array
(
[free] => Array
(
[21-09-2022] => Array
(
[0] => Array
(
[typeOfTimeUid] => 624f2a40-5aa8-4f01-83f4-0f38535364bb
[date] => 2022-09-21T00:00:00
[timeBegin] => 2022-09-21T12:00:00
[timeEnd] => 2022-09-21T14:00:00
[formattedDate] => 21-09-2022
[formattedTimeBegin] => 12:00
[formattedTimeEnd] => 14:00
)
[1] => Array
(
[typeOfTimeUid] => 624f2a40-5aa8-4f01-83f4-0f38535364bb
[date] => 2022-09-21T00:00:00
[timeBegin] => 2022-09-21T15:00:00
[timeEnd] => 2022-09-21T16:00:00
[formattedDate] => 21-09-2022
[formattedTimeBegin] => 15:00
[formattedTimeEnd] => 16:00
)
)
)
[busy] => Array
(
[21-09-2022] => Array
(
[0] => Array
(
[typeOfTimeUid] =>
[date] => 2022-09-21T00:00:00
[timeBegin] => 2022-09-21T14:00:00
[timeEnd] => 2022-09-21T15:00:00
[formattedDate] => 21-09-2022
[formattedTimeBegin] => 14:00
[formattedTimeEnd] => 15:00
)
)
)
[freeFormatted] => Array
(
[21-09-2022] => Array
(
[0] => Array
(
[typeOfTimeUid] => 624f2a40-5aa8-4f01-83f4-0f38535364bb
[date] => 2022-09-21T00:00:00
[timeBegin] => 2022-09-21T12:00:00
[timeEnd] => 2022-09-21T12:30:00
[formattedDate] => 21-09-2022
[formattedTimeBegin] => 12:00
[formattedTimeEnd] => 12:30
)
[1] => Array
(
[typeOfTimeUid] => 624f2a40-5aa8-4f01-83f4-0f38535364bb
[date] => 2022-09-21T00:00:00
[timeBegin] => 2022-09-21T12:30:00
[timeEnd] => 2022-09-21T13:00:00
[formattedDate] => 21-09-2022
[formattedTimeBegin] => 12:30
[formattedTimeEnd] => 13:00
)
[2] => Array
(
[typeOfTimeUid] => 624f2a40-5aa8-4f01-83f4-0f38535364bb
[date] => 2022-09-21T00:00:00
[timeBegin] => 2022-09-21T13:00:00
[timeEnd] => 2022-09-21T13:30:00
[formattedDate] => 21-09-2022
[formattedTimeBegin] => 13:00
[formattedTimeEnd] => 13:30
)
...
)
)
)
)
)
)
)
*/
申请状态
$orderUid = '39d9b2f9-35db-11ed-9bf2-5e3a455eb0cf';
$result = $reader->getOrderStatus($orderUid);
if ($result->isSuccess())
{
Debug::print($result->getData());
/*
Array
(
[statusId] => 1
[status] => Новая
)
*/
创建等待列表
用于配置申请参数的是单独的OrderBuilder类
use ANZ\BitUmc\SDK\Service\Builder\OrderBuilder;
//В качестве даты и времени записи передаётся php-объект \DateTime, созданный любым удобным способом
$dateTimeBegin = \DateTime::createFromFormat("d.m.Y H:i:s", "21.09.2022 14:00:00");
$clinicUid = 'f679444a-22b7-11df-8618-002618dcef2c';
$waitList = OrderBuilder::createWaitList()
->setSpecialtyName('Стоматология')
->setName('Иван')
->setLastName('Иванов')
->setSecondName('Иванович')
->setDateTimeBegin($dateTimeBegin)
->setPhone("+7 (915) 5415935")
->setEmail('example@gmail.com')
->setAddress('г. Москва, проспект Ленина 45')
->setClinicUid($clinicUid)
->setComment('Comment text')
->build();
$result = $writer->sendWaitList($waitList);
if ($result->isSuccess())
{
Debug::print($result->getData());
/*
Array
(
[success] => true
)
*/
时间预订
实质上,这与登记接收时的申请相同,但需要更少的参数,1С中的申请状态将是“已预订”,并且将返回创建的申请的唯一标识符,可以用于更新或删除它。在创建完整申请(登记接收)时,BIT.УМЦ API不会返回其标识符。因此,如果需要在某处存储创建的申请并以后使用,则需要进行预订。
use ANZ\BitUmc\SDK\Service\Builder\OrderBuilder;
//В качестве даты и времени записи передаётся php-объект \DateTime, созданный любым удобным способом
$dateTimeBegin = \DateTime::createFromFormat("d.m.Y H:i:s", "21.09.2022 14:00:00");
$clinicUid = 'f679444a-22b7-11df-8618-002618dcef2c';
$employeeUid = '19cb6fa5-1578-11ed-9bee-5c3a455eb0d0';
$reserve = OrderBuilder::createReserve()
->setClinicUid($clinicUid)
->setSpecialtyName('Стоматология')
->setEmployeeUid($employeeUid)
->setDateTimeBegin($dateTimeBegin)
->build();
$res = $writer->sendReserve($reserve);
if ($result->isSuccess())
{
Debug::print($result->getData());
/*
Array
(
[uid] => 54cd6a89-3912-11ed-9bf2-5e3a455eb0cf
)
*/
登记接收
use ANZ\BitUmc\SDK\Service\Builder\OrderBuilder;
//В качестве даты и времени записи передаётся php-объект \DateTime, созданный любым удобным способом
$dateTimeBegin = \DateTime::createFromFormat("d.m.Y H:i:s", "21.09.2022 14:00:00");
$clinicUid = 'f679444a-22b7-11df-8618-002618dcef2c';
$employeeUid = '19cb6fa5-1578-11ed-9bee-5c3a455eb0d0';
$serviceUid1 = '22d1b486-b34b-11de-8171-001583078ee5';
$serviceUid2 = '24d1b331-b562-11de-8133-001583078ee6';
$clientBirthday = \DateTime::createFromFormat("d.m.Y", "05.08.1962");
$order = OrderBuilder::createOrder()
->setEmployeeUid($employeeUid)
->setName('Антон')
->setLastName('Печкин')
->setSecondName('Павлович')
->setDateTimeBegin($dateTimeBegin)
->setPhone("+79000803126")
->setEmail('ppp@gmail.com')
->setAddress('г. Москва, проспект Ленина 46')
->setClinicUid($clinicUid)
->setComment('Comment text')
->setServices( [ $serviceUid1, $serviceUid2 ] )
->setClientBirthday($clientBirthday)
//переданная длительность не учитывается если указаны услуги (setServices)
->setAppointmentDuration(2700)
//если не устанавливать идентификатор или передать пустую строку, то создастся новая заявка, иначе будет изменена старая
->setOrderUid('39d9b2f9-35db-11ed-9bf2-5e3a455eb0cf')
->build();
$res = $writer->sendOrder($order);
if ($result->isSuccess())
{
Debug::print($result->getData());
/*
Array
(
[success] => true
)
*/
删除申请
$orderUid = '39d9b2f9-35db-11ed-9bf2-5e3a455eb0cf';
$result = $writer->deleteOrder($orderUid);
if ($result->isSuccess())
{
Debug::print($result->getData());
/*
Array
(
[success] => true
)
*/
工作示例
目前,您可以在这里查看方法调用的示例:这里。
将来,可能会包括前端在内的完整示例。