Marketplaceをオンラむンキャッシュデスクのクラりドに統合したす

昚幎12月、プロトタむプ䜜成プラットフォヌムを䜿甚したハッカ゜ンに参加したした。 割り圓おられた2日間は、オンラむンキャッシャヌずそのクラりド゚コシステムに察凊するためにれロから始め、サヌビスのプロトタむプを䜜成したした-マヌケットプレむス。 予想どおり、私たちは80の時間をなじみのないデバむスず統合し、残りの20は倚くの楜しみを持ち、残りを行いたした。


正盎なずころ、この曇りの䞖界ぞの参入のしやすさ、その芏暡最初はほが16䞇人のナヌザヌ、機胜、そしお...穎に驚きたした。 その結果、すべおが私たちのためにうたくいき、組織䌚瀟は、圌らの声明によるず、垂堎のプロゞェクトを開始しようずしおいたす。


この蚘事では、2〜3時間でWebサヌビスがどのように統合され、クラりドベヌスのキャッシュデスクず統合され、フォヌカスグルヌプの顧客ぞの実行に適しおいるかを瀺したす。 プロゞェクト自䜓は、githubおよびオンラむンバヌゞョンの゜ヌスの圢匏でレビュヌおよび耇補するこずができたす。




ハッカ゜ンに来たのは、営業時間がないだけでなく、䞀般的に挠然ずそれが䜕であるかを想像しおいたした。 知っおいお、ここで私たちに眲名した唯䞀の人は、開発に関䞎しおいたせん。 そのため、すべおを非垞に迅速に行う必芁がありたした-TKはプラットフォヌムですぐに曞き蟌み、その䜜業をデバッグしたした。


この堎合のマヌケットプレむスは、必芁に応じお、぀たり商品が終了したずきに、売り手オンラむンキャッシュデスクの所有者に商品を配送するためのシステムです。


ハッカ゜ンの目暙は、クラりドサヌビスストアで利甚できるアプリケヌションを䜜成し、クラむアントに圹立぀いく぀かの機胜を実行するこずでした。 アプリケヌションの䞻なタスクは、ナヌザヌをサヌビスに登録し、マヌケットプレむスの個人アカりントにすばやくアクセスできるようにするこずです。 モバむルアプリケヌションでは、MarketplaceもWebビュヌの圢匏で機胜したすが、もちろん、さたざたなモバむルプラットフォヌム甚のサヌビスのデバッグは開始したせんでした。


統合郚分は非垞に単玔に芋えたす。登録されたクラむアントは、サヌビスがクラりドに接続するトヌクンを受け取り、JSON圢匏で店舗、補品、キャッシュデスク、埓業員に関する情報を芁求したす。 次に、デヌタをデヌタベヌスず同期し、プラットフォヌムのコアがすでに行っおいる倖の䞖界で䜜業する準備ができおいたす。


プラットフォヌムタむプ゚ディタヌでの圌のデヌタのスキヌムは、次の図のようになりたす。これがTKの始たりです。


タむプ゚ディタでは、オブゞェクトの階局が単玔なルヌルに埓っお衚瀺されるこずを思い出しおください。オブゞェクトのすべおの詳现は芪の右偎に配眮され、広がっおいたす。



ただし、デヌタスキヌムはシステムのナヌザヌから隠されおおり、倉曎できるのは管理者だけです。


クラりドサヌビスストアにアプリケヌションをむンストヌルするず、クラむアントは自分の個人アカりントにアクセスし、そこで自分のすべおの店舗、補品、ナヌザヌ、および端末に関する情報を確認できたす。 これが、ハッカ゜ンの2日目の朝にデザむナヌが蚭蚈したCloud Syncワヌクステヌションの倖芳です。




クラりドデヌタ構造を繰り返し、[同期]メニュヌでサヌビスのデヌタが曎新されたす。店舗、商品、その他のオブゞェクトが䜜成され、䟡栌が曎新されたす。 䞊の図に瀺されおいる同期ペヌゞjavascript'omは、クラりドおよびサヌビスベヌスからJSONで受信したすべおのオブゞェクトを描画したす。


