# Pixis工作紀錄 # 週報 7/22 仍在進行自動產生sql的功能 - 自動依照路由join - 可建立衍生欄位 並且指定路由 例如IpAddresses.Ip欄位建立HOST_IP衍生欄位 可指定其查詢依賴HostInfos.IpAddressId - 一對多時自動聚合 Todos - AB 表 join 時依靠中間表的問題 - 擴充欄位 - 過濾條件 #### RelationBuilder建立範例 ```cs var relations = new RelationBuilder() .OnTable("IpAddresses") .OnField("Id", FieldType.Int).IsPrimaryKey() .OnField("Ip", FieldType.String) .OnSpecifyJoinField("HostIp", "HostInfos", "IpAddressId") .OnSpecifyJoinField("TestIp", "HostInfos", "Id") .OnTable("HostInfos") .OnField("Id", FieldType.Int).IsPrimaryKey() .OnField("IpAddressId", FieldType.Int) .HasJoinRule("IpAddresses", "Id") .OnField("MacAddressId", FieldType.Int) ``` #### 建立sql查詢範例1 ```cs var sql = new SqlQueryBuilder(r, "HostInfos") .AddField("HostInfos", "Id") .AddField("HostInfos", "IpAddressId") .AddField("IpAddresses", "Ip") .Build(); ``` ```sql SELECT #HostInfos.Id as HostInfos_Id, #HostInfos.IpAddressId as HostInfos_IpAddressId, #IpAddresses.Ip as IpAddresses_Ip FROM HostInfos AS #HostInfos LEFT JOIN IpAddresses AS #IpAddresses ON #HostInfos.IpAddressId = #IpAddresses.Id ``` #### 建立sql查詢範例2 ```cs var sql = new SqlQueryBuilder(r, "IpAddresses") .AddField("IpAddresses", "Id") .AddField("IpAddresses", "Ip") .AddField("HostInfos", "Id") .Build(); ``` ```sql WITH #HostInfos#AGG AS ( SELECT IpAddressId AS GroupById, STRING_AGG(HostInfos.Id, ';') AS Id FROM HostInfos GROUP BY IpAddressId ) SELECT #IpAddresses.Id as IpAddresses_Id, #IpAddresses.Ip as IpAddresses_Ip, #HostInfos#AGG.Id as HostInfos_Id FROM IpAddresses AS #IpAddresses LEFT JOIN #HostInfos#AGG ON #IpAddresses.Id = #HostInfos#AGG.GroupById ``` # 7/22 `8:30~10 : 1.5hours` `12:00~16:30 : 4.5hours` 修正 join route 智障的問題 # 7/21 `10~11 : 1hours` `12~19 : 7hours` - TODO - AB 表 join 時依靠中間表的問題 - 擴充欄位 - 過濾條件 - 修正 join route 智障的問題 - 必要的限制 # 7/20 `14:00~21:30 : 7.5hours` - 建立查詢流程 RelationBuilder SqlQueryBuilder # 7/15 `9:00~9:30 : 0.5hours` - 建立模擬資料 # 7/13 `11:00~14:00 : 3hours` `15:00~21:00 : 6hours` 建立模擬資料 實做順序 - 先制定關聯檔 - 制定查詢檔 - 自動生成 sql # 7/12 `11:00~11:30 : 0.5hours` 討論 vue 表格建立流程 # 7/11 `8:30~9:30 : 1hours` `12:30~1:30 : 1hours` 測試 sql 查詢 # 7/10 `18:30~21:00 : 2.5hours` 測試用純 sql 建立查詢 # 7/9 `11:00~11:30 : 0.5hours` 討論表格回傳格式 # 7/8 `18:30~21:30 : 3hours` 嘗試動態 group 子項(as list) 卡在一對多的問題上? 如果沒有一對多(轉為字串) 可以做到什麼程度? - 一對多的禁止項目 - 禁止作為排序子 - 禁止作為過濾條件 - 禁止查詢擴充欄位 - 沒有下一層 問一下 brian 現況是怎麼做? # 7/6 `9~12 : 3hours` 完成動態欄位 filter `13~16 : 3hours` `18~23 : 5hours` 嘗試建立自適應的複合查詢機制 測試 System.Linq.Dynamic.Core 大致上可以動態查詢 但要更靈活就必須做`動態類`才能更好的 group # 7/5 `17:00~17:30 : 0.5hours` 與伯彥討論表格相關功能 # 7/4 `08:30~11:00 : 2.5hours` 動態欄位 filter 驗證與除錯 # 7/3 `08:30~10:00 : 1.5hours` `05:30~7:00 : 1.5hours` 動態欄位 filter 以中序樹建立查詢 # 7/2 `18:30~22:30 : 4hours` 動態欄位 filter 改寫為中序樹解析 # 7/1 `08:30~10:30 : 2hours` 動態欄位 filter # 6/30 `09~11 : 2hours` `12~18 : 6hours` 實作動態欄位 動態欄位 filter # 6/29 `10:30~18:30 : 8hours` 實作動態欄位 # 6/23 `09~10:30 : 1.5hours` `11:30~16:30 : 5hours` restore project ui 模組無法編譯 ModuleLoader 支援多 DB # 6/18 `15~15:30 : 0.5hours` 與伯彥討論`mainui-lib`的登入過程 # 6/11 `14~14:30 : 0.5hours` 與湯哥討論`mainui-lib與route` # 6/8 `10~12:30 : 2.5hours` 與湯哥討論`動態欄位`與`vue的auto import` # 6/5 `16:30~17:30 : 1hours` 協同處理 vue 的 route 問題 # 6/2 `10~17 : 7hours` 完成 IMHubService 的 ClientInfo 取得與復原 開發 devjet 時 - mainsvr 要加參考 devjet 的 project ref (且要=true) - booter.common 要加參考 devjet (原本 server.common 的 package ref 保留) - booter 參考 booter.common 要改為 project ref - server.common 不用加 - 或只加 project ref 到 server.common 其他所有有參考 server.common 的全改為 project ref 專案架構調整完成 - 模組名稱與專案名稱分離(日後 module.json 要指定模組名稱) - 移除 dev_root - 剩下 ui 需要 link - IMHubService 可直接取得 ClientInfo, 模組重載也會自動恢復 - 暫時移除 `Mgmt.Port.Worker模組` 中的 `IEventLogService` 因其宣告在`Mgmt.Logs模組`無法被參考 - `似乎有掉code?` 還請湯哥檢查一下 # 6/1 `9:30~12 : 2.5hours` `13~21 : 8hours` 建立管理 client info 的機制 (Client 要能在模組重啟後復原) 翻新目錄架構 (servie 不做 link) 暫時移除 Mgmt.Port.Worker 中的 IEventLogService `似乎有掉code` mainsvr\.modules\Mgmt.Port.Worker\src\IM\MgmtIMHubService.cs # 5/31 `19~22 : 3hours` 與湯哥會議 建立管理 client info 的機制 (1.自動獲取 2.自動復原) 要動底層不方便 (卡關 => 調整專案目錄) # 5/30 `19~22 : 3hours` 繼續處理昨日 pull 下來的專案無法執行建置的問題 建立管理 client info 的機制 # 5/29 `21~22:30 : 1.5hours` symlink 造成一些問題 例如在連結的檔案更改 但 git 卻沒有反應出來 在原始的檔案更改 連結的檔案卻沒有反應 我測試過 檔案的連結是正常的 但是編輯器與 git 可能有某些機制 例如快取 使其沒辦法立即反應 可以再 link all 依次 會觸發同步的機制 也因為這樣 可能導致某些檔案沒上到 git 我 checkout 最新的 dev 發現了一些問題 太晚了 不確定有沒看錯 XD # 5/26 `11~21 : 10hours` - 解決 IMHub 的 scope 異常問題 - TODO. client 還不行 C:\projects\AtheNAC_10\src\apps\probe\dev_root\mainsvr\.modules\Probe.Port.Worker\src\Services\MgmtIMClient.cs # 5/23 `18~21 : 3hours` 將 hub handler 改為 scoped (遇到套件找不到版本的問題) # 5/21 `11~13 : 2hours` 修正模組無發起用開發模式的問題 # 5/18 `8~21 : 13hours` 重構 nuget 套件已全數推到共用 nuget, 版本全數從 0.0.1 開始 ```sh # 安裝nuget cli # 加入sources (可能不需要username/password也可以restore) nuget sources add -name pixis -source http://192.168.10.31:5555/v3/index.json -username jim.liu@pixis.com.tw -password 111aaaBBB # 發佈 nuget push -Source pixis -ApiKey 111aaaBBB symbol.package.1.0.0.snupkg ``` - 檔案結構有改變 - dev_root => 沒變 但是.modules 移到外面了 - repos - commond => 套件 - modules => 模組 - modules 移到外面的原因 - 因為搜尋時容易出現兩個檔案(一個是 symlink) - 無法搜尋 symlink 可在 vscode 開啟 search.followSymlinks - mainui-lib 只保留一個讓 app 共用 - ui 模組在開發模式可以 hot reload 了 - demo2/mgmt/probe 都測過一次 so far so good! # 5/15 `2hours` 協作 vue mainui-lib 的 export 規劃問題 # 5/14 `2hours` 協作 vue mainui-lib 的 export 消失的問題 # 5/13 `2hours` 與湯哥討論後續 協作 vue mainui-lib 的 export 消失的問題 # 5/12 `11~21 : 10hours` 完成 `IMHub` 新架構的整合與測試 # 5/10 `10~12 : 2hours` `13~17 : 4hours` - Unable to load DLL 'wpcap' https://www.winpcap.org/install/default.htm 轉移應用 ISendService LiteLoginStrategy SwitchBaseInfoStrategy PortWorkerSetting # 5/9 `8:30~12:00 : 3.5hours` json 問題告一段落 model 送收正常 - TODO: - db 要可以連 - LiteLoginStrategy 換成 接收函數處理 - 命名重構 (再最後併完 dev 才能做) # 5/8 `8:30~9:30 : 1hours` 終於重新接通 mgmt 跟 probe 的通訊 TODO : message code 改為 function handle `18~21 : 3hours` enum code -> function call # 5/7 `1hours` vuexy 整併到 demo2 引發的問題 協助分析廠商提供的 api data model `19~22 : 3hours` 試試看更新 Mgmt.Booter.Common 因為其依賴有更新 # 5/6 `1hours` vuexy 整併到 demo2 引發的問題 # 5/5 `13~18 : 5hours` 層級區分 : App > (Probe/Mgmt) > Module 關鍵字 sendService.Send TODO: 已經刪掉 Mgmt.Common 的 SendService 相關內容 再來要加入新的機制到模組中 # 5/4 `9~19 : 10hours` # 5/3 `13~18: 5hours` 繼續實現 # 5/2 `9~12 14~18: 7hours` - Server 拆分 - Emitter : 發送訊息 - Listener : 接收訊息 - Client 發送接收合併 (分層 比較清晰 不會 call 錯函數?) - 先在 probe 實作 目標 : 達到方法可在模組中動態擴充 且 使用方便 # 5/1 `9~12 14~18: 7hours` signalR 的部分 雖然沒有`non-collectible`問題 但不好使用 也很難在不同模組間共用或擴充 故改用註冊 Handler 方式處理 以便共同/分散處理 signalR 的各類訊息 - 以 probe 為例 - 做為一個 server (AppIMHub) - 我要發送訊息給 client => 注入(IHubContext<AppIMHub> hub) 取得 server - 我要處理給 probe 的訊息 => 實作 IProbeIMHandler 並註冊 - 做為一個 client (IMgmtClient) - 我要發送訊息給 mgmt => 實作一個 mgmt 的 client (要知道 mgmt 的介面 與 方法 與 DTO) 訊息格式 ```json { "ns": "namespace", "method": "test", "data": {} } ``` probe/im 下的應該可以全部移到 probe-common app-common 裡面放 methodName DTO (mgmt/probe 之間)