💭

Blazor Hybridでmeviyの部品データベースを作ってみる。

2024/01/29に公開

meviyとは?

meviyとは、(株)ミスミが公開している3Dモデルからの自動的に見積もりと発注を行えるプラットフォームになります。SolidworksやiCADなどの3D CADソフトの部品ファイルをインポートすることで自動的に形状を解析します。そこでユーザー側で材質や加工条件を設定することで、その見積もりと納期、型式を取得し、発注を行うことができます。
機械設計に携わっている私自身もそれを多用しております。

Blazor Hybridで扱うメリット

今回はBlazor Hybridによるデスクトップアプリとして紹介しておりますが、Blazorを使うことで今回使用するコードをBlazor web appで開発するときにも共有できるメリットがあります。
つまり、同じようなコードでデスクトップアプリとしても、WEBアプリとしても柔軟に対応できるのがBlazorを活用する大きなメリットと考えております。

GitHubのソースについて

これより、紹介する実例は下記のGitHubにまとめておりますので、ぜひCloneしてご活用ください。

https://github.com/tke-project/MeviyImporter

meviyの見積もりデータのCSVファイルの中身

meviyで見積もりを行うと、その結果をCSVファイルとして取得することができます。そのCSVファイルを独自の部品表システムに自動的に取り込みたいと誰もが考えることと思います。実際にその取り組みを行っている企業もあるかもしれません。
meviyのCSVファイルの中身は下図のようになっております。
※型番については、本稿の便宜上、私が適当な文字列に置き換えております。

今回はそれをSQLiteのデータベースに構築する実例をご紹介したいと思います。

meviyのパーツのクラスとDBContextを定義する。

パーツに必要な情報をクラスとして定義します。
Nameは名前、Modelは型式、Materialは材質、SurfaceProcessingは表面処理、HeatTreatmentは熱処理、Priceは見積もり金額、Quantityは数量を示します。

https://github.com/tke-project/MeviyImporter/blob/master/MeviyImporter/Model/Part.cs

SQLiteはEntityFramework Coreを使用して、データを操作します。そのため、DBContextを継承した新たなクラスを宣言します。

https://github.com/tke-project/MeviyImporter/blob/master/MeviyImporter/Data/MeviyImporterDBContext.cs

なお、主キーにIdを設けておりますが、これは自動的に連番付与するため、Identityを設定します。SQLiteの場合はValueGeneratedOnAddメソッドを使用します。

     modelBuilder.Entity<Part>()
                .Property(x => x.Id)
                .ValueGeneratedOnAdd();

データを登録するRazorファイルを作成

Razorファイルの全体は下記の通りです。
https://github.com/tke-project/MeviyImporter/blob/master/MeviyImporter/Pages/DBAccess.razor

まずはCSVファイルを登録するためのコンポーネントを配置します。

<InputFile class="form-control" OnChange="@LoadFilesAsync" />

ファイルを登録したら、MemoryStreamを使ってファイル内部の文字列をデコードします。

var file = e.File;

        string str;
        using (var ms = new MemoryStream())
        {
            using (var stream = file.OpenReadStream(1000000))
            {
                await stream.CopyToAsync(ms);

                str = Encoding.UTF8.GetString(ms.ToArray());
            }
        }

CSVファイルの文字列を各行に分割し、更にカンマの部分を分割して、上述したパーツのクラスに割り当て、それをデータベースへ格納します。

 using (var db = new MeviyImporterDBContext())
        {
            List<Part> parts = new();
            for (int i = 1; i < lines.Length; i++)
            {
                string[] datas = lines[i].Split(",");
                try
                {

                    var part = new Part()
                        {
                            Name = datas[4],
                            Model = datas[5],
                            Material = datas[6],
                            SurfaceProcessing = datas[7],
                            HeatTreatment = datas[8],
                            Price = int.Parse(datas[10]),
                            Quantity = int.Parse(datas[9]),
                        };
                    parts.Add(part);
                }
                catch (Exception)
                {

                }
            }

            await db.Parts.AddRangeAsync(parts);
            await db.SaveChangesAsync();
        }

以上が、meviyの部品情報をデータベースに登録する一例になります。
あとは各自のデータベース(SQL ServerやMySQL)などに合わせて構築するための一助にされば幸いです。

Discussion