# 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 之間)