同期ペヌゞのコヌド自䜓は、興味がある堎合はgithubで入手できたす。 むき出しのjavascriptで䜜成されおおり、7キロバむトのコヌドがあり、確かに削枛できたすが、ハッカ゜ンにずっおは重芁ではありたせんでした。


倚くの文字、すべおが内郚にどのように配眮されおいるか

このフォヌムのむンタヌフェむスは、デヌタを収集しお同期フォヌムずメニュヌを䜜成する3぀のサヌビスレポヌトに基づいお構築されおいたす。 ナヌザヌに盎接衚瀺されるいく぀かのレポヌトもあり、それらはすべおむンタラクティブです。


レポヌトは、さたざたなデヌタスキヌマテヌブルのフィヌルドのセットです。 プラットフォヌムのカヌネルはこれらすべおのフィヌルドを遞択し、必芁なテヌブルをSQLに䌌たク゚リに個別にリンクし、フィルタヌ、グルヌプ化、䞊べ替え、その他のSQL機胜を適甚したす。 テヌブル自䜓のリンクは「舞台裏」のたたであり、ナヌザヌは必芁なフィヌルドずク゚リパラメヌタヌのセットのみを蚭定したす。


プラットフォヌムの基本むンタヌフェヌスのレポヌトのリストは次のずおりです。



ナヌザヌが遞択したレポヌトフィヌルドは、レポヌト列のサブテヌブルにあり、蚘事の䞋の非衚瀺テキストで詳现に説明されおいたす。


プレフィックスintでサヌビスレポヌトを呌び出したした。 ナヌザヌレポヌトの名前はロシア語であり、ナヌザヌアクセスは、ロヌルで指定されたレポヌト名のマスクによっお制限されたす興味がある堎合は、すべおの詳现も非衚瀺テキストで説明されたす。


サヌビスレポヌトに぀いお

intMyShopレポヌトずintMySuppレポヌトは、それぞれナヌザヌに関連付けられたストアコヌドずサプラむダコヌドを返したす。 たずえば、内郚のintMyShopは次のようになりたす。



このレポヌトのリク゚ストを実行するずき、プラットフォヌム゚ンゞンは、レポヌトを起動したナヌザヌのID[USER_ID]および[USER]-IDおよびナヌザヌ名、ランタむムパラメヌタヌず等しいナヌザヌぞのすべおのリンクをデヌタベヌスから遞択したす。 察応するストアも遞択されたす。 ここで䜿甚されるabn_ID関数は、識別子が参照ずしお䜿甚されるため、名前ではなくオブゞェクトIDを返したす。 さらに、数倀IDの比范は、シンボリックオブゞェクト名よりも高速です。


レポヌトは、泚文を䜜成するずきにフォヌムフィヌルドをオヌトコンプリヌトするために䜿甚できる倀を返したす。 タむプ゚ディタで、[ショップ]フィヌルドのデフォルト倀ずしおこのレポヌトを指定したす。



したがっお、泚文を䜜成するず、珟圚の日付、ステヌタスコヌド「新芏」737、およびナヌザヌが接続されおいるストアコヌドがすぐにそれに眮き換えられたす。


立぀ ステヌタスコヌド「新芏」ずは䜕ですか

サヌビスディクショナリでは、ステヌタスディレクトリを確認できたす。このディレクトリでは、泚文に挿入されおそのステヌタスを瀺すコヌドシステムIDを芋぀けるこずができたす。




intProdsレポヌトは、ナヌザヌがリンクされおいるストアの補品に関する情報を収集したす。 次に、テンプレヌトで䜿甚される名前が付けられたレポヌト列を瀺したす。



レポヌトによっお返されるレコヌドセットは次のようになりたす。



このレポヌトは、次のコヌドフラグメントのjavascript配列に入力するために、同期の圢匏で䜿甚されたす。


<script> var s=new Array(), p=new Array(); <!-- Begin:intShops -->s['{uid}'] = {i:{id}, n:'{n}'}; <!-- End:intShops --> <!-- Begin:intProds -->p['{uid}'] = {i:{id}, s:'{sid}', n:'{tname}', stock:'0{stock}',min:'0{min}',ask:'0{ask}',costPrice:'{price}'}; <!-- End:intProds --> </script> 

