refresh
This commit is contained in:
Binary file not shown.
@@ -1,718 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>General Architecture.md</title>
|
||||
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
|
||||
|
||||
<style>
|
||||
/* https://github.com/microsoft/vscode/blob/master/extensions/markdown-language-features/media/markdown.css */
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
body {
|
||||
font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif);
|
||||
font-size: var(--vscode-markdown-font-size, 14px);
|
||||
padding: 0 26px;
|
||||
line-height: var(--vscode-markdown-line-height, 22px);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
#code-csp-warning {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
color: white;
|
||||
margin: 16px;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
font-family: sans-serif;
|
||||
background-color:#444444;
|
||||
cursor: pointer;
|
||||
padding: 6px;
|
||||
box-shadow: 1px 1px 1px rgba(0,0,0,.25);
|
||||
}
|
||||
|
||||
#code-csp-warning:hover {
|
||||
text-decoration: none;
|
||||
background-color:#007acc;
|
||||
box-shadow: 2px 2px 2px rgba(0,0,0,.25);
|
||||
}
|
||||
|
||||
body.scrollBeyondLastLine {
|
||||
margin-bottom: calc(100vh - 22px);
|
||||
}
|
||||
|
||||
body.showEditorSelection .code-line {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
body.showEditorSelection .code-active-line:before,
|
||||
body.showEditorSelection .code-line:hover:before {
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -12px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body.showEditorSelection li.code-active-line:before,
|
||||
body.showEditorSelection li.code-line:hover:before {
|
||||
left: -30px;
|
||||
}
|
||||
|
||||
.vscode-light.showEditorSelection .code-active-line:before {
|
||||
border-left: 3px solid rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.vscode-light.showEditorSelection .code-line:hover:before {
|
||||
border-left: 3px solid rgba(0, 0, 0, 0.40);
|
||||
}
|
||||
|
||||
.vscode-light.showEditorSelection .code-line .code-line:hover:before {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.vscode-dark.showEditorSelection .code-active-line:before {
|
||||
border-left: 3px solid rgba(255, 255, 255, 0.4);
|
||||
}
|
||||
|
||||
.vscode-dark.showEditorSelection .code-line:hover:before {
|
||||
border-left: 3px solid rgba(255, 255, 255, 0.60);
|
||||
}
|
||||
|
||||
.vscode-dark.showEditorSelection .code-line .code-line:hover:before {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.vscode-high-contrast.showEditorSelection .code-active-line:before {
|
||||
border-left: 3px solid rgba(255, 160, 0, 0.7);
|
||||
}
|
||||
|
||||
.vscode-high-contrast.showEditorSelection .code-line:hover:before {
|
||||
border-left: 3px solid rgba(255, 160, 0, 1);
|
||||
}
|
||||
|
||||
.vscode-high-contrast.showEditorSelection .code-line .code-line:hover:before {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:focus,
|
||||
input:focus,
|
||||
select:focus,
|
||||
textarea:focus {
|
||||
outline: 1px solid -webkit-focus-ring-color;
|
||||
outline-offset: -1px;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: 0;
|
||||
height: 2px;
|
||||
border-bottom: 2px solid;
|
||||
}
|
||||
|
||||
h1 {
|
||||
padding-bottom: 0.3em;
|
||||
line-height: 1.2;
|
||||
border-bottom-width: 1px;
|
||||
border-bottom-style: solid;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table > thead > tr > th {
|
||||
text-align: left;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
|
||||
table > thead > tr > th,
|
||||
table > thead > tr > td,
|
||||
table > tbody > tr > th,
|
||||
table > tbody > tr > td {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
table > tbody > tr + tr > td {
|
||||
border-top: 1px solid;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 7px 0 5px;
|
||||
padding: 0 16px 0 10px;
|
||||
border-left-width: 5px;
|
||||
border-left-style: solid;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: Menlo, Monaco, Consolas, "Droid Sans Mono", "Courier New", monospace, "Droid Sans Fallback";
|
||||
font-size: 1em;
|
||||
line-height: 1.357em;
|
||||
}
|
||||
|
||||
body.wordWrap pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
pre:not(.hljs),
|
||||
pre.hljs code > div {
|
||||
padding: 16px;
|
||||
border-radius: 3px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
pre code {
|
||||
color: var(--vscode-editor-foreground);
|
||||
tab-size: 4;
|
||||
}
|
||||
|
||||
/** Theming */
|
||||
|
||||
.vscode-light pre {
|
||||
background-color: rgba(220, 220, 220, 0.4);
|
||||
}
|
||||
|
||||
.vscode-dark pre {
|
||||
background-color: rgba(10, 10, 10, 0.4);
|
||||
}
|
||||
|
||||
.vscode-high-contrast pre {
|
||||
background-color: rgb(0, 0, 0);
|
||||
}
|
||||
|
||||
.vscode-high-contrast h1 {
|
||||
border-color: rgb(0, 0, 0);
|
||||
}
|
||||
|
||||
.vscode-light table > thead > tr > th {
|
||||
border-color: rgba(0, 0, 0, 0.69);
|
||||
}
|
||||
|
||||
.vscode-dark table > thead > tr > th {
|
||||
border-color: rgba(255, 255, 255, 0.69);
|
||||
}
|
||||
|
||||
.vscode-light h1,
|
||||
.vscode-light hr,
|
||||
.vscode-light table > tbody > tr + tr > td {
|
||||
border-color: rgba(0, 0, 0, 0.18);
|
||||
}
|
||||
|
||||
.vscode-dark h1,
|
||||
.vscode-dark hr,
|
||||
.vscode-dark table > tbody > tr + tr > td {
|
||||
border-color: rgba(255, 255, 255, 0.18);
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<style>
|
||||
/* Tomorrow Theme */
|
||||
/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
|
||||
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
|
||||
|
||||
/* Tomorrow Comment */
|
||||
.hljs-comment,
|
||||
.hljs-quote {
|
||||
color: #8e908c;
|
||||
}
|
||||
|
||||
/* Tomorrow Red */
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-tag,
|
||||
.hljs-name,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class,
|
||||
.hljs-regexp,
|
||||
.hljs-deletion {
|
||||
color: #c82829;
|
||||
}
|
||||
|
||||
/* Tomorrow Orange */
|
||||
.hljs-number,
|
||||
.hljs-built_in,
|
||||
.hljs-builtin-name,
|
||||
.hljs-literal,
|
||||
.hljs-type,
|
||||
.hljs-params,
|
||||
.hljs-meta,
|
||||
.hljs-link {
|
||||
color: #f5871f;
|
||||
}
|
||||
|
||||
/* Tomorrow Yellow */
|
||||
.hljs-attribute {
|
||||
color: #eab700;
|
||||
}
|
||||
|
||||
/* Tomorrow Green */
|
||||
.hljs-string,
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-addition {
|
||||
color: #718c00;
|
||||
}
|
||||
|
||||
/* Tomorrow Blue */
|
||||
.hljs-title,
|
||||
.hljs-section {
|
||||
color: #4271ae;
|
||||
}
|
||||
|
||||
/* Tomorrow Purple */
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag {
|
||||
color: #8959a8;
|
||||
}
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
color: #4d4d4c;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
.hljs-emphasis {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.hljs-strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style>
|
||||
/*
|
||||
* Markdown PDF CSS
|
||||
*/
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif, "Meiryo";
|
||||
padding: 0 12px;
|
||||
}
|
||||
|
||||
pre {
|
||||
background-color: #f8f8f8;
|
||||
border: 1px solid #cccccc;
|
||||
border-radius: 3px;
|
||||
overflow-x: auto;
|
||||
white-space: pre-wrap;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
pre:not(.hljs) {
|
||||
padding: 23px;
|
||||
line-height: 19px;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
background: rgba(127, 127, 127, 0.1);
|
||||
border-color: rgba(0, 122, 204, 0.5);
|
||||
}
|
||||
|
||||
.emoji {
|
||||
height: 1.4em;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 14px;
|
||||
line-height: 19px;
|
||||
}
|
||||
|
||||
/* for inline code */
|
||||
:not(pre):not(.hljs) > code {
|
||||
color: #C9AE75; /* Change the old color so it seems less like an error */
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
/* Page Break : use <div class="page"/> to insert page break
|
||||
-------------------------------------------------------- */
|
||||
.page {
|
||||
page-break-after: always;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
mermaid.initialize({
|
||||
startOnLoad: true,
|
||||
theme: document.body.classList.contains('vscode-dark') || document.body.classList.contains('vscode-high-contrast')
|
||||
? 'dark'
|
||||
: 'default'
|
||||
});
|
||||
</script>
|
||||
<h1 id="1-webdoor-creator">1. WebDoor Creator</h1>
|
||||
<p></p>
|
||||
<p><strong>Table of Content</strong></p>
|
||||
<ul>
|
||||
<li><a href="#1-webdoor-creator">1. WebDoor Creator</a></li>
|
||||
<li><a href="#2-webdoor-creator-project">2. WebDoor Creator Project</a>
|
||||
<ul>
|
||||
<li><a href="#21-terminology">2.1. Terminology</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#3-overall-functional-schema">3. Overall Functional Schema</a>
|
||||
<ul>
|
||||
<li><a href="#31-a-public-webserver">3.1. (A) Public WebServer</a></li>
|
||||
<li><a href="#32-b1-internal-webdoor-server">3.2. (B.1) Internal WebDoor Server</a></li>
|
||||
<li><a href="#33-b2-redis-server">3.3. (B.2) Redis Server</a></li>
|
||||
<li><a href="#34-b3-main-db">3.4. (B.3) Main DB</a></li>
|
||||
<li><a href="#35-b4-egwdoor-processor">3.5. (B.4) EgwDoor Processor</a></li>
|
||||
<li><a href="#36-egwprod-multiax-machine">3.6. EgwProd (Multiax Machine)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#4-hw-specifications">4. Hw specifications</a></li>
|
||||
<li><a href="#5-expected-use-cases">5. Expected Use cases</a>
|
||||
<ul>
|
||||
<li><a href="#51-user-registration--login">5.1. User registration / login</a></li>
|
||||
<li><a href="#52-user-role-assignments">5.2. User Role assignments</a></li>
|
||||
<li><a href="#53-projects-and-orders">5.3. Projects and Orders</a></li>
|
||||
<li><a href="#54-order-creation">5.4. Order creation</a></li>
|
||||
<li><a href="#55-base-library">5.5. Base Library</a></li>
|
||||
<li><a href="#56-door-creation">5.6. Door creation</a></li>
|
||||
<li><a href="#57-timecost-calculation">5.7. Time/Cost calculation</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#6-document-revision">6. Document Revision</a></li>
|
||||
</ul>
|
||||
<div style="page-break-after: always; visibility: hidden"></div>
|
||||
<h1 id="2-webdoor-creator-project">2. WebDoor Creator Project</h1>
|
||||
<p>WebDoorCreator is the web incarnation and evolution of Egalware's DoorCreator© software.</p>
|
||||
<p>In particular those are expectec use case</p>
|
||||
<ul>
|
||||
<li>multi user setup</li>
|
||||
<li>concurrent access</li>
|
||||
<li>3D web based output of designed door</li>
|
||||
<li>DDF format production (for later automatic CNC generation at machine facility)</li>
|
||||
</ul>
|
||||
<p>This document aims to represent detailed information about system actual internals and functional implementation and is passible of revision with the actual software production phases (requirements, general develop, alpha testing, beta testing, staging and go-live).</p>
|
||||
<div style="page-break-after: always; visibility: hidden"></div>
|
||||
<h2 id="21-terminology">2.1. Terminology</h2>
|
||||
<p>Here a general introduction to terminology used for each component of the project, both for component and items to better understand subsequents details.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Term</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>(A) Public WebServer</td>
|
||||
<td>Reverse proxy, manages web access from final user decoupling access to local infrastructure</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(B.1) Internal WebDoor Server</td>
|
||||
<td>Actual main web server application (C# / .Net)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(B.2) Redis Server</td>
|
||||
<td>High speed cache & messaging server for inter-application comunication</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(B.3) Main DB</td>
|
||||
<td>Main Database for data storage, Microsoft SqlServer</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(B.4) EgwDoor Processor</td>
|
||||
<td>EgtCam5 based application for processing actual CAD/CAM/3D specific tasks</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(C) EgwProd (Multiax Machine)</td>
|
||||
<td>Main Workstation for specific door-data processing</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>WF_OrderMan</td>
|
||||
<td>WorkFlow for actual order managemend: to be better defined</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ERP</td>
|
||||
<td>WorkFlow needs to be defined</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>EgwProd</td>
|
||||
<td>Local APplication onc Multiax Machine for production execution</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ProdCode</td>
|
||||
<td>Generic unique code (with barcode/QRCode/DataMatrix) to be used from remote Machine to scan and execute automatic production</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>DDF</td>
|
||||
<td><strong>Door Definition Format</strong>, the base data-format to describe Doors (measures, attributes, hardware, ...) in order to generate CAD/CAM/3D/ISO program and each format requested for the solution</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Project</td>
|
||||
<td>Each Customer will be able to create project, consisting of 1+ doors defined in each project; each project will be managed as a whole (from approval to production/billing phase)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div style="page-break-after: always; visibility: hidden"></div>
|
||||
<h1 id="3-overall-functional-schema">3. Overall Functional Schema</h1>
|
||||
<p>This schema is the general representation of the solution, better defined in subsequenct chapters.</p>
|
||||
<p><img src="file:///Users/samuele/Documents/GitProjects/WebDoorCreator/Docs/images/OverallFunctionalSchema.svg" alt="WebDoorCreator - Functional Schema" title="WebDoorCreator"></p>
|
||||
<h2 id="31-a-public-webserver">3.1. (A) Public WebServer</h2>
|
||||
<p>The public webserver will act as a reverse proxy (expected to use nginx) and load balancer for actual user access. It will decouple internal system to the external user web access optimizing static contenct caching & security. Setup of a standard single WAN Nginx linux virtual machine is included.</p>
|
||||
<img src="http://www.plantuml.com/plantuml/svg/XP4z2y8m48Rt_8hRNEnWTIfIwWUe82A87o0ECJqr41Eud0x-UjjOGOUsWOJaVHx8NP9vbiIFkn46BmpiWFJrnf1hGiNQMT61kIFzSfQb0QCj-WIYAEt2C8h2aXRA3ecr-X42BsSgMBD1sEDvwXnD22KxIc3zE1kjodY3z4GIKXKvVCRMutShVJZrwlXNYDk4Vfim4E6Yq18SLxF5wd1AoW9Xf1Hw7t3SZFlDU52FGrJXwgrWOJttJf30qiaSnjBKMl6VbQ7DYozz0m00" alt="PERT">
|
||||
<p>This way there will be secured access to internal IT infrastructure decoupled from external internet.</p>
|
||||
<div style="page-break-after: always; visibility: hidden"></div>
|
||||
<h2 id="32-b1-internal-webdoor-server">3.2. (B.1) Internal WebDoor Server</h2>
|
||||
<p>The internal WebDoor Server is a Blazor C# application, made to be hosted in one of this alternative scenario, to be discussed with ABH IT people:</p>
|
||||
<ul>
|
||||
<li>IIS managed windows websites for c# .net (standard windows scenario)</li>
|
||||
<li>Linux virtual machine with dotNet framework kestrel server hosted as a services (normally the most performing scenario)</li>
|
||||
<li>Docker dotNet instances (at the moment is the deploy we used in less cases, but for this specific task might better fit)</li>
|
||||
</ul>
|
||||
<p>We expect to deliver more than 1 instance of this server, bot for redundancy and scalability (to give final user best performances we expect to have many instance, each managing many final-user session)</p>
|
||||
<p>Final note: while the load balancer can fit also a mixed setup (IIS, Linux, docker), this is normally less user-friendly and slow in updating.</p>
|
||||
<p>Each single instance will run as follow:</p>
|
||||
<img src="http://www.plantuml.com/plantuml/svg/RP11QyCm38Nl-XMYbrsM1TgTmWXDay9oA8m5jaFfmNMqpE3OJ5OssA-VccomGmMsmU-pthEsIGpBD7hmz2Oe4TaDxuAzOxBYOe0RV8pilcCGuz6xGAd0B2jlyI7BvgrKv8LOdFq7pFfbbI1EFE4hdPiOkMOo4hd0DWXnq1U_0dR4dyHWe_UBSyBdVTDsQ1BkxjRG6p5damYr3iQ5PeTpLPtA6_YOQABb1bVxuMlk-SJHhXRY7W2EUfpco7Zyiss3JY1OEXLOLqrULuTyqs1jlBtWwmj-ZSP20wUaCVCwZYDS8HOVpQQj6msFdNxS30ImfT3ho7y0" alt="PERT">
|
||||
<div style="page-break-after: always; visibility: hidden"></div>
|
||||
<h2 id="33-b2-redis-server">3.3. (B.2) Redis Server</h2>
|
||||
<p>The REDIS server vill act as a cache / high speed data layer for example for managing multiple session with the cluster of WebDoor Instances and, at the same time, to act as a inter-process channel manager to permit data exchange between each solution component.</p>
|
||||
<p>It is a RAM based server and must be kept secure in the "green zone" of the customer IT datacenter.</p>
|
||||
<img src="http://www.plantuml.com/plantuml/svg/JP31IWD138RlUOhGIo-kWlIqo5BT5hetwOeUIW_JQMm7PXFDP1LyUcUd5Wmabtn__YJBP4vj7294UZSqGGsdi-4nA7aBmZ37ZMZu4JONCGQcL6DLDJVuK5MbD1bv9RNW_m6bFsK35YmIlj5X9QAjaZFH6ZisKiwAlmRsf5-au2N6YtF2xNhLzUWIFjtUm-T88-4bPklJTn4zg_WPFlQPM030BeFxiXFkhdCxpYUofptMsIEbFFckbM6OuCKLddGrRb-mFJjcYfZ6G_8QFieY04lYOtxIBm00" alt="PERT">
|
||||
<h2 id="34-b3-main-db">3.4. (B.3) Main DB</h2>
|
||||
<p>The Main DB server will be, as a first choice (and if not otherwise requested by customer) a Microsoft SqlServer Express instance. Can be swapped for a MariaDB (MySQL) solution, in particular in case ofcluster DB requirements (high availability and if concurrent data access requirements exceed SqlServer capacity), but at the moment we expect MS SqlServer is the best fit.</p>
|
||||
<div style="page-break-after: always; visibility: hidden"></div>
|
||||
<h2 id="35-b4-egwdoor-processor">3.5. (B.4) EgwDoor Processor</h2>
|
||||
<p>This component, based on <strong>EgtCAM5</strong> Kernel and libraries, is the main core of CAD/CAM/3D task execution.</p>
|
||||
<p>This will be linked (with bot REST webservices + REDIS channels/cache) to the (B.1) WebDoor Server.</p>
|
||||
<p>In particulare the WebDoor will send DDF online-generated file (derived from user -input via web-interface) to the EgwDoor Processor. This processor will generate in (near) realtime various output format upon request (base geomtry, 3D web based artifacts, simulated ISO path for CAM calculation, ...).</p>
|
||||
<p>The produced 3D (javascript based) web artifacts will be presented to the user in order to evaluate the finale expected product during web-based door definition wizard.</p>
|
||||
<div style="page-break-after: always; visibility: hidden"></div>
|
||||
<h2 id="36-egwprod-multiax-machine">3.6. EgwProd (Multiax Machine)</h2>
|
||||
<p>For each Multiax machine put in place, there will be a local copy of the standard EgwProd software (enabled to read barcode/qrcode/datamatrix data) and a copy of DoorCreator software (enabling realtime part program generation based on DDF final-product specification with respect on current tools and unique machine setup).</p>
|
||||
<p>The software, after recognizing the unique code for each signle door, will be able to call (B.1) WebDoor Server to receive DDF file corresponding to each unique door. A backup solution (eg taking into account the case of network connectivity problems/disconnection) can be put in place in the form of distribuited/replicated "approved DDF file storage" in order to replicate on each production facility the set of near term part production (to be defined in detail, for example next 2-7 days of scheduled production).</p>
|
||||
<div style="page-break-after: always; visibility: hidden"></div>
|
||||
<h1 id="4-hw-specifications">4. Hw specifications</h1>
|
||||
<p>Hw requirements must be considered a work-in process based on general recomendation. Those are reserved for specific IT infrastructure for the current project and that can (and must) be setup in order to get best result</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Component</th>
|
||||
<th>Virt</th>
|
||||
<th>Num</th>
|
||||
<th>Critical resource</th>
|
||||
<th>Hw requirements</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>(A) Public WebServer</td>
|
||||
<td>Y</td>
|
||||
<td>1+</td>
|
||||
<td>Bandwith, Latency</td>
|
||||
<td>Linux Nginx, 2vCPU/2GB RAM each, 1GBit Fiber + static IP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(B.1) Internal WebDoor Server</td>
|
||||
<td>Y</td>
|
||||
<td>1+</td>
|
||||
<td>Processing (RAM/CPU)</td>
|
||||
<td>4+ vCore / 4GB RAM, Windows/Linux/Docker (to be tested)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(B.2) Redis Server</td>
|
||||
<td>Y</td>
|
||||
<td>1</td>
|
||||
<td>RAM</td>
|
||||
<td>Linux redis server, 4 vCpu, 4GB Ram</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(B.3) Main DB</td>
|
||||
<td>Y</td>
|
||||
<td>1</td>
|
||||
<td>Storage</td>
|
||||
<td>Windows server + MsSqlServer, high speed storage (SSD min, better NVME), 4 vCPU (min), 8GB RAM (min)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(B.4) EgwDoor Processor</td>
|
||||
<td>N</td>
|
||||
<td>1</td>
|
||||
<td>Processing (CPU/GPU/RAM)</td>
|
||||
<td>Min 16Gb RAM, min 8 CPU core, high speed storage (SSD/NVME) + 8Gb videocard (min NVidia 3060 class expected)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>special notes:</p>
|
||||
<ul>
|
||||
<li>Virt: Y = can be a virtual server, N = phisical asset</li>
|
||||
<li>Num = number of item (1 single node, 1+ cluster for horizontal scaling)</li>
|
||||
<li>(B.3) DB: conditioned to final speed benchmarking an alternative option /MariaDB cluster) will be evaluated if bottleneck consideration might concern, HW will be subsequently adapted</li>
|
||||
</ul>
|
||||
<div style="page-break-after: always; visibility: hidden"></div>
|
||||
<h1 id="5-expected-use-cases">5. Expected Use cases</h1>
|
||||
<p>Here the brief description of use case and expected system behaviour.</p>
|
||||
<h2 id="51-user-registration--login">5.1. User registration / login</h2>
|
||||
<p>User registration process will be based on email: each user must have a unique email (eg: used for password retrieval and user 2FA confirmation) and from email / tokenized-link exchange process the process will be carried out.</p>
|
||||
<p>Each user must be registered (self registered or initially mass imported) before being given role on the platform.</p>
|
||||
<h2 id="52-user-role-assignments">5.2. User Role assignments</h2>
|
||||
<p>The platform will be managed throught RBAC policy (Role-Based Access Control). So each user will be granted 1+ roles. Each role will permit single operation or multiple operation on the system.</p>
|
||||
<p>The role levels will be (at minimun) the following:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Role</th>
|
||||
<th>Level</th>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>User</td>
|
||||
<td>0</td>
|
||||
<td>-</td>
|
||||
<td>Standar user, only access on platform</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Customer</td>
|
||||
<td>1</td>
|
||||
<td>Customer Code</td>
|
||||
<td>Group used to represent a final customer, representing the company = Door destination</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CustomerUser</td>
|
||||
<td>2</td>
|
||||
<td>Customer Code + UserId</td>
|
||||
<td>User associated with a Customer, can see/manage all customer orders</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CustomerAdmin</td>
|
||||
<td>2</td>
|
||||
<td>Customer Code + UserId</td>
|
||||
<td>SPECIAL User with highest privileges for Customer, can add users to group and approve orders</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>AbhOrderManager</td>
|
||||
<td>3</td>
|
||||
<td>UserId</td>
|
||||
<td>SPECIAL User, from ABH, that is responsible for final customer's order acceptance</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>AbhAdmin</td>
|
||||
<td>4</td>
|
||||
<td>UserId</td>
|
||||
<td>SPECIAL User, from ABH, that is responsible for ABH user management</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SuperAdmin</td>
|
||||
<td>5</td>
|
||||
<td>UserId</td>
|
||||
<td>General platform superuser for maintenance/setup task</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="53-projects-and-orders">5.3. Projects and Orders</h2>
|
||||
<p>As already stated</p>
|
||||
<blockquote>
|
||||
<p>Each Customer will be able to create project, consisting of 1+ doors defined in each project; each project will be managed as a whole (from approval to production/billing phase)</p>
|
||||
</blockquote>
|
||||
<p>So the object hearchy will be</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Order ACB.02</p>
|
||||
<ul>
|
||||
<li>Door code 123 (x10 copy)</li>
|
||||
<li>Door code 345 (x3 copy)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Order DEF.01</p>
|
||||
<ul>
|
||||
<li>Door code 263 (x6 copy)</li>
|
||||
<li>Door code 785 (x5 copy)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Each item can be in several states, for example:</p>
|
||||
<ul>
|
||||
<li>Draft</li>
|
||||
<li>Requested (customer)</li>
|
||||
<li>Estimated price/time (ABH)</li>
|
||||
<li>Purchased (customer) | <strong>freezed</strong> / stop modification from customer</li>
|
||||
<li>Confirmed (ABH)</li>
|
||||
<li>Planned (ABH) | <strong>freezed</strong> / stop modification from ABH</li>
|
||||
<li>InProgress (ABH)</li>
|
||||
<li>Delivered / Billed / Closed</li>
|
||||
</ul>
|
||||
<p>Normal workflow will be in forward direction only, returning to previous state will require escalation/approval (to be better defined).</p>
|
||||
<h2 id="54-order-creation">5.4. Order creation</h2>
|
||||
<p>Each <strong>Customer User</strong> will be able to create a <strong>project</strong> or use an already available one in a "pre purchase" state.</p>
|
||||
<p>When the order is completed, customer will sent to ABH for Estimation confirmation (because automatic costing can be done but final check for cost and expected delivery time is required to be user-driven).</p>
|
||||
<p>After Estimation stage, purchase must be carried on from customer (with standard and already in-place company workflow of order management).</p>
|
||||
<p>Resource allocation will be reported to ERP (materials + machine time, to be defined)</p>
|
||||
<p>Finally resource planning and final extimation for delivery will be sent back to customers.</p>
|
||||
<p>Production will be driven interally by ABH with support of the planned scheduling and actual machine task will be reported to the central system to record order fulfill and trigger logistics task on completion.</p>
|
||||
<h2 id="55-base-library">5.5. Base Library</h2>
|
||||
<p>Like for actual DoorCreator software, our automated part-program generation process requires definition of hardware in form of drawing and parameters in the form of a user-generated items library the system will consider in automatic program generation.</p>
|
||||
<p>The process will be carried out with standard DoorCreator software instances already available to the customer.</p>
|
||||
<h2 id="56-door-creation">5.6. Door creation</h2>
|
||||
<p>The process of defining the final expected door will be carried out with web-based interface.</p>
|
||||
<p>In particular a wizard multi-step process, similar to the actual process implemented on "single-user" DoorCreator software.</p>
|
||||
<p>The process will define at least these data:</p>
|
||||
<ul>
|
||||
<li>Door general dimension</li>
|
||||
<li>opening side (SX/DX)</li>
|
||||
<li>hardware</li>
|
||||
<li>items selection from <strong>Base Library</strong></li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
<p>As a final product a DDF file will be real-time generated upon each data input, sent to the EgwDoor Processor for calculation and results will be presented to the user, in both form of 3D we-based content for display and data produced (feasibility, time/cost expectation, ...)</p>
|
||||
<h2 id="57-timecost-calculation">5.7. Time/Cost calculation</h2>
|
||||
<p>During standard user process the task of time/cost estimation (based on actual DDF model) will be carried out.</p>
|
||||
<p>In particular we expect to have some data auto-calculated (ex time from CAM), while other data will be required to external system (ex: materials cost, availability date for materials or machine time, cost markup to define final user price, custom discount based on customer special agreements...)</p>
|
||||
<div style="page-break-after: always; visibility: hidden"></div>
|
||||
<h1 id="6-document-revision">6. Document Revision</h1>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Edit</th>
|
||||
<th style="text-align:center">Version</th>
|
||||
<th style="text-align:right">Note</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>2022.11.09</td>
|
||||
<td>S.E. Locatelli</td>
|
||||
<td style="text-align:center">0.2</td>
|
||||
<td style="text-align:right">Draft completion</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2022.11.03</td>
|
||||
<td>S.E. Locatelli</td>
|
||||
<td style="text-align:center">0.1</td>
|
||||
<td style="text-align:right">Initial draft</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user