Ìèíèñòåðñòâî íàóêè è âûñøåãî îáðàçîâàíèÿ Ðîññèéñêîé Ôåäåðàöèè
Ôåäåðàëüíîå ãîñóäàðñòâåííîå áþäæåòíîå îáðàçîâàòåëüíîå
ó÷ðåæäåíèå âûñøåãî îáðàçîâàíèÿ
¾Èðêóòñêèé ãîñóäàðñòâåííûé óíèâåðñèòåò¿
(ÔÃÁÎÓ ÂÎ ¾ÈÃÓ¿)
Èíñòèòóò ìàòåìàòèêè è èíôîðìàöèîííûõ òåõíîëîãèé
Êàôåäðà àëãåáðàè÷åñêèõ è èíôîðìàöèîííûõ ñèñòåì
ÂÛÏÓÑÊÍÀß ÊÂÀËÈÔÈÊÀÖÈÎÍÍÀß ÐÀÁÎÒÀ ÁÀÊÀËÀÂÐÀ
ïî íàïðàâëåíèþ ¾09.03.03 Ïðèêëàäíàÿ èíôîðìàòèêà¿
ïðîôèëü ïîäãîòîâêè ¾Èíôîðìàöèîííàÿ ñôåðà¿
ÖÈÔÐÎÂÀß ÒÐÀÍÑÔÎÐÌÀÖÈß ÑÅÒÈ
ÏÀÐÈÊÌÀÕÅÐÑÊÈÕ È ÁÀÐÁÅÐØÎÏÎÂ
Ñòóäåíò 4 êóðñà î÷íîãî îòäåëåíèÿ
Ãðóïïà 02461ÄÁ
Ïîíîìàðåâà
Åêàòåðèíà Âÿ÷åñëàâîâíà
Ðóêîâîäèòåëü:
ê.ô.-ì.í., äîöåíò
Ðÿáåö Ë.Â.
Äîïóùåíà ê çàùèòå
Çàâ. êàôåäðîé, ä.ô.-ì.í.
Ïàíòåëååâ Â.È.
Èðêóòñê 2021
ÑÎÄÅÐÆÀÍÈÅ
ÂÂÅÄÅÍÈÅ
3
Ãëàâà 1. Çàäà÷à óïðàâëåíèÿ ïîòîêîì êëèåíòîâ è èõ èäåíòèôèêàöèè ïî ëèöó
5
1.1. Àíàëèç ïðåäìåòíîé îáëàñòè . . . . . . . . . . . . . . . . . . . . . .
5
1.2. Îáçîð ñóùåñòâóþùèõ ïðîãðàììíûõ ïðîäóêòîâ, ñîîòâåòñòâóþùèõ
ïðåäìåòíîé îáëàñòè . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Ïîñòàíîâêà çàäà÷è
6
. . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1.4. Ñðåäà ðåàëèçàöèè ìîäóëåé . . . . . . . . . . . . . . . . . . . . . . .
13
Ãëàâà 2. Ðàçðàáîòêà ìîäóëåé èíôîðìàöèîííîé ñðåäû ïàðèêìàõåðñêèõ
16
2.1. Ðåàëèçàöèÿ ìîäóëÿ äëÿ èäåíòèôèêàöèè êëèåíòîâ ïî ëèöó . . . . .
16
2.2. Ðåàëèçàöèÿ ìîäóëÿ äëÿ óïðàâëåíèÿ ïîòîêîì êëèåíòîâ . . . . . . .
24
ÇÀÊËÞ×ÅÍÈÅ
32
ÑÏÈÑÎÊ ÈÑÏÎËÜÇÎÂÀÍÍÛÕ ÈÑÒÎ×ÍÈÊÎÂ
33
ÏÐÈËÎÆÅÍÈÅ 1. Ôóíêöèè äëÿ çàïðîñà èäåíòèôèêàöèè êëèåíòà èç ìîáèëüíîãî ïðèëîæåíèÿ
ÏÐÈËÎÆÅÍÈÅ 2. Ïîèñê èñòîðèè êëèåíòà ïî åãî ôîòî
36
38
ÏÐÈËÎÆÅÍÈÅ 3. Àëãîðèòì âûáîðà âðåìåíè â î÷åðåäè ó ìàñòåðà 42
ÏÐÈËÎÆÅÍÈÅ 4. API èäåíòèôèêàöèè êëèåíòà
45
ÏÐÈËÎÆÅÍÈÅ 5. API ýëåêòðîííîé î÷åðåäè
50
ÂÂÅÄÅÍÈÅ
Ñîâðåìåííûé áèçíåñ ñòàíîâèòñÿ íåðàçðûâíî ñâÿçàí ñ òåõíîëîãèÿìè. Âñ¼
áîëüøóþ ðîëü íà÷èíàåò èãðàòü íå òîëüêî àâòîìàòèçàöèÿ ïðîöåññîâ êîìïàíèè,
íî è èõ öèôðîâèçàöèÿ. Öèôðîâèçàöèÿ îòêðûâàåò áîëüøèå âîçìîæíîñòè â ñôåðå
èíôîðìàöèîííûõ òåõíîëîãèé äëÿ òðàäèöèîííûõ îðãàíèçàöèé, êîòîðûå íå ÿâëÿþòñÿ ÈÒ-êîìïàíèÿìè. Îäíàêî äâèæåíèå â ýòîì íàïðàâëåíèè òðåáóåò îò íèõ
ïåðåñòðîéêè âíóòðåííèõ è âíåøíèõ áèçíåñ-ïðîöåññîâ, ðàçâèòèå íîâûõ ïðàêòèê
óïðàâëåíèÿ è ïðèâëå÷åíèÿ ñïåöèàëèñòîâ ñ íîâûìè êîìïåòåíöèÿìè [3].
Ãîñóäàðñòâî òàêæå îñîçíàåò íåîáõîäèìîñòü ðàçâèòèÿ ïåðñïåêòèâíûõ âûñîêîòåõíîëîãè÷íûõ íàïðàâëåíèé.  ðàìêàõ ôåäåðàëüíîãî ïðîåêòà ¾Öèôðîâûå
òåõíîëîãèè¿ [7] áûëè ðàçðàáîòàíû äîðîæíûå êàðòû ïî ðàçâèòèþ ñêâîçíûõ öèôðîâûõ òåõíîëîãèé òåõíîëîãèé íå ñâÿçàíûõ ñ êàêèì-òî îòäåëüíûì ïðîäóêòîì
èëè ñôåðîé äåÿòåëüíîñòè, à ïðèìåíèìûõ âî ìíîãèõ èíäóñòðèÿõ, îòðàñëÿõ è
ñåêòîðàõ ýêîíîìèêè [11].
 ñâÿçè ñ ðàçâèòèåì ñîâðåìåííûõ íàïðàâëåíèé è òåõíîëîãèé ïîÿâëÿþòñÿ
íîâûå ïðîãðàììíûå ïðîäóêòû, êîòîðûå ïðåäíàçíà÷åíû äëÿ ðåøåíèÿ ðàçëè÷íûõ
çàäà÷ áèçíåñà.
Ñðåäè ýòèõ çàäà÷ ìîæíî âûäåëèòü îäíó èç âàæíåéøèõ ïîâûøåíèå óðîâíÿ ëîÿëüíîñòè êëèåíòîâ. Êîìïàíèè çàèíòåðåñîâàíû â òîì, ÷òîáû ëþäè, ñ êîòîðûìè îíè ðàáîòàþò, ÷óâñòâîâàëè ñåáÿ ìàêñèìàëüíî êîìôîðòíî è áûëè äîâîëüíû
êà÷åñòâîì ïðåäîñòàâëÿåìûõ óñëóã. Îäíîé èç òàêèõ êîìïàíèé ÿâëÿåòñÿ ìåæäóíàðîäíàÿ ñåòü ïàðèêìàõåðñêèõ è áàðáåðøîïîâ ¾Áðàäîáðåé¿ [2]. Äàííàÿ êîìïàíèÿ
óæå èñïîëüçóåò ðàçëè÷íûå ïðîãðàììíûå ïðîäóêòû äëÿ àâòîìàòèçàöèè ñâîèõ
âíóòðåííèõ áèçíåñ-ïðîöåññîâ. Îäíàêî òåïåðü îíè õîòåëè áû ðàñøèðèòü óñïåøíûé îïûò è âîñïîëüçîâàòüñÿ òåõíîëîãèÿìè äëÿ óëó÷øåíèÿ êà÷åñòâà è ñêîðîñòè
îáñëóæèâàíèÿ êëèåíòîâ ïóòåì ñîçäàíèÿ îíëàéí-î÷åðåäè è áàçû ñòðèæåê êëèåíòîâ ñ ïîèñêîì ïî ëèöàì.  ñâÿçè ñ ýòèì
ïðàêòè÷åñêè çíà÷èìîé
ÿâëÿåòñÿ
3
çàäà÷à äîðàáîòêè ïðîãðàììíîãî îáåñïå÷åíèÿ äàííîé êîìïàíèè.
Öåëüþ
âûïóñêíîé êâàëèôèêàöèîííîé ðàáîòû ÿâëÿåòñÿ äîðàáîòêà ñóùå-
ñòâóþùåãî ìîáèëüíîãî ïðèëîæåíèÿ è êîíôèãóðàöèè íà ïëàòôîðìå ¾1Ñ: Ïðåäïðèÿòèå¿ è ñîçäàíèå web-ñàéòà äëÿ ýëåêòðîííîé î÷åðåäè.
Äëÿ äîñòèæåíèÿ ïîñòàâëåííîé öåëè íåîáõîäèìî áûëî ðåøèòü ñëåäóþùèå
îñíîâíûå
çàäà÷è:
1) ïðîâåñòè îáçîð è ñðàâíèòåëüíûé àíàëèç ñóùåñòâóþùèõ àíàëîãîâ äëÿ èäåíòèôèêàöèè êëèåíòîâ ïî ôîòî è ýëåêòðîííîé î÷åðåäè;
2) ðàññìîòðåòü ñïîñîáû îðãàíèçàöèè ýëåêòðîííîé î÷åðåäè;
3) ðåàëèçîâàòü ìîäóëü îíëàéí-î÷åðåäè;
4) ðåàëèçîâàòü ìîäóëü äëÿ õðàíåíèÿ è ïîèñêà ôîòîãðàôèé ñòðèæåê êëèåíòîâ;
Ñòðóêòóðà âûïóñêíîé êâàëèôèêàöèîííîé ðàáîòû.
Äàííàÿ ðàáîòà
ïðåäñòàâëåíà íà 54 ñòðàíèöàõ, ñîñòîèò èç ââåäåíèÿ, 2 ãëàâ, çàêëþ÷åíèÿ, ñïèñêà
èñïîëüçîâàííûõ èñòî÷íèêîâ è 5 ïðèëîæåíèé.  ðàáîòå ïðèñóòñòâóþò 2 ëèñòèíãà,
17 ðèñóíêîâ è 2 òàáëèöû.
4
Ãëàâà 1. Çàäà÷à óïðàâëåíèÿ ïîòîêîì êëèåíòîâ è èõ
èäåíòèôèêàöèè ïî ëèöó
1.1. Àíàëèç ïðåäìåòíîé îáëàñòè
 âûïóñêíîé êâàëèôèêàöèîííîé ðàáîòå ðàññìàòðèâàåòñÿ äâà ìîäóëÿ: äëÿ
óïðàâëåíèÿ ýëåêòðîííîé î÷åðåäüþ è äëÿ èäåíòèôèêàöèè êëèåíòà ïî ëèöó. Â
óñëîâèÿõ îãðàíè÷åíèé èç-çà ïàíäåìèè COVID-19 êîìïàíèè áûëè âûíóæäåíû
óìåíüøèòü êîëè÷åñòâî ïîñåòèòåëåé, îäíîâðåìåííî íàõîäÿùèõñÿ â ïîìåùåíèè.
Âàðèàíòàìè ðåøåíèÿ ýòîé ïðîáëåìû ÿâëÿåòñÿ îñóùåñòâëåíèå çàïèñè íà êîíêðåòíîå âðåìÿ èëè îðãàíèçàöèÿ ýëåêòðîííîé î÷åðåäè. Ó îáîèõ ñïîñîáîâ åñòü
äîñòîèíñòâà è íåäîñòàòêè. Â òàáë. 1 ïðåäñòàâëåíî ñðàâíåíèÿ ýòèõ ñïîñîáîâ è
îáû÷íîé ¾æèâîé¿ î÷åðåäè, êîòîðóþ èñïîëüçîâàëè ìíîãèå êîìïàíèè äî ââåäåíèÿ îãðàíè÷åíèé.
Ýëåêòðîííàÿ î÷åðåäü ýòî êîìïëåêñ àïïàðàòíûõ è ïðîãðàììíûõ ñðåäñòâ,
êîòîðûå ïîçâîëÿþ óïðàâëÿòü î÷åðåäüþ â àâòîìàòè÷åñêîì ðåæèìå [12].
Îíëàéí-î÷åðåäü ýòî ñïîñîá îðãàíèçàöèè ýëåêòðîííîé î÷åðåäè, ïðè êîòîðîì ïîëó÷åíèå ïîðÿäêîâîãî íîìåðà îñóùåñòâëÿåòñÿ ÷åðåç web-ñàéò èëè ìîáèëüíîå ïðèëîæåíèå.
Òàáëèöà 1
Ñðàâíåíèå ñïîñîáîâ óïðàâëåíèÿ ïîòîêîì êëèåíòîâ
Ïàðàìåòð
Çàïèñü íà Îáû÷íàÿ
Ýëåêòðîííàÿ Îíëàéíâðåìÿ íà î÷åðåäü
î÷åðåäü
ñ î÷åðåäü
ñàéòå
òåðìèíàëîì
Âûáîð êîíêðåòíî- Óäîáíî
Íå óäîáíî Óäîáíî
Óäîáíî
ãî ìàñòåðà
Îòñëåæèâàíèå
Óäîáíî
Íå óäîáíî Íå óäîáíî
Óäîáíî
âðåìåíè
Îòñóòñòâèå
−
+
+
+
¾îêîí¿
ìåæäó
êëèåíòàìè
5
Âîçìîæíîñòü çà- +
ïèñàòüñÿ/âñòàòü â
î÷åðåäü óäàëåííî
Îòñóòñòâèå êîí- +
òàêòîâ ñ ëþäüìè
Ïðîäîëæåíèå òàá. 1
−
−
+
−
−
+
Îñíîâíûì ïðåèìóùåñòâîì èäåè î÷åðåäè íàä çàïèñüþ äëÿ êîìïàíèé, îñóùåñòâëÿþùèõ óñëóãè, ÿâëÿåòñÿ îòñóòñòâèå ¾îêîí¿ ìåæäó êëèåíòàìè â ñëó÷àå,
åñëè çàïèñàííûé ÷åëîâåê íå ïðèøåë. Íåïðåðûâíûé ïîòîê êëèåíòîâ èñêëþ÷àåò
âîçìîæíîñòü ¾ïðîñòîÿ¿ ñîòðóäíèêîâ, âî âðåìÿ êîòîðîãî êîìïàíèÿ íå ïîëó÷àåò
ïðèáûëè.
Ðàññìîòðèì ïðåäìåòíóþ îáëàñòü, êàñàþùóþñÿ âòîðîãî ìîäóëÿ âûïóñêíîé
êâàëèôèêàöèîííîé ðàáîòû: ðàñïîçíàâàíèÿ ëèö.
Ðàñïîçíàâàíèå ëèö ìîæåò îñóùåñòâëÿòüñÿ ñ öåëüþ âåðèôèêàöèè èëè ñ öåëüþ èäåíòèôèêàöèè. Âåðèôèêàöèÿ (èëè àóòåíòèôèêàöèÿ) ýòî ïîäòâåðæäåíèå
èäåíòè÷íîñòè ïåðåäàííîãî íà ðàñïîçíàâàíèå ëèöà îäíîèìåííîìó ëèöó â áàçå
äàííûõ. Åñëè çàäà÷åé ðàñïîçíàâàíèÿ ÿâëÿåòñÿ âûáîð èç áàçû äàííûõ íàèáîëåå
ïîõîæåãî íà ïåðåäàííîå èçîáðàæåíèå ëèöà, òî ýòó çàäà÷ó ìîæíî îïðåäåëèòü êàê
èäåíòèôèêàöèþ [5].
Äëÿ CRM-ñèñòåì çàäà÷à èäåíòèôèêàöèè ÿâëÿåòñÿ áîëåå àêòóàëüíîé, òàê
êàê ñðåäè âñåõ êëèåíòîâ êîìïàíèè íåîáõîäèìî íàéòè êîíêðåòíîãî, à òàêæå èíôîðìàöèþ î ïðîøëîì âçàèìîäåéñòâèè ñ íèì.
1.2. Îáçîð ñóùåñòâóþùèõ ïðîãðàììíûõ ïðîäóêòîâ,
ñîîòâåòñòâóþùèõ ïðåäìåòíîé îáëàñòè
 õîäå èññëåäîâàíèÿ áûë ïðîâåäåí ïîèñê è àíàëèç óæå ñóùåñòâóþùèõ
