欄位修改記錄操作日誌的實現

Roy155發表於2021-01-08

資料敏感欄位的修改往往需要記錄操作日誌,例如客戶表中的姓名、身份證等資訊,需要系統記錄下修改記錄,方便以後溯源。 

準備工作: 

1、在白碼建立一個資料表,根據各自需求新增若干個欄位,並準備若干條資料以便測試。 

2、建立一個日誌表。新增欄位:時間、資料、欄位、操作前、操作後、操作人(關聯-使用者)。 

實現步驟: 

1、新建一個“修改資料表”的功能。 

2、點選功能進入編輯介面,在修改功能的基礎上新增一個獲取當前使用者步驟:點開步驟設定,將id設為查詢$$USER。 

3、新增程式設計步驟。點開步驟的“設定>程式設計”進入程式碼編輯介面。 

4、新增修改前資料、修改後資料、當前使用者的引數,並在程式碼中引用。 

5、獲取當前時間。

 //當前時間
        let date = new Date();
        let YY = date.getFullYear() + '-';
        let MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
        let DD = (date.getDate() + 1 <= 10 ? '0' + date.getDate() : date.getDate()) + ' ';
        let hh = (date.getHours() + 1 <= 10 ? '0' + date.getHours() : date.getHours()) + ':';
        let mm = date.getMinutes() + 1 <= 10 ? '0' + date.getMinutes() : date.getMinutes();
        let time=YY+MM+DD+hh+mm;

6、新增資料表中需要記錄修改操作的欄位id資料。 

   //資料表欄位id
        let fields = [
                "5ff44e3fdd9ec8350b2d24df",//欄位1,
                "5ff44e45cf250d350cc124d2",//欄位2,
                "5ff44e51cf250d350cc124d4",//欄位4,
        ];

欄位id獲取方式為field_資料表>欄位名: 

7、新增可根據欄位id獲取欄位名的map    

 //資料表欄位名
        let fieldNameMap = {
                "5ff44e3fdd9ec8350b2d24df": "欄位1",
                "5ff44e45cf250d350cc124d2": "欄位2",
                "5ff44e51cf250d350cc124d4": "欄位4",
        };

8、是否需要記錄欄位修改的判斷邏輯       

  fields.forEach(field => {
                //對每個欄位進行判斷
                if (before[field] != after[field]) {
                        //修改前後不相等即有修改,需進行日誌記錄
 
                }
        });

9、建立日誌記錄

{
        "5ff44e6ecf250d350cc124d7": time,//時間
        "5ff44e80cf250d350cc124d8": after["5ff44e5ccf250d350cc124d5"],//資料ID
        "5ff44ea0cf250d350cc124d9": fieldNameMap[field],//欄位
        "5ff44ea5cf250d350cc124da": before[field],//操作前
        "5ff44eaccf250d350cc124db": after[field],//操作後
        "5ff44eb5cf250d350cc124dc": user._id,//操作人
}

10、至此日誌功能已全部實現。完整程式碼:

async function runProcess($model = model, $plugin = plugin, $params) {
        let before = await $params.before;//修改前的資料
        let after = await $params.after;//修改後的資料
        let user = await $params.user;//當前使用者
 
        //當前時間
        let date = new Date();
        let YY = date.getFullYear() + '-';
        let MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
        let DD = (date.getDate() + 1 <= 10 ? '0' + date.getDate() : date.getDate()) + ' ';
        let hh = (date.getHours() + 1 <= 10 ? '0' + date.getHours() : date.getHours()) + ':';
        let mm = date.getMinutes() + 1 <= 10 ? '0' + date.getMinutes() : date.getMinutes();
        let time = YY + MM + DD + hh + mm;
 
        //資料表欄位id
        let fields = [
                "5ff44e3fdd9ec8350b2d24df",//欄位1,
                "5ff44e45cf250d350cc124d2",//欄位2,
                "5ff44e51cf250d350cc124d4",//欄位4,
        ];
 
        //資料表欄位名
        let fieldNameMap = {
                "5ff44e3fdd9ec8350b2d24df": "欄位1",
                "5ff44e45cf250d350cc124d2": "欄位2",
                "5ff44e51cf250d350cc124d4": "欄位4",
        };
 
        fields.forEach(field => {
                //對每個欄位進行判斷
                if (before[field] != after[field]) {
                        //修改前後不相等即有修改,需進行日誌記錄
                        $plugin.data.saveData("5ff44e6acf250d350cc124d6", {
                                "5ff44e6ecf250d350cc124d7": time,//時間
                                "5ff44e80cf250d350cc124d8": after["5ff44e5ccf250d350cc124d5"],//資料ID
                                "5ff44ea0cf250d350cc124d9": fieldNameMap[field],//欄位
                                "5ff44ea5cf250d350cc124da": before[field],//操作前
                                "5ff44eaccf250d350cc124db": after[field],//操作後
                                "5ff44eb5cf250d350cc124dc": user._id,//操作人
                        });
                }
        });
}

效果:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981626/viewspace-2748482/,如需轉載,請註明出處,否則將追究法律責任。

相關文章