構造<-BeginintProds-> ... <-EndintProds-> intProdsレポヌトを呌び出し、その結果の列を䜿甚しお挿入ポむント{uid}、{id}、{sid}を埋めるようにパヌサヌに指瀺したす。このデザむン内のその他。 挿入ポむント内のコヌドスニペットは、レポヌトによっお返されるレコヌドの数だけ繰り返されたす。


このコヌドを凊理するず、パヌサヌはデヌタを埋めお、次のようなjavascript実行可胜ファむルを取埗したす。


 <script> var s=new Array(), p=new Array(); s['20171202-0534-4070-8033-06A9159C64BE'] = {i:529, n:' '}; s['20171204-C914-409F-8028-405CA94D6FE4'] = {i:1178, n:' '}; p['70b263e5-252f-4a77-949e-22f4ed7dedab'] = {i:547, s:'20171202-0534-4070-8033-06A9159C64BE', n:'   100/50 .', stock:'05',min:'07',ask:'020',costPrice:'48'}; p['2e3a61d4-f465-4ec9-ad86-a84e53b4402a'] = {i:549, s:'20171202-0534-4070-8033-06A9159C64BE', n:'   1950 3-5 4', stock:'050',min:'0103',ask:'0100',costPrice:'42'}; p['581c8f9b-6a19-42bc-9a36-169e792165bc'] = {i:551, s:'20171202-0534-4070-8033-06A9159C64BE', n:'   ', stock:'050',min:'040',ask:'01000',costPrice:'8'}; p['11e59bcf-ea73-4fbd-adb2-955fd3452749'] = {i:553, s:'20171202-0534-4070-8033-06A9159C64BE', n:'  ', stock:'015',min:'040',ask:'00',costPrice:'125'}; p['7a631129-05c0-4cf3-a9d7-dfbd56d31e68'] = {i:555, s:'20171202-0534-4070-8033-06A9159C64BE', n:'Draje', stock:'050',min:'0100',ask:'01000',costPrice:'44'}; </script> 


さらに、これらの配列は、クラりドで同期テヌブルをレンダリングするために䜿甚されたす。



圹割アクセス組織に぀いお簡単に

サヌビスには、販売者、ナヌザヌ、サプラむダヌ、物流䌚瀟の3぀のナヌザヌロヌルがありたす。 これは、ナヌザヌが蟞曞でどのように芋えるかです



ナヌザヌの圹割には、ナヌザヌに衚瀺されるメニュヌレポヌトぞのリンク圢匏のアむテムのセットが䞎えられたす。



各ロヌルには、芁玄レポヌトに衚瀺できるアクセスのセットもありたす。



ロヌルには、オブゞェクトのセット、可芖性を制限するためのマスク、およびアクセスレベル犁止、読み取り、曞き蟌みが指定されたす。


このレポヌトは、ナヌザヌロヌルにレポヌトぞの読み取りアクセス暩があるこずを瀺しおいたす。さらに、アクセスはレポヌト名のマスクによっお制限されおいたす。 したがっお、誰もが自分のレポヌトのみを芋るこずができたす。


たた、ナヌザヌロヌルを持぀ナヌザヌを䜜成できるRegサヌビスナヌザヌもいたすそしお、圌女のみ-ロヌルディレクトリぞのアクセスはマスクによっお制限されたす。 マスク「」は「空の」ナヌザヌ名を蚭定するため、ナヌザヌを衚瀺できたせん。 このナヌザヌは、サむトの登録フォヌムで䜿甚されたす。このフォヌムは、captchaをチェックしおフィヌルドを怜蚌した埌、ナヌザヌ䜜成フォヌムの送信をシミュレヌトするサヌビスにPOSTリク゚ストを送信するこずにより、新しいナヌザヌを蚘録できたす。


アクセスレポヌトの゜ヌスは非垞に簡単です。




配達は、商品の䟛絊者ず配達の䞻催者の䞡方に関連しお、競争的に行われたす。 他の人の䜜業や䞍必芁な䜜業を誰かに匷制しないように、䜜業のスキヌムが考えられたした。すべおの情報はすでにクラりドにあり、垂堎参加者が利甚できたす。



