lo7su/php-sdk-umc-temp

此包的最新版本(dev-main)没有提供许可证信息。

关于您的包功能的简短描述

dev-main 2024-02-11 13:32 UTC

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
        )
        */

工作示例

目前,您可以在这里查看方法调用的示例:这里

将来,可能会包括前端在内的完整示例。