ïðîãðàììíûõ ïðîäóêòîâ ïî àâòîìàòèçàöèè î÷åðåäè è èäåíòèôèêàöèè êëèåíòîâ
ïî ëèöó.
6
Ïðîãðàììíûå ïðîäóêòû äëÿ óïðàâëåíèÿ ïîòîêîì êëèåíòîâ
Áûëè ïðîàíàëèçèðîâàíû ñëåäóþùèå ïðîãðàììíûå ïðîäóêòû äëÿ óïðàâëåíèÿ ïîòîêîì êëèåíòîâ:
¾YCLIENTS¿;
Ýëåêòðîííàÿ î÷åðåäü îò êîìïàíèè ¾BR System¿;
¾YCLIENTS¿
ýòî îáëà÷íûé ñåðâèñ äëÿ àâòîìàòèçàöèè ïðîöåññîâ êîì-
ïàíèè ñôåðû óñëóã [16]. Âîçìîæíîñòè äàííîé ñèñòåìû òàêæå âêëþ÷àþò â ñåáÿ
îíëàéí-çàïèñü. Íàñòðîéêè ïîçâîëÿþò óïðàâëÿòü êàòåãîðèÿìè óñëóã, äîáàâëÿòü
ñîòðóäíèêîâ îðãàíèçàöèè, óêàçûâàòü ðàáî÷èå ÷àñû è âîçìîæíîñòü îòìåíû èëè
ïåðåíîñà çàïèñè. Íà ðèñ. 1 ïðîäåìîíñòðèðîâàíà ðàáîòà ïðîãðàììû.
Ðèñóíîê 1. Ôîðìà çàïèñè äëÿ êëèåíòà
Ýëåêòðîííàÿ î÷åðåäü îò êîìïàíèè ¾BR System¿
[13] ýòî îáëà÷-
íûé ñåðâèñ, êîòîðûé ïîçâîëÿåò îðãàíèçîâàòü î÷åðåäü áåç ïðèìåíåíèÿ ñïåöèàëüíîãî îáîðóäîâàíèÿ. Ñîçäàòåëè ñåðâèñà ïðåäëàãàþò ðàñïå÷àòàòü óíèêàëüíûé
7
QR-êîä äëÿ êîìïàíèè, îòñêàíèðîâàâ êîòîðûé êëèåíò ïîïàäàåò íà ñàéò è ïîëó÷àåò ñâîé íîìåð â î÷åðåäè. Ïðèìåð ýëåêòðîííîãî òàëîíà ïðåäñòàâëåí íà ðèñ. 2.
Ðèñóíîê 2. Ýëåêòðîííûé òàëîí
Êîãäà ïîäõîäèò î÷åðåäü êëèåíòà, òî åìó íà óñòðîéñòâî ïðèõîäèò óâåäîìëåíèå. Òàêæå åñòü âîçìîæíîñòü âûâåñòè íà òàáëî â çîíå îæèäàíèÿ òåêóùåå
ñîñòîÿíèå î÷åðåäè.
 íàñòðîéêàõ ñåðâèñà ìîæíî óêàçàòü ñðåäíåå âðåìÿ íà îêàçàíèå óñëóãè, è
ïðè ïîëó÷åíèè ýëåêòðîííîãî òàëîíà êëèåíò óçíàåò ïðèìåðíîå âðåìÿ îæèäàíèÿ.
Îñíîâíîå îòëè÷èå ñåðâèñà êîìïàíèè ¾BR System¿ îò ¾YCLIENTS¿ ñîñòîèò â îòñóòñòâèè çàïèñè íà êîíêðåòíîå âðåìÿ, ÷òî ïîçâîëÿåò èçáåæàòü ¾îêîí¿ â
ðàáîòå ñîòðóäíèêîâ. Áîëåå ïîäðîáíîå ñðàâíåíèå ïðåäñòàâëåíî â òàáë. 2.
Òàáëèöà 2
Ñðàâíåíèå ¾BR System¿ è ¾YCLIENTS¿
Ïàðàìåòð
¾BR System¿
¾YCLIENTS¿
Âûáîð êîíêðåòíîãî ìàñòåðà ×åðåç
ñîçäàíèå +
íåñêîëüêèõ
ëè÷íûõ êàáèíåòîâ
Îòñóòñòâèå ¾îêîí¿ ìåæäó +
−
êëèåíòàìè
Âîçìîæíîñòü çàïèñàòüñÿ/â- +
+
ñòàòü â î÷åðåäü óäàëåííî
Èíòåãðàöèÿ ñ êîíôèãóðàöèåé −
×åðåç API
¾1Ñ: Ñàëîí êðàñîòû¿
Áåñïëàòíûé ñåðâèñ
+
−
8
Ðàññìîòðåííûå ïðîãðàììíûå ïðîäóêòû áîëüøå ïîäõîäÿò äëÿ èñïîëüçîâàíèÿ îðãàíèçàöèÿìè, â êîòîðûõ îòñóòñòâóåò ñîáñòâåííàÿ ó÷åòíàÿ ñèñòåìà, òàê
êàê èíòåãðàöèÿ ñóùåñòâóþùèõ ðåøåíèé ñ ïðîãðàììíûìè ïðîäóêòàìè êîìïàíèè
íå âñåãäà âîçìîæíà.
 ñåòè ¾Áðàäîáðåé¿ èñïîëüçóåòñÿ àâòîìàòèçàöèÿ íà ïëàòôîðìå ¾1Ñ: Ïðåäïðèÿòèå¿, ïîýòîìó ìîäóëü ýëåêòðîííîé î÷åðåäè äîëæåí áûòü ÷àñòüþ ñóùåñòâóþùåãî ïðîãðàììíîãî êîìïëåêñà îðãàíèçàöèè. Ýòî ïîñëóæèëî ïðè÷èíîé íåîáõîäèìîñòè ðàçðàáîòêè ñîáñòâåííîé ñèñòåìû äëÿ îíëàéí-î÷åðåäè.