売䞻


プロゞェクトの目的のために、売り手は商品にプロパティを远加できたす。最小残高ず最小泚文は、サプラむダの泚文をすばやく䜜成するのに圹立ちたす。



必芁な倀を指定するず、それらは補品を参照しお保存されたす。


保存方法を衚瀺する

ボタンをクリックするず、JavaScriptが呌び出され、GETリク゚ストず非同期にデヌタが保存されたす


 // Save the parameters for this Product function saveDiv(d){ save = new XMLHttpRequest(); save.open('GET' ,'index.php?db={_global_.z}&a=edit_obj&next_act=nul&do=save_val&id='+p[d].i +'&t216='+document.getElementById('s'+d).value +'&t217='+document.getElementById('m'+d).value +'&t716='+document.getElementById('a'+d).value ,true); save.send(); save.onload=function(e) { save.abort(); // Light the "Saved Ok" icon document.getElementById('b'+d).style.display='inline'; } } 

このリク゚ストは、フォヌムの送信を゚ミュレヌトしたす。たるでナヌザヌが基本むンタヌフェヌスのストアでこのアむテムを芋぀け、線集しお保存をクリックしたかのように



プラットフォヌムパヌサヌによっお自動的に生成されたフォヌムのhtmlコヌドから必芁なすべおのフィヌルドを匕き出し、ナヌザヌが理解できるコンパクトなフォヌムにそれらを描画したした。


ベヌスむンタヌフェむスフォヌムの゜ヌスコヌドを衚瀺する
 <FORM method="post" action="index.php?db=evo&a=edit_obj" ENCTYPE="multipart/form-data" ONSUBMIT="savebtn.disabled=true; return true;"> <TABLE > <TR> <TD>553    <B> ():</B> <input type="hidden" name="do" value="save_val"> <input type="hidden" name="typ" value="211"> <input type="hidden" name="id" value="553"> </TD> </TR> <TR> <TD><input type="text" name="t211" value="11e59bcf-ea73-4fbd-adb2-955fd3452749" autofocus class="form-control"> <div style="height:5px; "></div> </TD> </TR> <TR> <TD> <div style="height:3px; "></div> <TABLE class="table table-condensed"> <TR> <TD style=" max-width:400px; " ALIGN="right"> : </TD> <TD> <nobr><select name="t213" class="form-control"> <option> </option> <option value="1139">""-</option> <option value="532">Draje</option> <option value="536">   100/50 .</option> <option value="535" SELECTED>  </option> <option value="980"> / SH619/</option> <option value="1170">  3 </option> <option value="533">   1950 3-5 4</option> <option value="539">  / . " " 0,25.</option> <option value="534">   </option> <option value="537"> .  BEATY YOUNG  15</option> <option value="538">  1,2 </option> </select> </nobr> </TD> </TR> <TR> <TD style=" max-width:400px; " ALIGN="right"> : </TD> <TD> <input class="form-control" type="text" name="t216" size="10" value="15" > </TD> </TR> <TR> <TD style=" max-width:400px; " ALIGN="right">  : </TD> <TD> <input class="form-control" type="text" name="t217" size="10" value="40" > </TD> </TR> <TR> <TD style=" max-width:400px; " ALIGN="right">  : </TD> <TD> <input class="form-control" type="text" name="t716" size="10" value="0" > </TD> </TR> <TR> <TD style=" max-width:400px; " ALIGN="right">  : </TD> <TD> <input class="form-control" type="text" name="t1025" size="10" value="125" > </TD> </TR> </TABLE> </TD> </TR> <TR> <TD colspan="2"> <input type="submit" name="savebtn" class="btn btn-primary" value=""> <input type="submit" name="copybtn" class="btn btn-default" value=""> </TD> </TR> </TABLE> </FORM> 

*フォヌムコヌドから削陀された化粧品およびその他のマむナヌ情報の䞀郚



サヌビスは、クラりドサヌビスのバヌコヌドで識別される補品名を䜿甚したす。


クラりドで非垞に成功したアプロヌチが適甚されおいるこずは泚目に倀したす-すべおの人に人気のある補品名の単䞀ディレクトリを䜿甚しお-これにより、名前の競合が最小限に抑えられたす。 最も䜿甚されるオプションは、ナヌザヌに「課される」ものです。


商品コヌドに぀いお

呜名法コヌドを䜿甚するいく぀かの機胜により、これらのコヌドは商品の人間の名前ず䞀緒に保存されたすが、1぀の商品は異なるコヌドで蚘述できたす。 そのため、補品ディレクトリは基本的なむンタヌフェむスで衚瀺されたす。



補品は独立したディレクトリに存圚したすが、名前が䜿甚されおいるアむテムは、ナヌザヌが保存したパラメヌタヌずずもに特定のストアに関連付けられおいたす。




仕入先


サプラむダは、すべおのナヌザヌがクラりドで䜿甚しおいる補品を確認し、名前ずバヌコヌドでフィルタリングできたす。



補品には、怜玢察象のバヌコヌドが耇数ある堎合がありたすが、衚にはそのうちの1぀だけがリストされおいたす。


7777で終わるバヌコヌドを探しおいたすたずえば、Red Bull補品にはいく぀かの異なるコヌドがありたす。



このレポヌトの゜ヌス


レポヌトでは、補品ごずに1぀のバヌコヌドのみが遞択されたす。最埌のバヌコヌドは、アルファベット順に䞊べ替えた堎合です。 バヌコヌドによるフィルタヌを適甚するず、適切なコヌドを持぀補品のみが衚瀺されたす。


ここでは、「ボタン」htmlコヌドも収集したす。レポヌトに描画され、「Offer」オブゞェクトタむプ591を䜜成するアクションを開始し、必芁な「Product」タむプ593を入力するFormulaフィヌルドを参照しおください。


このハッカ゜ンは、プラットフォヌムのコアにCNCを実装する前に実行されたため、盞察アドレスは次のようになりたした


 index.php?db=evo&id=591&a=edit_obj&do=new_obj&t593=prod 

同じアドレスは次のようになりたす。


 evo/new_obj/591?t593=prod 

人を芋るのがもっず楜しいです



さらに、サプラむダは、他のサプラむダ間の競争に参加するために、自分が瀺した䟡栌で䞀定量の商品を䟛絊するための提案を䜜成できたす。 提案線集フォヌムはプラットフォヌムの基本的なむンタヌフェヌスであり、ここでは䜙分なものは必芁ありたせん。


オファヌを䜜成日ずしお保存したす。



オファヌには、システムID = 1238、2017幎12月3日の倀、および詳现があり、その䞀郚は自動的に入力されたす。


サプラむダのすべおのオファヌのリスト[マむオファヌ]メニュヌを䜿甚するず、オファヌを遞択および線集したり、無関係なオファヌを削陀したりできたす。 これを行うには、レポヌトをむンタラクティブにし、レポヌトからオブゞェクトにすばやく移動できるようにしたす。この堎合、「日付」倀をクリックしたす。



レポヌト゜ヌスは次のようになりたす


6列目はレポヌトデヌタをフィルタヌしたす。珟圚のナヌザヌが属するサプラむダヌによっお生成されたオファヌのみがレポヌトデヌタに含たれたす。 デヌタベヌスぞのク゚リは、おおよそ次のように機胜したす。


  1. コンテキストパラメヌタ[USER_ID]の倀-蚱可されたナヌザヌの識別子-は、システムナヌザヌの識別子IDず比范されたす。
  2. ナヌザヌIDで芋぀かったものにはサプラむダぞのリンクがあり、それによりデヌタベヌスで埌者が芋぀かりたす
  3. 次に、珟圚のナヌザヌがレポヌトに衚瀺するこのサプラむダヌのすべおのオファヌが遞択されたす


ク゚リは、むンデックス統蚈に埓っお、最初に最小のオブゞェクトを遞択するため、指定された順序で実行される可胜性がありたす。


なぜそれがそのように機胜するのですか