Ïðîãðàììíûå ïðîäóêòû äëÿ èäåíòèôèêàöèè êëèåíòîâ ïî ëèöó
Ðàññìîòðèì ñëåäóþùèå ïðîãðàììíûå ïðîäóêòû äëÿ èäåíòèôèêàöèè êëèåíòîâ ïî ëèöó:
¾Face Recognition¿ äëÿ ¾Dynamics 365 CRM¿;
¾Âèçèò-òðåêåð¿ äëÿ ¾Áèòðèêñ 24¿.
¾Face Recognition¿
äëÿ ¾Dynamics 365 CRM¿ ïîçâîëÿåò íàõîäèòü ëèöà
â íåïðåðûâíîì âèäåîïîòîêå ñ âåá-êàìåðû è ñîîòíîñèòü èõ ñ ïðîôèëÿìè êëèåíòîâ â ¾Microsoft Dynamics 365 CRM¿ [14].  êàðòî÷êó êëèåíòà ïðåäâàðèòåëüíî
íåîáõîäèìî äîáàâèòü ôîòîãðàôèþ, à çàòåì ñëóæáà Azure Cognitive Services ðàñïîçíàåò ëèöî íà ôîòîãðàôèè è ÷åðåç Face API ñîçäàåò åãî ¾ñëåïîê¿ â õðàíèëèùå
Azure Person ID. Ïðèìåð èíòåðôåéñà ñèñòåìû ïðåäñòàâëåí íà ðèñ. 3
¾Âèçèò-òðåêåð¿
ýòî îäèí èç ïîäêëþ÷àåìûõ ê ¾Áèòðèêñ 24¿ ìîäóëåé,
êîòîðûé ïîçâîëÿåò èäåíòèôèöèðîâàòü êëèåíòîâ ïî ôîòîãðàôèè ëèöà íà âåáêàìåðó, âåñòè çàïèñü ðàçãîâîðà, èñêàòü ïðîôèëü â ñîöèàëüíîé ñåòè ¾ÂÊîíòàêòå¿
ïî ôîòîãðàôèè, ñâÿçûâàòü èíôîðìàöèþ èç ¾Âèçèò-òðåêåðà¿ ñ CRM [1]. Ïðèìåð
èíòåðôåéñà ñèñòåìû ïðåäñòàâëåí íà ðèñ. 4.
Ðàññìîòðåííûå ïðîãðàììíûé ïðîäóêòû ÿâëÿþòñÿ àêòóàëüíûìè è õîðîøî
ïðèìåíèìûìè â ñâîåé îáëàñòè. Îäíàêî íå ñóùåñòâóåò ñèñòåìû, êîòîðàÿ ïîçâîëÿëà áû ïðîèçâîäèòü èäåíòèôèêàöèþ êëèåíòà íå ïðè ïîìîùè âåá-êàìåðû, à ñ
9
Ðèñóíîê 3. Èäåíòèôèêàöèÿ êëèåíòà â ¾Dynamics 365 CRM¿
Ðèñóíîê 4. Ôèêñàöèÿ ïîñåùåíèÿ êëèåíòà
ïîìîùüþ âñòðîåííîé êàìåðû ìîáèëüíîãî óñòðîéñòâà è ïðè ýòîì èìåëà èíòåãðàöèþ ñ êîíôèãóðàöèåé ¾1Ñ: Ñàëîí êðàñîòû¿, ïîýòîìó ïîÿâëÿåòñÿ íåîáõîäèìîñòü
â ñîçäàíèè òàêîãî ïðîãðàììíîãî ïðîäóêòà.
10
1.3. Ïîñòàíîâêà çàäà÷è
Ìîäóëü äëÿ èäåíòèôèêàöèè êëèåíòîâ ïî ëèöó
Êîìïàíèÿ ¾Áðàäîáðåé¿ èñïîëüçóåò ìîáèëüíîå ïðèëîæåíèå, êîòîðîå ïîçâîëÿåò ðàáîòíèêàì âåñòè ó÷åò ñâîåãî âðåìåíè, îñóùåñòâëÿòü ïîäáîð íîìåíêëàòóðû èç ïðàéñ-ëèñòà è ïðîáèâàòü ÷åêè. Áûëî ïðåäëîæåíî ðàñøèðåíèå âîçìîæíîñòåé ïðèëîæåíèÿ äëÿ ïîâûøåíèÿ óðîâíÿ îáñëóæèâàíèÿ êëèåíòîâ. Ñòîÿëà ïðîáëåìà, ñâÿçàííàÿ ñ òåì, ÷òî êëèåíòû ïðåäïî÷èòàþò êàæäûé ðàç îáðàùàòüñÿ ê
îäíîìó è òîìó æå ìàñòåðó. Ïîñëå ïðîâåäåííîãî îïðîñà áûëà âûÿâëåíà îñíîâíàÿ
ïðè÷èíà ìàñòåð ïîìíèò, êàêóþ ñòðèæêó îí äåëàë â ïðîøëûé ðàç, è êëèåíòó
íå íóæíî îáúÿñíÿòü, êàê åãî ïîäñòðè÷ü. Äàííàÿ ïðîáëåìà ïðèâîäèò ê òîìó, ÷òî
ê íîâûì ìàñòåðàì, èìåþùèìè òàêîé æå óðîâåíü ïîäãîòîâêè, êàê è äàâíî ðàáîòàþùèå ïàðèêìàõåðû, ïðèõîäèò ìåíüøå êëèåíòîâ, à ýòî òîðìîçèò ðàçâèòèå è
ðàñøèðåíèå áèçíåñà.
Áûëî ïðåäëîæåíî ïîñëå ñòðèæêè ôîòîãðàôèðîâàòü êëèåíòà ñ ðàçëè÷íûõ
ðàêóðñîâ, ñîõðàíÿòü ïîëó÷èâøèåñÿ èçîáðàæåíèÿ, è çàòåì ïðè ñëåäóþùåì âèçèòå êëèåíòà ïîêàçûâàòü ìàñòåðó ôîòîãðàôèè, äëÿ òîãî ÷òîáû îòñóòñòâîâàëà
íåîáõîäèìîñòü ñëîâåñíî îïèñûâàòü æåëàåìóþ ñòðèæêó. Ðàçðàáîòêà ýòîãî ìåõàíèçìà ÿâëÿåòñÿ îñíîâíîé çàäà÷åé â ðàìêàõ ðåàëèçàöèè äàííîãî ìîäóëÿ.
Ïîñëå çíàêîìñòâà ñ êîíôèãóðàöèÿìè è îáñóæäåíèé ñ çàêàç÷èêîì áûëà
ñîñòàâëåíà ïîñëåäîâàòåëüíîñòü äåéñòâèé, êîòîðûå äîëæíû ïðîèñõîäèòü äëÿ ðàáîòû íîâîãî ìîäóëÿ ïðèëîæåíèÿ (ñì. ðèñ. 5):
Äàëåå âîçíèêëà íåîáõîäèìîñòü ðåøèòü êàêèì èìåííî ñïîñîáîì áóäåò ïðîèñõîäèòü èäåíòèôèêàöèÿ êëèåíòà. Ïîñëå àíàëèçà äàííûõ î êëèåíòàõ, êîòîðûå
ñîäåðæàòñÿ â îñíîâíîé áàçå áûëî âûÿâëåíî, ÷òî êëèåíòû ìîãóò áûòü çàïèñàíû ïî ÔÈÎ, òîëüêî ïî ôàìèëèè, òîëüêî ïî èìåíè, ïî íîìåðó òåëåôîíà èëè
îïèñàòåëüíûì êîììåíòàðèåì (íàïðèìåð, ¾ðåáåíîê 6 ëåò¿), à òàêæå âñòðå÷àëèñü
êîìáèíàöèè ïåðå÷èñëåííûõ ñïîñîáîâ è äóáëè çàïèñåé. Ïîèñê âðó÷íóþ ïî òà11
Ðèñóíîê 5. Áëîê-ñõåìà ïðîöåññà èäåíòèôèêàöèè è ñòðèæêè êëèåíòà
êîé áàçå áóäåò îòíèìàòü çíà÷èòåëüíîå âðåìÿ ó ìàñòåðîâ, îñîáåííî ïðèíèìàÿ âî
âíèìàíèå, ÷òî áàçà êëèåíòîâ ðàñïîëîæåíà â îñíîâíîé êîíôèãóðàöèè, à ìàñòåðà
ðàáîòàþò ñ ìîáèëüíûõ óñòðîéñòâ. Ïîýòîìó áûëî ïðèíÿòî ðåøåíèå ïðîèçâîäèòü
èäåíòèôèêàöèþ êëèåíòà ïî ôîòî ïðè ïîìîùè ðàñïîçíàâàíèÿ ëèö. Òàêîé ñïîñîá
ïîçâîëÿåò äîñòè÷ü âûñîêîé òî÷íîñòè è ñêîðîñòè ïîèñêà, à òàêæå áóäåò ÿâëÿòüñÿ
îòëè÷èòåëüíîé ÷åðòîé äàííîé ñåòè ïàðèêìàõåðñêèõ.
Ìîäóëü äëÿ óïðàâëåíèÿ ïîòîêîì êëèåíòîâ
Ïî òðåáîâàíèþ çàêàç÷èêà ìîäóëü óïðàâëåíèÿ ïîòîêîì êëèåíòîâ äîëæåí
ïðåäñòàâëÿòü ñîáîé ýëåêòðîííóþ î÷åðåäü ñ âîçìîæíîñòüþ âñòàòü â ýòó î÷åðåäü
óäàëåííî. Òàêæå áûëî âûñêàçàíî òðåáîâàíèå ìèíèìèçèðîâàòü âîçìîæíûå îïîç-
12
äàíèå êëèåíòîâ è ïðîïóñê èìè ñâîåé î÷åðåäè, ïðè ýòîì ìàêñèìàëüíî ñîêðàòèâ
ïðîñòîé ìàñòåðîâ.
Äëÿ ýòîãî áûëî ïðåäëîæåíî îòñëåæèâàòü ìåñòîïîëîæåíèå êëèåíòà, óòî÷íÿòü âèä óñëóãè è ñïîñîá, êîòîðûì îí ïëàíèðóåò äîáèðàòüñÿ äî ñàëîíà. Ýòè
äàííûå ïîçâîëÿþò ðàññ÷èòàòü ïðèìåðíîå âðåìÿ, êîòîðîå êëèåíò ïîòðàòèò íà
äîðîãó, è çàðåçåðâèðîâàòü åìó ìåñòî â î÷åðåäè.
Åñëè â ïðîìåæóòîê ìåæäó ïîñëåäíèì êëèåíòîì ìàñòåðà è ñëåäóþùèì â
î÷åðåäè, êîòîðûé íàõîäèòñÿ â ïóòè, ïðèõîäèò êëèåíò, îêàçàíèå óñëóãè êîòîðîìó
óêëàäûâàåòñÿ â ñâîáîäíîå âðåìÿ äî ñëåäóþùåãî êëèåíòà, òî ìàñòåð íà÷èíàåò åãî
îáñëóæèâàíèå.
1.4. Ñðåäà ðåàëèçàöèè ìîäóëåé
Ìîäóëü èäåíòèôèêàöèè êëèåíòîâ ïî ëèöó
Ðåàëèçàöèÿ ìîäóëÿ äëÿ èäåíòèôèêàöèè êëèåíòîâ ïî ëèöó è ïîèñêó îêàçàííûõ èì ðàíåå óñëóã âûïîëíÿëàñü íà ïëàòôîðìå ¾1Ñ: Ïðåäïðèÿòèå¿, òàê êàê ñåòü
ïàðèêìàõåðñêèõ è áàðáåðøîïîâ ¾Áðàäîáðåé¿ èñïîëüçóåò êîìïëåêñ ïðîãðàììíûõ ñðåäñòâ ôèðìû ¾1Ñ¿.
¾1Ñ: Ïðåäïðèÿòèå¿ ýòî ïðîãðàììíûé ïðîäóêò, ðàçðàáîòàííûé ôèðìîé
¾1Ñ¿, êîòîðûé ïðåäíàçíà÷åí äëÿ ðàçðàáîòêè ïðèêëàäíûõ ðåøåíèé, àâòîìàòèçèðóþùèõ ðàçëè÷íûå áèçíåñ-ïðîöåññû îðãàíèçàöèé [6]. Ïëàòôîðìà ¾1Ñ: Ïðåäïðèÿòèå¿ ÿâëÿåòñÿ òåõíîëîãè÷åñêèì ÿäðîì, íà îñíîâå êîòîðîãî ðàçðàáàòûâàþòñÿ êîíôèãóðàöèè, ñ êîòîðûìè âçàèìîäåéñòâóþò ïîëüçîâàòåëè.
¾1Ñ: Ïðåäïðèÿòèå¿ ïîçâîëÿåò çàïóñêàòü ðàçðàáîòàííûå êîíôèãóðàöèè
íà ðàçëè÷íûõ òèïàõ óñòðîéñòâ: íà ïåðñîíàëüíûõ êîìïüþòåðàõ, íà ìîáèëüíûõ
óñòðîéñòâàõ, à òàêæå â âåá-êëèåíòå ÷åðåç áðàóçåð.
Ôèðìîé ¾1Ñ¿ áûëè ðàçðàáîòàíû ñîáñòâåííûå êîíôèãóðàöèè, êîòîðûå
ïðåäíàçíà÷åíû äëÿ àâòîìàòèçàöèè ïðîöåññîâ, õàðàêòåðíûõ äëÿ îïðåäåëåííûõ
13
îòðàñëåé áèçíåñà. Îäíèì èç òàêèõ îòðàñëåâûõ ðåøåíèé ÿâëÿåòñÿ êîíôèãóðàöèÿ ¾1Ñ: Ñàëîí êðàñîòû¿. Îíà ïðåäíàçíà÷åíà äëÿ àâòîìàòèçàöèè óïðàâëåíèÿ
è ó÷åòà íà ïðåäïðèÿòèÿõ, îêàçûâàþùèõ óñëóãè â èíäóñòðèè êðàñîòû.
Êîìïàíèÿ ¾Áðàäîáðåé¿ èñïîëüçóåò êîíôèãóðàöèþ ¾1Ñ: Ñàëîí êðàñîòû¿,
à òàêæå ìîáèëüíîå ïðèëîæåíèå äëÿ ìàñòåðîâ, ïðè ïîìîùè êîòîðîãî îíè âûáèðàþò óñëóãè è ïðîáèâàþò ÷åêè. Òàê êàê èìåííî ìàñòåðó íåîáõîäèìî çíàòü
èñòîðèþ ñòðèæåê êëèåíòà, òî èäåíòèôèêàöèþ áûëî ðåøåíî ïðîèçâîäèòü ïðè
ïîìîùè êàìåðû ìîáèëüíîãî óñòðîéñòâà, êîòîðûì ïîëüçóåòñÿ ïàðèêìàõåð. Ìîäóëü èäåíòèôèêàöèè êëèåíòà áûëî ðåøåíî âñòðîèòü â ñóùåñòâóþùåå ìîáèëüíîå
ïðèëîæåíèå.
Ìîáèëüíàÿ ïëàòôîðìà ¾1Ñ: Ïðåäïðèÿòèå¿ ïðåäíàçíà÷åíà äëÿ ðàçðàáîòêè
è ñáîðêè ìîáèëüíûõ ïðèëîæåíèé. Ïëàòôîðìà ïîääåðæèâàåò îïåðàöèîííûå ñèñòåìû Android, iOS è Windows. Ðàçðàáîòêà ïîä ìîáèëüíûå óñòðîéñòâà âåäåòñÿ
òàê æå, êàê è ïîä ïåðñîíàëüíûå êîìïüþòåðû, íî ñóùåñòâóåò ðÿä îñîáåííîñòåé.
Íåêîòîðûå îáúåêòû äåðåâà êîíôèãóðàöèè, íàïðèìåð ðåãëàìåíòíûå çàäàíèÿ è
HTTP-ñåðâèñû, íå äîñòóïíû äëÿ èñïîëüçîâàíèÿ íà ìîáèëüíûõ óñòðîéñòâàõ. Îäíàêî â ïëàòôîðìå ñóùåñòâóåò ôóíêöèîíàëüíîñòü, êîòîðàÿ ÿâëÿåòñÿ ñïåöèôè÷íîé äëÿ ìîáèëüíûõ óñòðîéñòâ [9]. Äëÿ âûïîëíåíèÿ çàäà÷ ìîäóëÿ èäåíòèôèêàöèè êëèåíòîâ áîëüøóþ ðîëü èãðàåò âîçìîæíîñòü èñïîëüçîâàíèÿ êàìåðû ìîáèëüíîãî óñòðîéñòâà.
Òàêèì îáðàçîì, ìîäóëü èäåíòèôèêàöèè êëèåíòîâ ïî ëèöó ðåàëèçîâàí ñ
èñïîëüçîâàíèåì ìîáèëüíîé ïëàòôîðìû ¾1Ñ: Ïðåäïðèÿòèå¿, à òàêæå íàñòðîåíî
âçàèìîäåéñòâèå ñ îòðàñëåâîé êîíôèãóðàöèåé ¾1Ñ: Ñàëîí êðàñîòû¿.
Ìîäóëü äëÿ óïðàâëåíèÿ ïîòîêîì êëèåíòîâ
Òàê êàê îäíèì èç òðåáîâàíèé çàêàç÷èêà áûëî îñóùåñòâëåíèå âîçìîæíîñòè
âñòàâàòü â î÷åðåäü óäàëåííî, òî áûëî ðåøåíî ðåàëèçîâàòü ìîäóëü â âèäå êëèåíòñåðâåðíîãî âçàèìîäåéñòâèÿ, ãäå ñåðâåðîì ÿâëÿåòñÿ êîíôèãóðàöèÿ ¾1Ñ: Ñàëîí
14
êðàñîòû¿, à êëèåíòîì ñàéò, íà êîòîðîì ïîñåòèòåëè ñàëîíà ìîãóò âñòàòü â
î÷åðåäü. Èñïîëüçîâàòü îòäåëüíûå ìîùíîñòè äëÿ ñåðâåðà è ÑÓÁÄ áûëî áû íå
öåëåñîîáðàçíî.
Äëÿ ñîçäàíèÿ ñàéòà áûë âûáðàí Vue.js ýòî ôðåéìâîðê äëÿ ðàçðàáîòêè
ïîëüçîâàòåëüñêèõ èíòåðôåéñîâ.  îòëè÷èå îò React.js èëè Angular Vue.js ÿâëÿåòñÿ ìàñøòàáèðóåìûì âíèç, òî åñòü ïîäõîäèò äëÿ ðàçðàáîòêè íåáîëüøèõ ïðîåêòîâ
è ïðè ýòîì îí îáåñïå÷èâàåò âûñîêóþ ïðîèçâîäèòåëüíîñòü [8].
15
Ãëàâà 2. Ðàçðàáîòêà ìîäóëåé èíôîðìàöèîííîé ñðåäû
ïàðèêìàõåðñêèõ
2.1. Ðåàëèçàöèÿ ìîäóëÿ äëÿ èäåíòèôèêàöèè êëèåíòîâ
ïî ëèöó
Ïåðâûì øàãîì áûëî íåîáõîäèìî íàó÷èòüñÿ ïîëó÷àòü ôîòîãðàôèè ïðè ïîìîùè ìîáèëüíîãî ïðèëîæåíèÿ íà ïëàòôîðìå ¾1Ñ: Ïðåäïðèÿòèå¿. Ïîñëå èçó÷åíèÿ äîêóìåíòàöèè [10], áûëà ðàçðàáîòàíà óíèâåðñàëüíàÿ ôóíêöèÿ (ñì. ëèñòèíã 1), êîòîðàÿ çàòåì áûëà ïîìåùåíà â îáùèé ìîäóëü êîíôèãóðàöèè è âûçûâàëàñü ñ íåîáõîäèìûìè ïàðàìåòðàìè, êîãäà òðåáîâàëîñü ñäåëàòü ôîòîãðàôèþ.
Ëèñòèíã 1. Ñîçäàíèå ôîòîãðàôèè ñ ìîáèëüíîãî óñòðîéñòâà
&ÍàÊëèåíòå
Ôóíêöèÿ Ïîëó÷èòüÄàííûåÔîòîÑíèìêà(ÒèïÔîòî) Ýêñïîðò
Äàííûå = Íåîïðåäåëåíî;
#Åñëè ÌîáèëüíîåÏðèëîæåíèåÊëèåíò Òîãäà
Åñëè ÑðåäñòâàÌóëüòèìåäèà.ÏîääåðæèâàåòñÿÔîòîñíèìîê() Òîãäà
ÐàçðÊàìåðû = ÑðåäñòâàÌóëüòèìåäèà
.Ïîëó÷èòüÏîääåðæèâàåìûåÐàçðåøåíèÿÊàìåðû(ÒèïÔîòî);
ÍîìåðÐàçðåøåíèÿÊàìåðû = Ïîëó÷èòüÐàçðåøåíèåÊàìåðûÍàÑåðâåðå(ÒèïÔîòî);
Èíäåêñ = 0;
Äàííûå = ÑðåäñòâàÌóëüòèìåäèà.ÑäåëàòüÔîòîñíèìîê(ÒèïÔîòî, ÐàçðÊàìåðû
[ÍîìåðÐàçðåøåíèÿÊàìåðû],100,,ÒèïÏîäñâåòêèÊàìåðû.Âûêëþ÷åíà);
针֌
Äàííûå = Íîâûé ÔèêñèðîâàííàÿÑòðóêòóðà("Îøèáêà", "Äàííîå óñòðîéñòâî íå ïîääå
ðæèâàåò ôîòîñíèìîê");
ÊîíåöÅñëè;
#针֌
Äàííûå = Íîâûé ÔèêñèðîâàííàÿÑòðóêòóðà("Îøèáêà", "Ôîòîñíèìêè ìîæíî äåëàòü òîë
üêî íà ìîáèëüíîì óñòðîéñòâå");
#ÊîíåöÅñëè
16
Âîçâðàò Äàííûå;
ÊîíåöÔóíêöèè
 ôóíêöèè èñïîëüçîâàíû êîíñòàíòû ¾ÐàçðåøåíèåÏåðåäíåéÊàìåðû¿ è
¾ÐàçðåøåíèåÇàäíåéÊàìåðû¿. Èõ íåîáõîäèìî çàðàíåå îïðåäåëèòü â íàñòðîéêàõ
ïðèëîæåíèÿ. Ýòî ñâÿçàíî ñ òåì, ÷òî êàæäîå ìîáèëüíîå óñòðîéñòâî, îáîðóäîâàííîå êàìåðîé, ñïîñîáíî äåëàòü ôîòîãðàôèè îïðåäåëåííîãî ðàçðåøåíèÿ è íàáîð
ýòèõ ðàçðåøåíèé ðàçëè÷åí äëÿ ðàçíûõ ìîäåëåé, ïîýòîìó íåëüçÿ çàäàòü êîíêðåòíîå çíà÷åíèå (íàïðèìåð, 640õ480) äëÿ âñåõ óñòðîéñòâ.
Äëÿ îñóùåñòâëåíèÿ íàñòðîéêè êàìåðû áûëà ñîçäàíà ñîîòâåòñòâóþùàÿ îáðàáîòêà (ñì. ðèñ. 6), â êîòîðîé ïîëüçîâàòåëü ñàì äîëæåí âûáðàòü æåëàåìîå
ðàçðåøåíèå èç äîñòóïíûõ.
Ðèñóíîê 6. Íàñòðîéêà ðàçðåøåíèÿ êàìåðû
Îïòèìàëüíûìè ñ òî÷êè çðåíèÿ ïðîèçâîäèòåëüíîñòè äëÿ äàííîé çàäà÷è
ÿâëÿþòñÿ ôîòîãðàôèè â íèçêîì ðàçðåøåíèè, âåñîì äî 250 Êáàéò. Ýòî ñâÿçàíî
ñ òåì, ÷òî ïåðåäà÷à áîëüøèõ èçîáðàæåíèé çàíèìàåò áîëüøå âðåìåíè, ÷òî îò17
ðèöàòåëüíî ñêàçûâàåòñÿ íà ïðîèçâîäèòåëüíîñòè ñèñòåìû. Òàêæå ôîòîãðàôèè â
âûñîêîì ðàçðåøåíèè òðåáóþò áîëüøèé îáúåì ïàìÿòè äëÿ õðàíåíèÿ.
Ïîñëå òîãî, êàê áûëà îïðîáîâàíà òåõíè÷åñêàÿ âîçìîæíîñòü äåëàòü ôîòîãðàôèè ñ ìîáèëüíîãî óñòðîéñòâà, íóæíî áûëî ñîçäàòü ôîðìó äëÿ äîáàâëåíèÿ
èäåíòèôèêàöèîííîãî ôîòî êëèåíòà. Ïåðâîíà÷àëüíàÿ ïðèâÿçêà Ôîòî Êëèåíò
äîëæíà áûòü âûïîëíåíà ìàñòåðîì, ñëåäîâàòåëüíî, íåîáõîäèìî áûëî ðåàëèçîâàòü ïîèñê êëèåíòà ïî áàçå. Çàêàç÷èê ïðåäëîæèë îñóùåñòâëÿòü ïîèñê ïî íîìåðó òåëåôîíà. Òàêæå äîëæíà áûòü âîçìîæíîñòü äîáàâèòü íîâîãî êëèåíòà, óêàçàâ
äëÿ íåãî ÔÈÎ, íîìåð òåëåôîíà, email è äàòó ðîæäåíèÿ. Íà ôîðìå (ñì. ðèñ. 7)
äëÿ äîáàâëåíèÿ èäåíòèôèêàöèîííîãî ôîòî áûëè ðàñïîëîæåíû ñëåäóþùèå ðåêâèçèòû:
ÍîìåðÒåëåôîíà ñòðîêà;
Ôàìèëèÿ ñòðîêà;
Èìÿ ñòðîêà;
Îò÷åñòâî ñòðîêà;
ÄàòàÐîæäåíèÿ äàòà;
Email ñòðîêà;
ÑîãëàñèåÍàÏîëó÷åíèåEmail áóëåâî;
ÑîãëàñèåÍàÏîëó÷åíèåSMS áóëåâî;
ÈäåíòèôèêàöèîííîåÔîòî ñòðîêà.
Äëÿ ïîèñêà êëèåíòà áûëà ñîçäàíà êîìàíäà ÐàñïîçíàòüÊëèåíòà(), êîòîðàÿ
ïîñûëàåò HTTP-çàïðîñ ñ íîìåðîì êëèåíòà â îñíîâíóþ áàçó, à â îòâåò ïîëó÷àåò êîä êëèåíòà, åñëè îí ñóùåñòâóåò. Èñõîäíûé êîä ôóíêöèé, îñóùåñòâëÿþùèõ
çàïðîñ ê îñíîâíîé áàçå äëÿ ïîèñêà êëèåíòà ïðèâåäåí â ïðèëîæåíèè 1.
Äëÿ äîáàâëåíèÿ íîâîãî êëèåíòà èëè èçìåíåíèÿ ñóùåñòâóþùåãî áûëà ñîçäàíà êîìàíäà ÏîèñêÈÄîáàâëåíèåÊëèåíòà() (ñì. ëèñòèíã 2), êîòîðàÿ ïîñûëàåò HTTP18
Ðèñóíîê 7. Äîáàâëåíèå èäåíòèôèêàöèîííîãî ôîòî
çàïðîñ ñ íàáîðîì âûøåïåðå÷èñëåííûõ ïîëåé â îñíîâíóþ áàçó, ãäå â çàâèñèìîñòè
îò òîãî, ñóùåñòâóåò ëè êëèåíò ñ òàêèì íîìåð òåëåôîíà, ôóíêöèÿ ëèáî îáíîâëÿåò
äàííûå, ëèáî ñîçäàåò íîâûé ýëåìåíò ñïðàâî÷íèêà Êîíòðàãåíòû ñ ñîîòâåòñòâóþùèìè ïàðàìåòðàìè, à òàêæå äîáàâëÿåò äëÿ íåãî äàííûå â ðåãèñòð ñâåäåíèé
ÊîíòàêòíàÿÈíôîðìàöèÿ. Â îòâåòå ïðèõîäèò êîä êëèåíòà.
Ëèñòèíã 2. Ôîðìèðîâàíèå çàïðîñà íà äîáàâëåíèå èëè èçìåíåíèå êëèåíòà
&ÍàÑåðâåðå
Ôóíêöèÿ ÏîèñêÈÄîáàâëåíèåÊëèåíòà(Äîáàâëÿòü, ÑòðóêòóðàÍîâûéÊëèåíò = Íåîïðåäåëåíî)
Äîáàâëÿòü = ?(Äîáàâëÿòü, 1, 0);
ÑòðóêòóðàJSON = Íîâûé Ñòðóêòóðà;
Åñëè ÑòðóêòóðàÍîâûéÊëèåíò <> Íåîïðåäåëåíî Òîãäà
ÑòðóêòóðàJSON.Âñòàâèòü("moreinfo", ÑòðóêòóðàÍîâûéÊëèåíò);
ÊîíåöÅñëè;
ÑòðóêòóðàJSON.Âñòàâèòü("phone", ÍîìåðÒåëåôîíà);
ÑòðóêòóðàJSON.Âñòàâèòü("add", Äîáàâëÿòü);
ÑòðîêàJSON = ÎáìåíÏîHTTP.Ïîëó÷èòüÑòðîêóJSON(ÑòðóêòóðàJSON);
19
Ðåñóðñ = "brad/hs/camera/findaddclient";
ÀäðåñÐåñóðñà = ÑîêðËÏ(Ðåñóðñ);
Ðåçóëüòàò = ÎáìåíÏîHTTP.ÂûïîëíèòüÇàïðîñ("POST", "FindAddClient", ÀäðåñÐåñóðñà
, ÑòðîêàJSON);
ÒåêñòÎøèáêè = "";
ÊîäÊëèåíòà = "";
ÔîòîÊëèåíòà = Íîâûé Ìàññèâ;
Åñëè ÒèïÇí÷(Ðåçóëüòàò) = Òèï("Ñòðîêà") Òîãäà
// Îøèáêà â ïðèëîæåíèè
Ñîîáùåíèå = Íîâûé ÑîîáùåíèåÏîëüçîâàòåëþ;
Ñîîáùåíèå.Òåêñò = "Îøèáêà â ïðèëîæåíèè: " + Ðåçóëüòàò;
Ñîîáùåíèå.Ñîîáùèòü();
Èíà÷åÅñëè Ðåçóëüòàò.Ñâîéñòâî("error", ÒåêñòÎøèáêè) Òîãäà
// Îøèáêà â îñíîâíîé áàçå
Ñîîáùåíèå = Íîâûé ÑîîáùåíèåÏîëüçîâàòåëþ;
Ñîîáùåíèå.Òåêñò = "Îøèáêà íà ñåðâåðå: " + Ðåçóëüòàò;
Ñîîáùåíèå.Ñîîáùèòü();
Èíà÷åÅñëè Ðåçóëüòàò.Ñâîéñòâî("client_id", ÊîäÊëèåíòà) Òîãäà
Âîçâðàò ÊîäÊëèåíòà;
ÊîíåöÅñëè;
Âîçâðàò "";
ÊîíåöÔóíêöèè
Ïîñëå òîãî êàê êëèåíò áûë íàéäåí èëè ñîçäàí, ìàñòåð ôîòîãðàôèðóåò
êëèåíòà è ñîõðàíÿåò èäåíòèôèêàöèîííîå ôîòî. Ôîòî îòïðàâëÿåòñÿ íà ñåðâåð â
îñíîâíóþ áàçó, çàïèñûâàåòñÿ â ôàéëîâîå õðàíèëèùå, à â êàðòî÷êå êëèåíòà â
ñïðàâî÷íèêå Êîíòðàãåíòû ïîÿâëÿåòñÿ ñòðîêà ñ óêàçàíèåì ïóòè äî ôîòîãðàôèè.
Òàêæå èäåíòèôèêàöèîííîå ôîòî îòïðàâëÿåòñÿ íà ñåðâåð ðàñïîçíàâàíèÿ ëèö, ãäå
ïðîèñõîäèò ñíÿòèå è ñîõðàíåíèå ïàðàìåòðîâ ëèöà.
Ðàñïîçíàâàíèå ëèö áûëî âûïîëíåíî ïðè ïîìîùè ñåðâèñà, ñîçäàííîãî ñîòðóäíèêàìè ÃÊ ¾Ôîðóñ¿, êîòîðûå çàíèìàþòñÿ òåõíè÷åñêîé ïîääåðæêîé èíôîðìàöèîííûõ ñèñòåì êîìïàíèè ¾Áðàäîáðåé¿. Äàííûé ñåðâèñ ïðè îòïðàâêå íà íåãî
20
íîâîãî ôîòî êëèåíòà ñíèìåò ìàñêó, à çàòåì ïðè ðàñïîçíàâàíèè ñðàâíèâàåò ìàñêó, ïåðåäàííóþ íà âõîä, ñ èìåþùèìèñÿ â õðàíèëèùå. Òàêîé ïîäõîä ïîçâîëÿåò
ñåðâèñó íå õðàíèòü èñõîäíûå èçîáðàæåíèÿ.
Äëÿ âçàèìîäåéñòâèÿ ìîáèëüíîãî ïðèëîæåíèÿ è îñíîâíîé áàçû áûë ñîçäàí
HTTP-ñåðâèñ Êàìåðà è ðàçðàáîòàíû ìåòîäû, êîòîðûå îáðàáàòûâàþò âõîäÿùèå
çàïðîñû. Ñåðâåð ðàñïîçíàâàíèÿ è îñíîâíàÿ áàçà òàêæå îáùàþòñÿ ïîñðåäñòâîì
HTTP-çàïðîñîâ. API ïðåäñòàâëåíî â ïðèëîæåíèè 3.
Ñëåäóþùèì ýòàïîì ðåàëèçàöèè ìîäóëÿ áûëî äîáàâëåíèå ôîòîãðàôèé êëèåíòà ïîñëå îêàçàíèÿ óñëóãè. Äëÿ ýòîãî áûëà äîðàáîòàíà ôîðìà äîêóìåíòà
×åêÊÊÌ (ñì. ðèñ. 8).
Ðèñóíîê 8. Ôîðìà äîêóìåíòà ×åêÊÊÌ
Ñóùåñòâóþùàÿ ïîñëåäîâàòåëüíîñòü äåéñòâèé Âûáîð íîìåíêëàòóðû Ñêèäêà Îïëàòà Ïðîáèòèå ÷åêà áûëà èçìåíåíà: ìåæäó âûáîðîì ñêèäêè è îïëàòîé
áûë äîáàâëåí ýòàï ôîòîãðàôèðîâàíèÿ êëèåíòà (ñì. ðèñ. 9). Ìàñòåð äîëæåí ñäåëàòü ïÿòü ôîòî ïî ñïåöèàëüíîé ìåòîäèêå è çàòåì íàæàòü íà êíîïêó ñîõðàíèòü.
Òàêæå ó êëèåíòà åñòü âîçìîæíîñòü îòêàçàòüñÿ ôîòîãðàôèðîâàòüñÿ, â ýòîì
ñëó÷àå ìîæíî ñðàçó ïåðåõîäèòü ê îïëàòå. Åñëè æå êëèåíò æåëàåò â áóäóùåì òàêóþ æå ñòðèæêó, òî ïîñëå íàæàòèÿ íà êíîïêó ñîõðàíåíèÿ ôîòîãðàôèè è äðóãèå
äàííûå îá óñëóãå ïîïàäàþò â îñíîâíóþ áàçó. Â íåé áûë ñîçäàí ðåãèñòð ñâåäåíèé
21
Ðèñóíîê 9. Ôîòî ïîñëå óñëóã
ÕðàíèëèùåÔîòîÊëèåíòîâ ñî ñëåäóþùèìè èçìåðåíèÿìè:
1. Êëèåíò Ñïðàâî÷íèêÑñûëêà.Êîíòðàãåíòû;
2. ×åêÍîìåð ñòðîêà;
3. ×åêÄàòà äàòà.
È ðåñóðñàìè:
1. ÔîòîÑïåðåäè ñòðîêà;
2. ÔîòîÑëåâà ñòðîêà;
3. ÔîòîÑïðàâà ñòðîêà;
4. ÔîòîÑçàäè ñòðîêà;
5. ÔîòîÑâåðõó ñòðîêà.
×åê çàïèñàí íå ññûëêîé íà äîêóìåíò, à íîìåðîì äîêóìåíòà â âèäå ñòðîêè
è äàòîé, òàê êàê ÷åêè ôîðìèðóþòñÿ íà ïëàíøåòàõ ìàñòåðîâ è äîáàâëÿþòñÿ â îñíîâíóþ áàçó â êîíöå ðàáî÷åãî äíÿ, à ñîõðàíåíèå ôîòîãðàôèé íóæíî îáåñïå÷èòü
åù¼ äî ìîìåíòà ïîïàäàíèÿ ÷åêà â áàçó.
22
Ðåñóðñû ïðåäñòàâëÿþò ñîáîé ñòðîêè, â êîòîðûõ óêàçàí ïóòü ê ôàéëó ñ
ôîòîãðàôèåé. Õðàíåíèå èçîáðàæåíèé â ôàéëîâîé ñèñòåìå, à íå â áàçå ïîçâîëÿåò
îñóùåñòâëÿòü ðåçåðâíîå êîïèðîâàíèå áàçû ñ ìåíüøèìè ðåñóðñíûìè çàòðàòàìè.
Ïîñëå ïîÿâëåíèÿ âîçìîæíîñòè äîáàâëÿòü èäåíòèôèêàöèîííîå ôîòî êëèåíòà è ôîòî ïîñëå óñëóã, áûëî ðåàëèçîâàíî ðàñïîçíàâàíèå êëèåíòà è îòîáðàæåíèå
ñâÿçàííûõ ñ íèì ôîòîãðàôèé.
Ðèñóíîê 10. Ìîäåëü âçàèìîäåéñòâèÿ
Ïî òðåáîâàíèþ çàêàç÷èêà ñðàçó ïîñëå íàæàòèÿ íà êíîïêó ¾Óñëóãà¿ äîëæíà âêëþ÷àòüñÿ êàìåðà íà ìîáèëüíîì óñòðîéñòâå è ïðîèñõîäèòü ðàñïîçíàâàíèå,
êîãäà ìàñòåð ñäåëàåò ôîòî. Ïîëó÷åííîå èçîáðàæåíèå îòïðàâëÿåòñÿ â îñíîâíóþ
áàçó è çàòåì íà ñåðâåð ðàñïîçíàâàíèÿ.
 îòâåò ñ ñåðâåðà ïðèõîäèò êîä êëèåíòà, êîòîðîìó ïðèíàäëåæèò ïðåäàííîå ôîòî. Äàëåå âûïîëíÿåòñÿ çàïðîñ ê ðåãèñòðó ÕðàíèëèùåÔîòîÊëèåíòîâ è
âûáèðàþòñÿ çàïèñè, êîòîðûå îòíîñÿòñÿ ê òåêóùåìó êëèåíòó.  êà÷åñòâå îòâåòà â ìîáèëüíîå ïðèëîæåíèå óõîäÿò ôîòîãðàôèè è ñîîòâåòñòâóþùèå èì íàáîðû
óñëóã. Èñõîäíûé êîä ôóíêöèè, âûïîëíÿþùåé ïîèñê, ïðèâåäåí â ïðèëîæåíèè 2.
Ìîäåëü âçàèìîäåéñòâèÿ ïðè ðàñïîçíàâàíèè ïðåäñòàâëåíà íà ðèñóíêå 10.
23
Ïîñëå ïîëó÷åíèÿ èçîáðàæåíèé â ìîáëüíîì ïðèëîæåíèè îòêðûâàåòñÿ ôîðìà îáðàáîòêè ÏðîøëûåÔîòî (ñì. ðèñ. 11). Òàê êàê çàðàíåå íå èçâåñòíî êîëè÷åñòâî îêàçàííûõ ðàíåå äëÿ ýòîãî êëèåíòà óñëóã, òî âñå ðåêâèçèòû äîáàâëÿþòñÿ
íà ôîðìó ïðîãðàììíî.
Ðèñóíîê 11. Ïðîøëûå óñëóãè
Ïîñëå òîãî êàê êëèåíò âûáèðàåò ñòðèæêó, ìàñòåð íàæèìàåò êíîïêó ¾Âûáðàòü¿ íà ñîîòâåòñòâóþùåé âêëàäêå, îòêðûâàåòñÿ ôîðìà ×åêàÊÊÌ, è ìàñòåð
íà÷èíàåò ðàáîòó.
2.2. Ðåàëèçàöèÿ ìîäóëÿ äëÿ óïðàâëåíèÿ ïîòîêîì
êëèåíòîâ
Ïðè âõîäå íà ñàéò î÷åðåäè ó êëèåíòà çàïðàøèâàåòñÿ íîìåð òåëåôîíà, êîòîðûé ïîäòâåðæäàåòñÿ ïðè ïîìîùè SMS.
Ïîñëå ïîäòâåðæäåíèÿ íîìåðà òåëåôîíà íà ñåðâåð ïîä óïðàâëåíèåì ¾1Ñ: Ïðåäïðèÿòèå¿ îòïðàâëÿåòñÿ GET-çàïðîñ äëÿ ïîëó÷åíèÿ ñïèñêà óñëóã. API âçàèìî24
äåéñòâèÿ ñàéòà ñ ñåðâåðîì ïðèâåäåíî â ïðèëîæåíèè 4. Äèàãðàììà ïîñëåäîâàòåëüíîñòè ïðåäñòàâëåíà íà ðèñ. 12.
Îò èäåíòèôèêàöèè êëèåíòà â ìîìåíò çàïèñè áûëî ðåøåíî îòêàçàòüñÿ, òàê
êàê â òåêóùåé áàçå íå ó âñåõ êëèåíòîâ åñòü ïðèâÿçêà ê íîìåðó òåëåôîíà. Òàêæå
âîçìîæíû ñëó÷àè, êîãäà îäèí ÷åëîâåê çàïèñûâàåò ñðàçó íåñêîëüêî êëèåíòîâ,
íàïðèìåð, îòåö ìîæåò çàïèñàòü íà ñâîé íîìåð òåëåôîíà ñûíîâåé.
Ðèñóíîê 12. Äèàãðàììà ïîñëåäîâàòåëüíîñòè äëÿ ýëåêòðîííîé î÷åðåäè
Äëÿ ìîäóëÿ î÷åðåäè áûë ñîçäàí íîâûé ñïðàâî÷íèê ¾Ôîðóñ_ÓñëóãèÎ÷åðåäü¿.
 íåì ñîäåðæàòüñÿ íàçâàíèÿ âèäîâ óñëóã, îïèñàíèå è äëèòåëüíîñòü èõ îêàçàíèÿ. Êàæäîìó ýëåìåíòó ñïðàâî÷íèêà ¾Íîìåíêëàòóðà¿ ñîïîñòàâëÿåòñÿ ýëåìåíò
25
èç íîâîãî ñïðàâî÷íèêà. Ýòî áûëî íåîáõîäèìî, ÷òîáû îáåñïå÷èòü óäîáñòâî âûáîðà óñëóã äëÿ ïîëüçîâàòåëåé ñàéòà. Íàïðèìåð, óñëóãà ñ íàçâàíèåì ¾Áîðîäà¿ íà
ñàéòå ïîçâîëÿåò ïîëó÷èòü íåñêîëüêî âèäîâ ñòðèæêè áîðîäû, êîòîðûå ÿâëÿþòñÿ
ðàçíûìè íîìåíêëàòóðàìè.
Äàëåå êëèåíò âûáèðàåò âèä óñëóãè, êîòîðóþ îí õî÷åò ïîëó÷èòü (ñì.
ðèñ. 13).
Ðèñóíîê 13. Âûáîð óñëóãè
Ïîñëå âûáîðà óñëóãè êëèåíò íàæèìàåò êíîïêó ¾Äàëåå¿ è îïðåäåëÿåò ñâîå
ìåñòîïîëîæåíèå (ñì. ðèñ. 14).  çàâèñèìîñòè îò óñòðîéñòâà, íà êîòîðîì èñïîëüçóåòñÿ ñàéò, òî÷íîñòü ìîæåò îòëè÷àòüñÿ, ïîýòîìó êëèåíò ìîæåò ñàìîñòîÿòåëüíî
äâèãàòü ìåòêó ñâîåãî ìåñòîïîëîæåíèÿ. Îäíàêî ýòî äåéñòâèå íåîáõîäèìî â îñíîâíîì ïðè èñïîëüçîâàíèè ñàéòà íà ïåðñîíàëüíîì êîìïüþòåðå.
Äàëåå êëèåíò âûáèðàåò êàê îí ïëàíèðóåò äîáèðàòüñÿ äî ñàëîíà: íà àâòîìîáèëå, íà îáùåñòâåííîì òðàíñïîðòå èëè ïåøêîì. Ýòà èíôîðìàöèÿ íåîáõîäèìà
äëÿ òîãî, ÷òîáû ðàññ÷èòàòü, êàêîå âðåìÿ áóäåò ïîòðà÷åíî íà ïóòü äî ñàëîíà.
Ïîñëå çàïîëíåíèÿ íåîáõîäèìûõ ïàðàìåòðîâ íà ñåðâåð îòïðàâëÿåòñÿ GETçàïðîñ äëÿ ïîëó÷åíèÿ òåêóùåãî ñîñòîÿíèÿ î÷åðåäè.  ïàðàìåòðàõ GET-çàïðîñà
26
Ðèñóíîê 14. Îïðåäåëåíèå ìåñòîïîëîæåíèÿ
óêàçûâàåòñÿ òåêóùàÿ äàòà è âðåìÿ. Òàê êàê ñàëîíû ñåòè ¾Áðàäîáðåé¿ ðàñïîëîæåíû â ðàçëè÷íûõ ÷àñîâûõ ïîÿñàõ, à íà ñåðâåðå èñïîëüçóåòñÿ èðêóòñêîå âðåìÿ
(GMT+8), òî ïðè ïîìîùè API ñàéòà TimeZoneDB [15] âðåìÿ êëèåíòà ïðåîáðàçóåòñÿ ê âðåìåíè ïî ÷àñîâîìó ïîÿñó GMT+8.
 êîíôèãóðàöèè ¾1Ñ: Ñàëîí êðàñîòû¿ áûë ñîçäàí HTTP-ñåðâèñ ¾Î÷åðåäü¿ äëÿ ïðèåìà çàïðîñîâ ñ ñàéòà. Íà GET-çàïðîñ î ïîëó÷åíèè òåêóùåãî ñîñòîÿíèÿ î÷åðåäè ñåðâåð ãåíåðèðóåò îòâåò â âèäå ñòðóêòóðû, ãäå ñîäåðæèòñÿ
èíôîðìàöèÿ î ñàëîíàõ è âðåìåíè èõ ðàáîòû, ìàñòåðàõ, êîòîðûå â ýòîò äåíü
îêàçûâàþò óñëóãè, à òàêæå ïîðÿäîê êëèåíòîâ â î÷åðåäè.
Äëÿ õðàíåíèÿ ïîðÿäêà êëèåíòîâ â î÷åðåäè áûë ñîçäàí ðåãèñòð ñâåäåíèé
¾Ôîðóñ_Î÷åðåäü¿ ñî ñëåäóþùèìè èçìåðåíèÿìè:
1. ÍîìåðÒåëåôîíà ñòðîêà;
27
2. Áàðáåð Ñïðàâî÷íèêÑñëûêà.Ñîòðóäíèêè;
3. ÄàòàÂðåìÿÇàïèñè äàòà;
4. Ñàëîí Ñïðàâî÷íèêÑñûëêà.ÑòðóêòóðíûåÅäèíèöû.
È ðåñóðñàìè:
1. ÂðåìÿÂÏóòè ÷èñëî;
2. Óñëóãà Ñïðàâî÷íèêÑñûëêà.Ôîðóñ_ÓñëóãèÎ÷åðåäü;
3. ÄëèòåëüíîñòüÓñëóãè ÷èñëî;
4. Îòìåíåíà áóëåâî.
Êàê óïîìèíàëîñü â ðàçäåëå 1.3, ïîðÿäîê êëèåíòà â î÷åðåäè çàâèñèò îò
ñîâîêóïíîñòè ôàêòîðîâ: ìåñòîïîëîæåíèÿ êëèåíòà è ñàëîíîâ, ñïîñîáà, êîòîðûì
êëèåíò ïëàíèðóåò äîáèðàòüñÿ è âèäà óñëóãè. Ìåñòîïîëîæåíèå è òðàíñïîðò ïîñëå îáðàáîòêè ïîçâîëÿþò ïîëó÷èòü âðåìÿ, êîòîðîå íåîáõîäèìî êëèåíòó, ÷òîáû
äîáðàòüñÿ äî ñàëîíà. À âèä óñëóãè âðåìÿ, êîòîðîå íåîáõîäèìî ìàñòåðó íà
îêàçàíèå âûáðàííîé óñëóãè.
Ïîñëå òîãî êàê ñàéò îáðàáîòàë ïîëó÷åííóþ ñ ñåðâåðà ñòðóêòóðó äàííûõ,
êëèåíò äîëæåí ðåøèòü, ÷òî äëÿ íåãî â ïðèîðèòåòå: ïîäñòðè÷üñÿ êàê ìîæíî
áûñòðåå èëè ïî íàèìåíüøåé öåíå. Òàê æå êëèåíò ìîæåò âûáðàòü êîíêðåòíûé
ñàëîí èëè ìàñòåðà.
Êîãäà âñå äàííûå äëÿ òîãî, ÷òîáû âñòàòü â î÷åðåäü çàïîëíåíû, àëãîðèòì
ðàññ÷èòûâàåò ïîðÿäêîâûé íîìåð êëèåíòà äëÿ î÷åðåäè. Äëÿ ýòîãî ïðè ïîìîùè
API ßíäåêñ.Êàðò äëÿ ïîñòðîåíèÿ ìàðøðóòîâ [4] âû÷èñëÿåòñÿ âðåìÿ, êîòîðîå
íåîáõîäèìî êëèåíòó, ÷òîáû äîáðàòüñÿ äî ñàëîíà. Çàòåì, åñëè âûáðàí êîíêðåòíûé ìàñòåð íà ïðîøëîì øàãå, òî àëãîðèòì âûñ÷èòûâàåò âðåìÿ îæèäàíèÿ. Åñëè
ê ìîìåíòó ñâîåãî ïðèåçäà êëèåíò áóäåò ïåðâûì, â î÷åðåäè, òî âðåìÿ îæèäàíèÿ
áóäåò ðàâíî íóëþ. Åñëè íåò, òî àëãîðèòì èùåò ïåðâûé íå çàíÿòû ïðîìåæóòîê
âðåìåíè, â êîòîðûé ìàñòåð óñïååò îáñëóæèòü êëèåíòà, è òîãäà âðåìÿ îò ïðèåçäà
êëèåíòà â ñàëîí äî íà÷àëà ñòðèæêè áóäåò ñ÷èòàòüñÿ âðåìåíåì îæèäàíèÿ.
28
Åñëè êëèåíò íà ïðåäûäóùåì øàãå âûáðàë çàïèñü â êîíêðåòíûé ñàëîí, òî
àëãîðèòì â ýòîì ñàëîíå àâòîìàòè÷åñêè âûáèðàåò ìàñòåðà, ó êîòîðîãî êëèåíò
çàòðàòèò ìåíüøå âñåãî âðåìåíè. Èñõîäíûé êîä àëãîðèòìà ïðåäñòàâëåí â ïðèëîæåíèè 3.  óïðîùåííîé ôîðìå, ìîæíî ñêàçàòü, ÷òî âðåìÿ âû÷èñëÿåòñÿ ïî
ñëåäóþùåé ôîðìóëå:
t = ttransport + twait + tservise ∗ speedmaster ,
ãäå ttransport âðåìÿ, êîòîðîå íåîáõîäèìî êëèåíòó, ÷òîáû äîáðàòüñÿ äî ñàëîíà,
twait âðåìÿ íà îæèäàíèå â î÷åðåäè ïîñëå ïðèáûòèÿ â ñàëîí, tservise ñòàíäàðòíîå âðåìÿ, íà îêàçàíèå âûáðàííîé óñëóãè, speedmaster êîýôôèöèåíò ñêîðîñòè
ìàñòåðà.
Ïðè âûáðàííîì ïðèîðèòåòå ïî ñêîðîñòè àëãîðèòì âûáèðàåò ìàñòåðà òàê
æå êàê îïèñàíî âûøå, íî ïðè ýòîì ðàññ÷èòûâàåò âðåìÿ äëÿ âñåõ ìàñòåðîâ, ðàáîòàþùèõ â ýòîò äåíü.
Äëÿ ïðèîðèòåòà ïî ñòîèìîñòè àëãîðèòì âûáèðàåò òåõ ìàñòåðîâ, ó êîòîðûõ
íàèìåíüøàÿ öåíà íà âûáðàííóþ óñëóãó. Åñëè òàêèõ ìàñòåðîâ îêàæåòñÿ íåñêîëüêî, òî áóäåò âûáðàí òîò, êîòîðûé íàõîäèòñÿ â ñàëîíå, äî êîòîðîãî ttransport ÿâëÿåòñÿ ìèíèìàëüíûì.
Åñëè ïðîìåæóòîê ñâîáîäíîãî âðåìåíè ìåæäó ïîñëåäíèì êëèåíòîì â î÷åðåäè è íîâûì áîëüøå, ÷åì âðåìÿ íà ìèíèìàëüíóþ óñëóãó (10 ìèíóò), òî â ýòîò
ïðîìåæóòîê áóäóò äîáàâëåíû ¾ôàíòîìíûå¿ êëèåíòû, êîòîðûå ìîãóò áûòü çàìåíåíû íà íàñòîÿùèõ, åñëè îíè ïîÿâÿòñÿ.
Ðàññìîòðèì ïðèìåð ñ ðèñóíêà 15. Êëèåíò Ê3 âñòàåò â î÷åðåäü â 10:10,
åìó åõàòü äî ñàëîíà 45 ìèíóò è ïåðåä íèì â î÷åðåäè íàõîäèòñÿ îäèí êëèåíò.
Îäíàêî â ïðîìåæóòêå ìåæäó êëèåíòîì Ê2 è Ê3 ìîæíî óñïåòü îêàçàòü óñëóãó
åùå îäíîìó êëèåíòó, åñëè îí ïîÿâèòñÿ. Ïîýòîìó, êîãäà Ê3 âñòàåò â î÷åðåäü, äëÿ
íåãî îòîáðàæàåòñÿ, ÷òî ïåðåä íèì òðè ÷åëîâåêà.
29
Ðèñóíîê 15. Çàïèñü êëèåíòà Ê3
×åðåç äåñÿòü ìèíóò íà ñàéòå ê ýòîìó æå ìàñòåðó íà óñëóãó äëèòåëüíîñòüþ
15 ìèíóò çàïèñûâàåòñÿ êëèåíò Ê4, è îí áóäåò â ñàëîíå óæå â 10:45, ÷òî ïîçâîëÿåò
ïîäñòðè÷ü åãî ðàíüøå êëèåíòà Ê3, åñëè ñäâèíóòü åãî íà ïÿòü ìèíóò (ñì. ðèñ. 16).
Ýòî ñòàíîâèòñÿ âîçìîæíûì, òàê êàê â îòëè÷èè îò çàïèñè ýëåêòðîííàÿ î÷åðåäü
íå ïðåäïîëàãàåò óêàçàíèÿ òî÷íîãî âðåìåíè íà÷àëà îêàçàíèÿ óñëóãè.
Ðèñóíîê 16. Çàïèñü êëèåíòà Ê4
Òàêèì îáðàçîì, äàííàÿ ñèñòåìà ýëåêòðîííîé î÷åðåäè ïîçâîëÿåò óìåíüøàòü êîëè÷åñòâî ¾îêîí¿ ìåæäó êëèåíòàìè, ÷òî âûãîäíî êàê áèçíåñó, òàê è êëè30
åíòàì.
Ïîñëå òîãî êàê êëèåíò ïîäòâåðæäàåò, ÷òî îí âñòàë â î÷åðåäü, èíôîðìàöèÿ
îá ýòîì îòïðàâëÿåòñÿ íà ñåðâåð, ãäå ïðîèñõîäèò ïðîâåðêà, íå îêàçàëîñü ëè ýòî
ìåñòî çàíÿòûì äðóãèì êëèåíòîì, ïîêà ïðîèñõîäèëî çàïîëíåíèå ôîðìû. Åñëè
òàêîå ïðîèñõîäèò, òî óâåäîìëåíèå îá ýòîì ïîñòóïàåò íà ñàéò è êëèåíò ìîæåò
ëèáî èçìåíèòü ïàðàìåòðû, ëèáî ñîãëàñèòüñÿ ñ íîâûì ìåñòîì â î÷åðåäè. Åñëè
ìåñòî îêàçûâàåòñÿ ñâîáîäíûì, òî â ðåãèñòð âíîñèòñÿ íîâàÿ çàïèñü.
Äëÿ àäìèíèñòðàòîðà ñàëîíà áûëî ðåàëèçîâàíî òàáëî äëÿ ïðîñìîòðà òåêóùåãî ñîñòîÿíèÿ î÷åðåäè (ñì. ðèñ 17). Àäìèíèñòðàòîð èìååò âîçìîæíîñòü
ïðîñìàòðèâàòü î÷åðåäü âïåðåä, à òàêæå âèäèò ïðèìåðíîå âðåìÿ íà÷àëà óñëóãè äëÿ êëèåíòà. Òàáëî îáíîâëÿåòñÿ êàæäûå 30 ñåêóíä. Åñëè âîçíèêàþò êàêèåëèáî íåïðåäâèäåííûå ñèòóàöèè, òî àäìèíèñòðàòîð ìîæåò ïåðåéòè íà âêëàäêó
¾Ðåäàêòèðîâàíèå¿ è èçìåíèòü î÷åðåäü âðó÷íóþ.
Ðèñóíîê 17. Òàáëî àäìèíèñòðàòîðà
Äëÿ êëèåíòîâ òàêæå ðåàëèçîâàíî òàáëî. Îñíîâíûì åãî îòëè÷èåì ÿâëÿåòñÿ
íåâîçìîæíîñòü ïðîñìàòðèâàòü î÷åðåäü äàëüøå, ÷åì íà îäíîãî êëèåíòà.  öåëÿõ
áåçîïàñíîñòè íà êëèåíòñêîì òàáëî îòîáðàæàåòñÿ òîëüêî ÷àñòü íîìåðà òåëåôîíà.
Êîãäà ìàñòåð ïðîáèâàåò ÷åê äëÿ êëèåíòà, åãî ñòàòóñ ìåíÿåòñÿ íà ¾Ñâîáîäåí¿. Åñëè âðåìÿ äî ñëåäóþùåãî êëèåíòà ìåíüøå, ÷åì ìèíèìàëüíîå âðåìÿ
îêàçàíèÿ óñëóãè, òî ïðèãëàøàåòñÿ ñëåäóþùèé êëèåíò.
31
ÇÀÊËÞ×ÅÍÈÅ
 ðåçóëüòàòå âûïîëíåíèÿ âûïóñêíîé êâàëèôèêàöèîííîé ðàáîòû áûëè ðåàëèçîâàíû äîïîëíèòåëüíûå ìîäóëè äëÿ èíôîðìàöèîííîé ñèñòåìû êîìïàíèè
¾Áðàäîáðåé¿, ïîçâîëÿþùèå óïðàâëÿòü ïîòîêîì êëèåíòîâ, à òàêæå ïðîèçâîäèòü
èõ èäåíòèôèêàöèþ ïî ëèöó. Òàêèì îáðàçîì, áûëè âûïîëíåíû âñå ïîñòàâëåííûå
çàäà÷è:
1) ïðîâåäåí îáçîð è ñðàâíèòåëüíûé àíàëèç ñóùåñòâóþùèõ àíàëîãîâ äëÿ
èäåíòèôèêàöèè êëèåíòîâ ïî ôîòî è ýëåêòðîííîé î÷åðåäè;
2) ðàññìîòðåíû ñïîñîáû îðãàíèçàöèè ýëåêòðîííîé î÷åðåäè;
3) ðåàëèçîâàí ìîäóëü îíëàéí-î÷åðåäè;
4) ðåàëèçîâàí ìîäóëü äëÿ õðàíåíèÿ è ïîèñêà ôîòîãðàôèé ñòðèæåê êëèåíòîâ;
Âñå ìàòåðèàëû, ñâÿçàííûå ñ ðàçðàáîòêîé, áûëè ïåðåäàíû â ÃÊ ¾Ôîðóñ¿
äëÿ ïîñëåäóþùåãî âíåäðåíèÿ â ñåòü ïàðèêìàõåðñêèõ è áàðáåðøîïîâ ¾Áðàäîáðåé¿.
32
ÑÏÈÑÎÊ ÈÑÏÎËÜÇÎÂÀÍÍÛÕ ÈÑÒÎ×ÍÈÊÎÂ
1.
¾Âèçèò-òðåêåð¿ äëÿ ¾Áèòðèêñ 24¿ [Ýëåêòðîííûé ðåñóðñ]. [Á. ì. : á. è.],
2021. URL: https://helpdesk.bitrix24.ru/open/5037837/ (äàòà îáðàùåíèÿ: 01.05.2021).
2.
Áðàäîáðåé [Ýëåêòðîííûé ðåñóðñ]. [Á. ì. : á. è.], 2021. URL: https://
vk.com/bradobrey38 (äàòà îáðàùåíèÿ: 01.05.2021).
3.
Êóëàãèí, Â. Digital@Scale : Íàñòîëüíàÿ êíèãà ïî öèôðîâèçàöèè áèçíåñà
[Òåêñò] / Â. Êóëàãèí, À. Ñóõàðåâñêè, Þ. Ìåôôåðò. Ì. : Èíòåëëåêòóàëüíàÿ Ëèòåðàòóðà, 2019. 293 ñ.
4.
Ìàðøðóòèçàöèÿ ßíäåêñ [Ýëåêòðîííûé ðåñóðñ]. [Á. ì. : á. è.], 2021.
URL: https://yandex.ru/dev/maps/jsapi/doc/2.1/dg/concepts/router/
routePanel.html (äàòà îáðàùåíèÿ: 25.05.2021).
5.
Ìåòîäû îáðàáîòêè è ðàñïîçíàâàíèÿ èçîáðàæåíèé ëèö â çàäà÷àõ áèîìåòðèè
[Òåêñò] / Ã. À. Êóõàðåâ, Å. È. Êàìåíñêàÿ, Þ. Í. Ìàòâååâ, Í. Ë. Ùåãîëåâà.
Ì. : Ïîëèòåõíèêà, 2013. 388 ñ.
6.
Îáçîð ñèñòåìû ¾1Ñ: Ïðåäïðèÿòèå 8¿ [Ýëåêòðîííûé ðåñóðñ]. [Á. ì. : á. è.],
2021. URL: https://v8.1c.ru/tekhnologii/overview/ (äàòà îáðàùåíèÿ:
01.05.2021).
7.
Ïàñïîðò
íîëîãèè¿
2021.
ôåäåðàëüíîãî
[Ýëåêòðîííûé
URL:
ïðîåêòà
ðåñóðñ].
¾Öèôðîâûå
[Á.
ñêâîçíûå
òåõ-
:
è.],
ì.
á.
https://digital.gov.ru/uploaded/files/
pasport-federalnogo-proekta-tsifrovyie-tehnologii.pdf
(äàòà
îá-
ðàùåíèÿ: 04.06.2021).
33
8.
Ñðàâíåíèå Vue.js ñ äðóãèìè ôðåéìâîðêàìè [Ýëåêòðîííûé ðåñóðñ]. [Á.
ì. : á. è.], 2021. URL: https://ru.vuejs.org/v2/guide/comparison.html
(äàòà îáðàùåíèÿ: 29.05.2021).
9.
Ôóíêöèîíàëüíîñòü, ñïåöèôè÷íàÿ äëÿ ìîáèëüíûõ óñòðîéñòâ [Ýëåêòðîííûé
ðåñóðñ]. [Á. ì. : á. è.], 2021. URL: https://v8.1c.ru/platforma/
funktsionalnost-spetsifichnaya-dlya-mobilnykh-ustroystv/ (äàòà îáðàùåíèÿ: 02.06.2021).
10. Õðóñòàëåâà, Å. Þ. Çíàêîìñòâî ñ ðàçðàáîòêîé ìîáèëüíûõ ïðèëîæåíèé íà
ïëàòôîðìå ¾1Ñ:Ïðåäïðèÿòèå 8¿ [Òåêñò] / Å. Þ. Õðóñòàëåâà. 2-å èçäàíèå
èçä. Ì. : ÎÎÎ ¾1Ñ-Ïàáëèøèíã¿, 2015. 276 ñ.
11. Öèôðîâûå ñêâîçíûå òåõíîëîãèè [Ýëåêòðîííûé ðåñóðñ]. [Á. ì. : á. è.],
2021. URL: https://cdto.wiki/ (äàòà îáðàùåíèÿ: 04.06.2021).
12. Ýëåêòðîííàÿ î÷åðåäü [Ýëåêòðîííûé ðåñóðñ]. [Á. ì. : á. è.], 2021.
URL: https://www.banki.ru/wikibank/elektronnaya_ochered/ (äàòà îáðàùåíèÿ: 01.05.2021).
13. Ýëåêòðîííàÿ î÷åðåäü îò êîìïàíèè ¾BR Studio¿ [Ýëåêòðîííûé ðåñóðñ].
[Á. ì. : á. è.], 2021. URL: https://app.ocheredi.net/ (äàòà îáðàùåíèÿ:
01.05.2021).
14. ¾Face Recognition¿ äëÿ ¾Dynamics 365 CRM¿ [Ýëåêòðîííûé ðåñóðñ].
[Á. ì. : á. è.], 2021. URL: https://appsource.microsoft.com/en-us/
product/web-apps/waveaccess.face_recognition_crm?tab=overview (äàòà îáðàùåíèÿ: 01.05.2021).
15. TimeZoneDB [Ýëåêòðîííûé ðåñóðñ]. [Á. ì. : á. è.], 2021. URL: http:
//timezonedb.com/ (äàòà îáðàùåíèÿ: 02.04.2021).
34
16. Yclients [Ýëåêòðîííûé ðåñóðñ]. [Á. ì. : á. è.], 2021. URL: https://www.
yclients.com/ (äàòà îáðàùåíèÿ: 01.05.2021).
35
ÏÐÈËÎÆÅÍÈÅ 1.
Ôóíêöèè äëÿ çàïðîñà èäåíòèôèêàöèè êëèåíòà èç
ìîáèëüíîãî ïðèëîæåíèÿ
Ëèñòèíã 3. Çàïðîñ èäåíòèôèêàöèè êëèåíòà èç ìîáèëüíîãî ïðèëîæåíèÿ
&ÍàÊëèåíòå
Ïðîöåäóðà ÐàñïîçíàòüÊëèåíòà()
ÄàííûåÔîòî = Ôîðóñ_Êàìåðà.Ïîëó÷èòüÄàííûåÔîòîÑíèìêà();
Åñëè ÒèïÇí÷(ÔÑ) = Òèï("ÔèêñèðîâàííàÿÑòðóêòóðà") Òîãäà
Ñîîáùåíèå = Íîâûé ÑîîáùåíèåÏîëüçîâàòåëþ;
Ñîîáùåíèå.Òåêñò = ÔÑ.Îøèáêà;
Ñîîáùåíèå.Ñîîáùèòü();
Èíà÷åÅñëè ÄàííûåÔîòî <> Íåîïðåäåëåíî Òîãäà
ÔîòîÄÄ = ÄàííûåÔîòî.Ïîëó÷èòüÄâîè÷íûåÄàííûå();
Ðåçóëüòàò = ÍàéòèÏîÔîòîÍàÑåðâåðå(ÔîòîÄÄ);
ÒåêñòÎøèáêè = "";
ÊîäÊëèåíòà = "";
ÔîòîÊëèåíòà = Íîâûé Ìàññèâ;
Åñëè ÒèïÇí÷(Ðåçóëüòàò) = Òèï("Ñòðîêà") Òîãäà
Ñîîáùåíèå = Íîâûé ÑîîáùåíèåÏîëüçîâàòåëþ;
Ñîîáùåíèå.Òåêñò = "Îøèáêà ñ ôîòî â ïðèëîæåíèè: " + Ðåçóëüòàò;
Ñîîáùåíèå.Ñîîáùèòü();
Èíà÷åÅñëè Ðåçóëüòàò.Ñâîéñòâî("error", ÒåêñòÎøèáêè) Òîãäà
Ñîîáùåíèå = Íîâûé ÑîîáùåíèåÏîëüçîâàòåëþ;
Ñîîáùåíèå.Òåêñò = "Îøèáêà ñ ôîòî íà ñåðâåðå: " + Ðåçóëüòàò;
Ñîîáùåíèå.Ñîîáùèòü();
Èíà÷åÅñëè Ðåçóëüòàò.Ñâîéñòâî("photos", ÔîòîÊëèåíòà) Òîãäà
//Êëèåíò íàéäåí, îòîáðàçèòü ôîðìó ïðîøëûõ ôîòî
Ï = Íîâûé Ñòðóêòóðà;
Ï.Âñòàâèòü("Ôîòîãðàôèè", Ðåçóëüòàò.photos);
Ï.Âñòàâèòü("ÊîäÊëèåíòà", Ðåçóëüòàò.client_id);
Ôîðìà = Ïîëó÷èòüÔîðìó("Îáðàáîòêà.ÏðîøëûåÔîòî.Ôîðìà.Ôîðìà", Ï);
36
Ôîðìà.Îòêðûòü();
Èíà÷åÅñëè Ðåçóëüòàò.Ñâîéñòâî("client_id", ÊîäÊëèåíòà) Òîãäà
//Êëèåíò íàéäåí, ïðîøëûõ ôîòî íåò, îòîáðàçèòü âûáîð óñëóãè
Ï = Íîâûé Ñòðóêòóðà;
Ï.Âñòàâèòü("ÊîäÊëèåíòà", Ðåçóëüòàò.client_id);
Ôîðìà = Ïîëó÷èòüÔîðìó("Îáðàáîòêà.ÏðîøëûåÔîòî.Ôîðìà.Ôîðìà1", Ï);
Ôîðìà.Îòêðûòü();
Èíà÷åÅñëè Ðåçóëüòàò.Ñâîéñòâî("not_found") Òîãäà
//Êëèåíò íå íàéäåí, îòîáðàçèòü ôîðìó äîáàâëåíèÿ ôîòî
Ôîðìà = Ïîëó÷èòüÔîðìó
("Îáðàáîòêà.ÄîáàâèòüÈäåíòèôèêàöèîííîåÔîòî.Ôîðìà.Ôîðìà");
Ôîðìà.Îòêðûòü();
针֌
Ñîîáùåíèå = Íîâûé ÑîîáùåíèåÏîëüçîâàòåëþ;
Ñîîáùåíèå.Òåêñò = "Îøèáêà: " + Ðåçóëüòàò;
Ñîîáùåíèå.Ñîîáùèòü();
ÊîíåöÅñëè;
ÊîíåöÅñëè;
ÊîíåöÏðîöåäóðû.
Ôóíêöèÿ ÍàéòèÏîÔîòîÍàÑåðâåðå(Äâîè÷íûåÄàííûåÑÊàìåðû)
ÑòðîêàBase64 = Base64Ñòðîêà(Äâîè÷íûåÄàííûåÑÊàìåðû);
ÑòðóêòóðàJSON = Íîâûé Ñòðóêòóðà;
ÑòðóêòóðàJSON.Âñòàâèòü("photo", ÑòðîêàBase64);
ÑòðóêòóðàJSON.Âñòàâèòü("p_type", 111);
ÑòðîêàJSON = ÎáìåíÏîHTTP.Ïîëó÷èòüÑòðîêóJSON(ÑòðóêòóðàJSON);
Ðåñóðñ = "brad/hs/camera/find";
ÀäðåñÐåñóðñà = ÑîêðËÏ(Ðåñóðñ);
Âîçâðàò Ôîðóñ_ÎáìåíÏîHTTP.ÂûïîëíèòüÇàïðîñ("POST", "FindByPhoto", ÀäðåñÐåñóðñ
à, ÑòðîêàJSON);
ÊîíåöÔóíêöèè
37
ÏÐÈËÎÆÅÍÈÅ 2.
Ïîèñê èñòîðèè êëèåíòà ïî åãî ôîòî
Ëèñòèíã 4. Ïîèñê èñòîðèè êëèåíòà ïî åãî ôîòî
Ôóíêöèÿ FindByPhotoFind(Çàïðîñ)
Ñîîáùåíèå = Çàïðîñ.Ïîëó÷èòüÒåëîÊàêÑòðîêó("UTF-8");
ÑòðóêòóðàJSON = Ïîëó÷èòüÑòðóêòóðóÈçÑòðîêè(Ñîîáùåíèå);
ÔîòîÊëèåíòàBase64 = "";
ÑòðóêòóðàÎòâåò = Íîâûé Ñòðóêòóðà;
Åñëè ÑòðóêòóðàJSON.Ñâîéñòâî("photo", ÔîòîÊëèåíòàBase64) Òîãäà
Ïîëó÷åííûåÊëèåíòû = Ïîëó÷èòüÊîäÊëèåíòàÏîÔîòî(ÑòðóêòóðàJSON);
Åñëè Ïîëó÷åííûåÊëèåíòû.Ñâîéñòâî("ids") Òîãäà
Åñëè Ïîëó÷åííûåÊëèåíòû.ids.Êîëè÷åñòâî() <> 0 Òîãäà
Çàïðîñ = Íîâûé Çàïðîñ;
Çàïðîñ.Òåêñò =
"ÂÛÁÐÀÒÜ
| ÂëîæåííûéÇàïðîñ.×åêÍîìåð ÊÀÊ ×åêÍîìåð,
| ÂëîæåííûéÇàïðîñ.×åêÄàòà ÊÀÊ ×åêÄàòà,
| ÂëîæåííûéÇàïðîñ.ÔîòîÑïåðåäè,
| ÂëîæåííûéÇàïðîñ.ÔîòîÑëåâà,
| ÂëîæåííûéÇàïðîñ.ÔîòîÑïðàâà,
| ÂëîæåííûéÇàïðîñ.ÔîòîÑçàäè,
| ÂëîæåííûéÇàïðîñ.ÔîòîÑâåðõó,
| ÂÛÁÎÐ
|
|
|
ÊÎÃÄÀ ×åêÊÊÌÇàïàñû.Êîëè÷åñòâî ÅÑÒÜ NULL
ÒÎÃÄÀ 0
ÈÍÀ×Å ×åêÊÊÌÇàïàñû.Êîëè÷åñòâî
| ÊÎÍÅÖ ÊÀÊ Êîëè÷åñòâî,
| ÂÛÁÎÐ
|
|
|
ÊÎÃÄÀ ×åêÊÊÌÇàïàñû.Íîìåíêëàòóðà.Êîä ÅÑÒÜ NULL
ÒÎÃÄÀ ""01-00000297""
ÈÍÀ×Å ×åêÊÊÌÇàïàñû.Íîìåíêëàòóðà.Êîä
38
| ÊÎÍÅÖ ÊÀÊ ÍîìåíêëàòóðàÊîä,
| ÂÛÁÎÐ
|
ÊÎÃÄÀ ÂëîæåííûéÇàïðîñ.ÑóììàÄîêóìåíòà ÅÑÒÜ NULL
|
|
ÒÎÃÄÀ 500
ÈÍÀ×Å ÂëîæåííûéÇàïðîñ.ÑóììàÄîêóìåíòà
| ÊÎÍÅÖ ÊÀÊ ÑóììàÄîêóìåíòà
|ÈÇ
| (ÂÛÁÐÀÒÜ
|
Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ.×åêÍîìåð ÊÀÊ ×åêÍîìåð,
|
Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ.×åêÄàòà ÊÀÊ ×åêÄàòà,
|
Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ.ÔîòîÑïåðåäè ÊÀÊ ÔîòîÑïåðåäè,
|
Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ.ÔîòîÑëåâà ÊÀÊ ÔîòîÑëåâà,
|
Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ.ÔîòîÑïðàâà ÊÀÊ ÔîòîÑïðàâà,
|
Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ.ÔîòîÑçàäè ÊÀÊ ÔîòîÑçàäè,
|
Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ.ÔîòîÑâåðõó ÊÀÊ ÔîòîÑâåðõó,
|
Äîê×åêÊÊÌ.Ññûëêà ÊÀÊ Ññûëêà,
|
Äîê×åêÊÊÌ.ÑóììàÄîêóìåíòà ÊÀÊ ÑóììàÄîêóìåíòà
| ÈÇ
|
ÐåãèñòðÑâåäåíèé.Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ ÊÀÊ Ôîðóñ
_ÕðàíèëèùåÔîòîÊëèåíòîâ
|
ËÅÂÎÅ ÑÎÅÄÈÍÅÍÈÅ Äîêóìåíò.×åêÊÊÌ ÊÀÊ Äîê×åêÊÊÌ
|
ÏÎ Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ.×åêÍîìåð = Äîê×åêÊÊÌ.Íîìåð
|
È Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ.×åêÄàòà = Äîê×åêÊÊÌ.Äàòà
| ÃÄÅ
|
Ôîðóñ_ÕðàíèëèùåÔîòîÊëèåíòîâ.Êëèåíò = &Êëèåíò) ÊÀÊ ÂëîæåííûéÇàïðîñ
|
ËÅÂÎÅ ÑÎÅÄÈÍÅÍÈÅ Äîêóìåíò.×åêÊÊÌ.Çàïàñû ÊÀÊ ×åêÊÊÌÇàïàñû
|
ÏÎ ÂëîæåííûéÇàïðîñ.Ññûëêà = ×åêÊÊÌÇàïàñû.Ññûëêà
|
|ÓÏÎÐßÄÎ×ÈÒÜ ÏÎ
| ×åêÄàòà
|ÈÒÎÃÈ ÏÎ
| ×åêÍîìåð";
Êëèåíò = Ñïðàâî÷íèêè.Êîíòðàãåíòû.ÍàéòèÏîÊîäó(Ïîëó÷åííûåÊëèåíòû.ids[0]);
39
Çàïðîñ.ÓñòàíîâèòüÏàðàìåòð("Êëèåíò", Êëèåíò);
ÐåçóëüòàòÇàïðîñà = Çàïðîñ.Âûïîëíèòü();
Âûáîðêà×åêÊÊÌÍîìåð = ÐåçóëüòàòÇàïðîñà
.Âûáðàòü(ÎáõîäÐåçóëüòàòàÇàïðîñà.ÏîÃðóïïèðîâêàì);
Åñëè Âûáîðêà×åêÊÊÌÍîìåð.Êîëè÷åñòâî() = 0 Òîãäà
ÑòðóêòóðàÎòâåò.Âñòàâèòü("p_type", 211);
ÑòðóêòóðàÎòâåò.Âñòàâèòü("client_id", Ïîëó÷åííûåÊëèåíòû.ids[0]);
Âîçâðàò ÂåðíóòüÓñïåõÈÎòâåò(ÑòðóêòóðàÎòâåò);
ÊîíåöÅñëè;
ÌàññèâÔîòî = Íîâûé Ìàññèâ;
Ïîêà Âûáîðêà×åêÊÊÌÍîìåð.Ñëåäóþùèé() Öèêë
ÝòîÏåðâàÿÓñëóãà = Èñòèíà;
ÑòðóêòóðàÔîòî = Íîâûé Ñòðóêòóðà;
ÑòðóêòóðàÔîòî.Âñòàâèòü("code", Âûáîðêà×åêÊÊÌÍîìåð.×åêÍîìåð);
Âûáîðêà = Âûáîðêà×åêÊÊÌÍîìåð.Âûáðàòü();
ÌàññèâÍîìåíêëàòóðà = Íîâûé Ìàññèâ;
Ïîêà Âûáîðêà.Ñëåäóþùèé() Öèêë
Åñëè ÝòîÏåðâàÿÓñëóãà Òîãäà
ÝòîÏåðâàÿÓñëóãà = Ëîæü;
ÔîòîÑïåðåäè = ÂåðíóòüÑóùåñòâóþùååÔîòî(Âûáîðêà.ÔîòîÑïåðåäè);
ÔîòîÑëåâà = ÂåðíóòüÑóùåñòâóþùååÔîòî(Âûáîðêà.ÔîòîÑëåâà);
ÔîòîÑïðàâà = ÂåðíóòüÑóùåñòâóþùååÔîòî(Âûáîðêà.ÔîòîÑïðàâà);
ÔîòîÑçàäè = ÂåðíóòüÑóùåñòâóþùååÔîòî(Âûáîðêà.ÔîòîÑçàäè);
ÔîòîÑâåðõó = ÂåðíóòüÑóùåñòâóþùååÔîòî(Âûáîðêà.ÔîòîÑâåðõó);
Åñëè ÏóñòàÿÑòðîêà(ÔîòîÑïåðåäè) ÈËÈ ÏóñòàÿÑòðîêà(ÔîòîÑâåðõó)
ÈËÈ ÏóñòàÿÑòðîêà(ÔîòîÑëåâà)
ÈËÈ ÏóñòàÿÑòðîêà(ÔîòîÑïðàâà)
ÈËÈ ÏóñòàÿÑòðîêà(ÔîòîÑçàäè) Òîãäà
Âîçâðàò ÂåðíóòüÎøèáêó(404, "Íå íàéäåí èñêîìûé ôàéë ");
针֌
ÑòðóêòóðàÔîòî.Âñòàâèòü("front_photo", ÔîòîÑïåðåäè);
ÑòðóêòóðàÔîòî.Âñòàâèòü("left_photo", ÔîòîÑëåâà);
ÑòðóêòóðàÔîòî.Âñòàâèòü("right_photo", ÔîòîÑïðàâà);
40
ÑòðóêòóðàÔîòî.Âñòàâèòü("back_photo", ÔîòîÑçàäè);
ÑòðóêòóðàÔîòî.Âñòàâèòü("up_photo", ÔîòîÑâåðõó);
ÊîíåöÅñëè;
ÑòðóêòóðàÔîòî.Âñòàâèòü("date", Ñòðîêà(Ôîðìàò(Âûáîðêà.×åêÄàòà,
"ÄÔ=yyyyMMdd")));
ÑòðóêòóðàÔîòî.Âñòàâèòü("cost", Âûáîðêà.ÑóììàÄîêóìåíòà);
ÊîíåöÅñëè;
ÑòðóêòóðàÍîìåíêëàòóðà = Íîâûé Ñòðóêòóðà;
ÑòðóêòóðàÍîìåíêëàòóðà.Âñòàâèòü("name", Âûáîðêà.ÍîìåíêëàòóðàÊîä);
ÑòðóêòóðàÍîìåíêëàòóðà.Âñòàâèòü("quantity", Âûáîðêà.Êîëè÷åñòâî);
ÌàññèâÍîìåíêëàòóðà.Äîáàâèòü(ÑòðóêòóðàÍîìåíêëàòóðà);
ÊîíåöÖèêëà;
ÑòðóêòóðàÔîòî.Âñòàâèòü("services", ÌàññèâÍîìåíêëàòóðà);
ÌàññèâÔîòî.Äîáàâèòü(ÑòðóêòóðàÔîòî);
ÊîíåöÖèêëà;
ÑòðóêòóðàÎòâåò.Âñòàâèòü("p_type", 211);
ÑòðóêòóðàÎòâåò.Âñòàâèòü("client_id", Ïîëó÷åííûåÊëèåíòû.ids[0]);
ÑòðóêòóðàÎòâåò.Âñòàâèòü("photos", ÌàññèâÔîòî);
Âîçâðàò ÂåðíóòüÓñïåõÈÎòâåò(ÑòðóêòóðàÎòâåò);
针֌
ÑòðóêòóðàÎòâåò = Íîâûé Ñòðóêòóðà;
ÑòðóêòóðàÎòâåò.Âñòàâèòü("p_type", 213);
ÑòðóêòóðàÎòâåò.Âñòàâèòü("not_found", "");
Âîçâðàò ÂåðíóòüÓñïåõÈÎòâåò(ÑòðóêòóðàÎòâåò);
ÊîíåöÅñëè;
针֌
Âîçâðàò ÂåðíóòüÎøèáêó(400, "Íå ïðèøåë îòâåò ñ ñåðâèñà ðàñïîçíàâàíèÿ");
ÊîíåöÅñëè;
针֌
Âîçâðàò ÂåðíóòüÎøèáêó(400, "Íå çàäàí ïàðàìåòð img");
ÊîíåöÅñëè
ÊîíåöÔóíêöèè
41
ÏÐÈËÎÆÅÍÈÅ 3.
Àëãîðèòì âûáîðà âðåìåíè â î÷åðåäè ó ìàñòåðà
Ëèñòèíã 5. Àëãîðèòì âûáîðà âðåìåíè â î÷åðåäè ó ìàñòåðà
checkMaster(master, currentTime, pathTime){
const MAX_TIME = 10000000
var currentTimeSec = this.time2seconds(currentTime)
var pathTimeSec = pathTime
var eps = Math.max(5*60, Math.ceil(pathTimeSec * 1.3))
var minTime = currentTimeSec + pathTimeSec + eps
var serviceTime = this.selectServices.reduce((acc, { time }) => acc + time,
0) * 60
var arrayWorkTime = master.salon_workTime.split('-')
if (currentTimeSec + 3600 < this.time2seconds(arrayWorkTime[0]) || minTime
+ serviceTime > this.time2seconds(arrayWorkTime[1])) {
return MAX_TIME
}
master.bookedTime.sort((a, b) => {
let valueA = this.time2seconds(a.dateTime.slice(11)) + a.pathTime * 60
let valueB = this.time2seconds(b.dateTime.slice(11)) + b.pathTime * 60
return valueA - valueB
})
if (master.bookedTime.length === 0) {
if (pathTimeSec > 3600) {
return MAX_TIME
} else {
return Math.max(minTime, this.time2seconds(arrayWorkTime[0]))
}
}
for (let index = 0; index < master.bookedTime.length; index++ ){
let element = master.bookedTime[index]
42
let startTime = this.time2seconds(element.dateTime.slice(11)) +
element.pathTime * 60
let finishTime = startTime + element.serviceTime * 60
if (index === 0) {
if (Math.max(minTime, this.time2seconds(arrayWorkTime[0])) + serviceTime
<= startTime) {
return Math.max(minTime, this.time2seconds(arrayWorkTime[0]))
}
}
if (index < master.bookedTime.length - 1) {
let startTimeNext = this.time2seconds(master.bookedTime[index +
1].dateTime.slice(11)) + master.bookedTime[index + 1].pathTime * 60
if (Math.max(minTime, finishTime) + serviceTime <= startTimeNext) {
return Math.max(minTime, finishTime)
}
} else {
if (finishTime >= minTime) {
if (finishTime + serviceTime > this.time2seconds(arrayWorkTime[1])) {
return MAX_TIME
} else {
return finishTime
}
} else {
if (pathTimeSec > 3600) {
return MAX_TIME
} else {
return minTime
}
}
}
}
},
checkPlace(place, currentTime, pathTime){
43
var answerMaster = ''
const MAX_TIME = 10000000
var answerTime = MAX_TIME
place.masters.forEach((element) => {
let promAns = this.checkMaster(element, currentTime, pathTime)
if (promAns < answerTime) {
answerTime = promAns
answerMaster = element.id
}
})
return {master_id: answerMaster, time: answerTime}
},
checkSalons(){
var answerMaster2 = ''
var answerSalon2 = null
const MAX_TIME = 10000000
var answerTime2 = MAX_TIME
this.salonsWithRoute.forEach((element) => {
let promAns2 = this.checkPlace(element, element.currentTime,
element.timeRoute.value)
if (promAns2.time < answerTime2) {
answerTime2 = promAns2.time
answerMaster2 = promAns2.master_id
answerSalon2 = element
}
})
return {salon: answerSalon2, master_id: answerMaster2, time: answerTime2}
}
44
ÏÐÈËÎÆÅÍÈÅ 4.
API èäåíòèôèêàöèè êëèåíòà
Àäðåñ:
Òèï:
/nd
POST
Èñòî÷íèê:
ìîáèëüíîå ïðèëîæåíèå
Îïèñàíèå:
çàïðîñ äëÿ èäåíòèôèêàöèè êëèåíòà ïî ôîòî.
Òàáëèöà 3
Ïàðàìåòðû çàïðîñà
Ïîëå
Òèï
Ïðèìåð
photo
Ñòðîêà BASE64
\9iojoisjje. . .
Ïàðàìåòðû îòâåòà, åñëè êëèåíò íàéäåí è ó íåãî åñòü ôîòî
Ïîëå
Òèï
Ïðèìåð
client_id
Ñòðîêà
000000016
photos
Ìàññèâ îáúåêòîâ
[]
front_photo
Ñòðîêà BASE64
\9ioj. . .
left_photo
Ñòðîêà BASE64
\9ioj. . .
right_photo
Ñòðîêà BASE64
\9ioj. . .
back_photo
Ñòðîêà BASE64
\9ioj. . .
up_photo
Ñòðîêà BASE64
\9ioj. . .
services_id
Ìàññèâ îáúåêòîâ
[]
name
×èñëî
000000016
quantity
×èñëî
3
Òàáëèöà 4
45
Ïàðàìåòðû îòâåòà, åñëè êëèåíò íàéäåí è ó íåãî íåò ôîòî
Ïîëå
Òèï
Ïðèìåð
client_id
Ñòðîêà
000000016
Ïàðàìåòðû îòâåòà, åñëè êëèåíò íå íàéäåí
Ïîëå
Òèï
not_found
Ñòðîêà
Òàáëèöà 5
Òàáëèöà 6
Ïðèìåð
Ïàðàìåòðû îòâåòà, åñëè ïðîèçîøëà îøèáêà
Òàáëèöà 7
Ïîëå
Òèï
Ïðèìåð
error_id
×èñëî
1
error
Ñòðîêà
"Íå äîñòóïåí ñåðâèñ
ðàñïîçíàâàíèÿ"
Àäðåñ:
Òèï:
/addid
POST
Èñòî÷íèê:
ìîáèëüíîå ïðèëîæåíèå
Îïèñàíèå:
çàïðîñ äëÿ äîáàâëåíèÿ èäåíòèôèêàöèîííîãî ôîòî êëèåíòà.
Òàáëèöà 8
Ïàðàìåòðû çàïðîñà
Ïîëå
Òèï
Ïðèìåð
client_id
Ñòðîêà
000000016
photo
Ñòðîêà BASE64
\9iojois. . .
46
Ïàðàìåòðû îòâåòà, åñëè ôîòî äîáàâëåíî
Ïîëå
Òèï
good
Ñòðîêà
Òàáëèöà 9
Ïðèìåð
Ïàðàìåòðû îòâåòà, åñëè ïðîèçîøëà îøèáêà
Òàáëèöà 10
Ïîëå
Òèï
Ïðèìåð
error_id
×èñëî
1
error
Ñòðîêà
"Íà ôîòî îòñóòñòâóåò
ëèöî"
Àäðåñ:
Òèï:
/ndaddclient
POST
Èñòî÷íèê:
ìîáèëüíîå ïðèëîæåíèå
Îïèñàíèå:
çàïðîñ äëÿ ïîèñêà ïî íîìåðó òåëåôîíà è äîáàâëåíèÿ êëèåíòà.
Òàáëèöà 11
Ïàðàìåòðû çàïðîñà
Ïîëå
Òèï
Ïðèìåð
add
×èñëî
1
phone
Ñòðîêà
89041185999
moreinfo
Îáúåêò
lastname
Ñòðîêà
Èâàíîâ
rstname
Ñòðîêà
Èâàí
secondname
Ñòðîêà
Èâàíîâè÷
birthday
Ñòðîêà
19990402
email
Ñòðîêà
mail@mail.com
noemail
×èñëî
0
47
Ïðîäîëæåíèå òàáëèöû
nosms
×èñëî
0
Òàáëèöà 12
Ïàðàìåòðû îòâåòà
Ïîëå
Òèï
Ïðèìåð
client_id
Ñòðîêà
000000016
Àäðåñ:
Òèï:
/addservice
POST
Èñòî÷íèê:
ìîáèëüíîå ïðèëîæåíèå
Îïèñàíèå:
çàïðîñ äëÿ äîáàâëåíèÿ ôîòî ïîñëå óñëóãè.
Òàáëèöà 13
Ïàðàìåòðû çàïðîñà
Ïîëå
Òèï
Ïðèìåð
client_id
Ñòðîêà
000000016
check_id
Ñòðîêà
000000356
date
Ñòðîêà
20210624
front
Ñòðîêà BASE64
\9ioj. . .
left
Ñòðîêà BASE64
\9ioj. . .
right
Ñòðîêà BASE64
\9ioj. . .
back
Ñòðîêà BASE64
\9ioj. . .
up
Ñòðîêà BASE64
\9ioj. . .
Ïàðàìåòðû îòâåòà, åñëè ôîòî äîáàâëåíî
Ïîëå
Òèï
good
Ñòðîêà
Òàáëèöà 14
Ïðèìåð
48
Ïàðàìåòðû îòâåòà, åñëè ïðîèçîøëà îøèáêà
Ïîëå
Òèï
Ïðèìåð
error_id
×èñëî
1
error
Ñòðîêà
"Ïðîèçîøëà
Òàáëèöà 15
îøèáêà
íà ñåðâåðå"
49
ÏÐÈËÎÆÅÍÈÅ 5.
API ýëåêòðîííîé î÷åðåäè
Àäðåñ:
Òèï:
/auth?phone=
GET
Èñòî÷íèê:
ñàéò
Îïèñàíèå:
çàïðîñ êîäà äëÿ àâòîðèçàöèè ÷åðåç ÑÌÑ.
Òàáëèöà 16
Ïàðàìåòðû çàïðîñà
Ïîëå
Òèï
Ïðèìåð
phone
Ñòðîêà
89041185999
Àäðåñ:
Òèï:
/authcode?phone=&code=
GET
Èñòî÷íèê:
ñàéò
Îïèñàíèå:
çàïðîñ ïðîâåðêè ïðàâèëüíîñòè êîäà äëÿ àâòîðèçàöèè.
Òàáëèöà 17
Ïàðàìåòðû çàïðîñà
Ïîëå
Òèï
Ïðèìåð
phone
Ñòðîêà
89041185999
code
×èñëî
1234
Ïàðàìåòðû îòâåòà, åñëè êîä âåðåí
Òàáëèöà 18
Ïîëå
Òèï
Ïðèìåð
status
×èñëî
200
token
Ñòðîêà
bas7ph7dfan7ana8
50
Ïàðàìåòðû îòâåòà, åñëè êîä íå âåðåí
Ïîëå
Òèï
Ïðèìåð
status
×èñëî
400
Àäðåñ:
Òèï:
Òàáëèöà 19
/services
GET
Èñòî÷íèê:
ñàéò
Îïèñàíèå:
çàïðîñ ñïèñêà óñëóã.
Òàáëèöà 20
Ïàðàìåòðû îòâåòà
Ïîëå
Òèï
Ïðèìåð
services
Ìàññèâ îáúåêòîâ
[]
id
Ñòðîêà
000000005
name
Ñòðîêà
Îòåö è ñûí
time
×èñëî
15
ignoreCoe
Áóëåâî
false
img
Ñòðîêà BASE64
\9iojoisjje. . .
description
Ñòðîêà
Êëàññè÷åñêàÿ ñòðèæêà äëÿ îòöà è ñûíà
Àäðåñ:
Òèï:
/info?date=
GET
Èñòî÷íèê:
ñàéò
Îïèñàíèå:
çàïðîñ èíôîðìàöèè î ñàëîíàõ è ìàñòåðàõ.
51
Òàáëèöà 21
Ïàðàìåòðû çàïðîñà
Ïîëå
Òèï
Ïðèìåð
date
Ñòðîêà
20210624
Òàáëèöà 22
Ïàðàìåòðû îòâåòà
Ïîëå
Òèï
Ïðèìåð
salons
Ìàññèâ îáúåêòîâ
[]
id
Ñòðîêà
000000005
name
Ñòðîêà
Îòåö è ñûí
address
Ñòðîêà
óë. Ïàðòèçàíñêàÿ, 49
coords
Ñòðîêà
104,522,52,556565
workTime
Ñòðîêà
09:00-21:00
masters
Ìàññèâ îáúåêòîâ
[]
id
Ñòðîêà
000000005
name
Ñòðîêà
Îòåö è ñûí
avatar
Ñòðîêà BASE64
\9iojoisjje. . .
speedCoe
×èñëî
0,9
language
×èñëî
89
quality
×èñëî
95
rating
×èñëî
4,9
bookedTime
Ìàññèâ îáúåêòîâ
[]
dateTime
Ñòðîêà
24.06.2021 11:55
serviceTime
×èñëî
15
pathTime
×èñëî
20
Àäðåñ:
/waitinline
52
Òèï:
POST
Èñòî÷íèê:
ñàéò
Îïèñàíèå:
çàïðîñ íà äîáàâëåíèå â î÷åðåäü.
Òàáëèöà 23
Ïàðàìåòðû çàïðîñà
Ïîëå
Òèï
Ïðèìåð
phone
Ñòðîêà
89041185999
services
Ñòðîêà
000000005
masterId
Ñòðîêà
000000001
salonId
Ñòðîêà
000000003
dateTime
Ñòðîêà
20210624115500
pathTime
×èñëî
20
duration
×èñëî
15
Ïàðàìåòðû îòâåòà, åñëè ìåñòî ñâîáîäíî
Ïîëå
Òèï
Ïðèìåð
status
×èñëî
400
Ïàðàìåòðû îòâåòà, åñëè âîçíèêëà îøèáêà
Ïîëå
Òèï
Ïðèìåð
status
×èñëî
404
error
Ñòðîêà
400
Òàáëèöà 24
Òàáëèöà 25
53
Ïàðàìåòðû îòâåòà, åñëè ìåñòî çàíÿòî
Òàáëèöà 26
Ïîëå
Òèï
Ïðèìåð
status
×èñëî
400
salons
Ìàññèâ îáúåêòîâ
[]
id
Ñòðîêà
000000005
name
Ñòðîêà
Îòåö è ñûí
address
Ñòðîêà
óë. Ïàðòèçàíñêàÿ, 49
coords
Ñòðîêà
104,522,52,556565
workTime
Ñòðîêà
09:00-21:00
masters
Ìàññèâ îáúåêòîâ
[]
id
Ñòðîêà
000000005
name
Ñòðîêà
Îòåö è ñûí
avatar
Ñòðîêà BASE64
\9iojoisjje. . .
speedCoe
×èñëî
0,9
language
×èñëî
89
quality
×èñëî
95
rating
×èñëî
4,9
bookedTime
Ìàññèâ îáúåêòîâ
[]
dateTime
Ñòðîêà
24.06.2021 11:55
serviceTime
×èñëî
15
pathTime
×èñëî
20
54
Отзывы:
Авторизуйтесь, чтобы оставить отзыв