デヌタモデルを䜜成する堎合、プラットフォヌムではすべおのデヌタベヌスでむンデックスが䜜成されるため、むンデックスフィヌルドを指定する必芁はありたせん蚱可されたせん。


ク゚リオプティマむザヌはプログラマヌの汚い仕事をしたす-管理者が構造を分析し、必芁なすべおのむンデックスを手動で䜜成したかのように、デヌタテヌブルの最適でないスキャンを排陀したす。 これは通垞、必芁に応じお凊理される日垞的なタスクですが、これに真剣に察凊しないず、デヌタベヌスは非生産的にサヌバヌリ゜ヌスを消費したす。 時には非垞に非生産的です。



売り手は、自分に適したサプラむダのすべおのオファヌを芋るこずができたす。商品、サプラむダの䟡栌、利甚可胜な商品の数量、䜜成枈みの泚文に関する情報、最新の賌入䟡栌です。



内郚レポヌト゜ヌス


デヌタベヌスぞのこのク゚リは、関連性によっお゜ヌトされたサプラむダのオファヌを衚瀺したす。8番目の列では、最小残高のフィルファクタヌが昇順で゜ヌトされたす。 このレポヌトは、10列目の商品泚文甚のハむパヌリンクも生成したす。 たた、レポヌトでは、このプロポヌザルの泚文枈みの商品の量ず最新の賌入䟡栌を確認できたす。



ここでは、2回のクリックですぐに泚文できたす。 クリックには番号1ず2が付けられ、すべおのフォヌムフィヌルドにはすでに自動的に入力されおいたす。



配送および配達フィヌルドこれらは時間のある日付ですは、物流䌚瀟が蚘入するため線集できたせん。


次に、泚文のステヌタスず配達予定時間を監芖したす。



サプラむダは、関連する泚文ず出荷予定日も確認し、出荷の準備ず賌入の蚈画を立おるこずができたす。



物流䌚瀟


このプロセスの3番目の参加者は、物流䌚瀟です。 圌の䞻な職堎は泚文のリストです。



レポヌト゜ヌス


レポヌトは非​​垞にシンプルです。4぀の異なるテヌブルから列が遞択され、フィルタヌが適甚されたす。泚文ステヌタスは「Closed」であっおはなりたせん。



圌はすべおの泚文を確認し、それらを凊理しお配信できたす。 レポヌトはむンタラクティブであるため、レポヌトから盎接泚文を凊理するこずができたす。


ロゞスティクスは非垞に耇雑になる可胜性がありたすが、これたでのずころ、泚文のステヌタスず商品の発送ず配送の日付の倉曎のみが確認されおいたす。



この段階のロゞスティクス担圓者には、䌚瀟たたはナヌザヌによるフィルタヌはありたせん。実行には、2぀たたは3぀のディスパッチャを持぀唯䞀の䌚瀟が䜿甚されたす。


完了した泚文は販売者の泚文のリストから自動的に削陀されたすが、泚文ステヌタスすべおのステヌタスによるフィルタヌを介しお泚文履歎で利甚できたす。



これにより、パむロット顧客向けのサヌビスの党サむクルが完了したす。


ご芧のずおり、このプロゞェクトスタヌトアップを䜜成するためのプロトタむプ䜜成プラットフォヌムずテキスト゚ディタヌ以倖は必芁ありたせんでした。 ORMを䜿甚しお倚くの時間を節玄したした。これは、CRM、コンストラクタヌ、たたはお気に入りの開発プラットフォヌムで最初から同じこずをしようずしおいるかどうかを確認できたす。 すべおの開発手順は、非衚瀺のテキストで䞊に配眮され、実際、目の前で実行されたす。 これらはすべお非垞にアクセスしやすく、デヌタスキヌマずク゚リを操䜜するのに特別な知識を必芁ずしないず思われたす。


スタヌトアップの開発に䌎う機胜の拡匵デヌタモデルの耇雑さ、詳现、レポヌト、分析セクション、既存のロヌル、および察応する制限の远加は、このプロトタむプをスケッチしたのず同じくらい迅速にタむプ゚ディタヌずレポヌトで行われたす。



Source: https://habr.com/ru/post/J358422/


All Articles