要求:保存修改的記錄,保存在數據庫中(以保存人員基本信息表為例)
修改保存思路:
兩個表:①變更基本表
②一個變更明細表
四個方法:①獲取前台信息
②處理數據
③添加變更基本表
④添加變更明細表
注意方面:①處理數據為空時
②處理數據相同時
兩個表:
數據字典:
四個方法:
①獲取前台處理信息
這個方法主要是對前台的傳來的數據進行獲取並根據變更的類型來進行操作,根據類型的不同來進行判斷進入不同的方法。
②處理數據
這個方法主要是對數據進行處理,分別對新舊數據進行對比,對比結果封裝並傳給下一個方法。(這里解決注意方面的問題)。
③添加到變更基本表
獲取信息,保存到數據庫。(返回值為表單ID)。
④添加到變更明細表
獲取信息(包括表單ID),保存到數據庫。
注意方面:
①處理數據為空時
當前台傳來的數據為空時,手動賦值給它空字符串(" ")。
②處理數據相同時
// 如果內容沒有修改就跳出遍歷,不再賦值 if (changeAfter.equals(changeBefore)) { continue; }
整體思路代碼(大概):
/** * 獲取前台信息,保存到兩個表中 * * @param map * 前台傳來的數據 * @author 令狐不要蔥 * @date 2017-11-23 * @version 1.0 */ public static void saveChangeInfo(Map<String, String> map) { // 獲取修改類型 String actionType = map.get("actionType"); // 從前台獲得用戶ID,也可以在保存時獲得 String personID = map.get("personID"); String name = map.get("name"); // ... // 如果類型為新增 if (actionType.equals("add")) { // 首先先添加到個人基本信息表中,獲得peersonID // ... // 處理基本信息 List<Map<String, String>> detailsInfo = getDetailsInfo(null, map); // 保存到基本變更表中(用戶ID,類型為1),返回值為基本變更表ID String changeID = addpersonInfoChange(personID, 1); // 保存到變更明細表(基本信息表ID,處理的數據) addChangeDetails(changeID, detailsInfo); } else if (actionType.equals("edit")) { // 獲取舊數據oldPerson Map<String, String> oldPerson; // 到個人基本信息表中修改 // ... // 處理基本信息 List<Map<String, String>> detailsInfo = getDetailsInfo(oldPerson, map); // 保存到基本變更表中(用戶ID,類型為1),返回值為基本變更表ID String changeID = addpersonInfoChange(personID, 2); // 保存到變更明細表(基本信息表ID,處理的數據) addChangeDetails(changeID, detailsInfo); } } /** * * 處理數據 * * @param oldPerson * 舊數據 * @param newPerson * 新數據 * @return 處理明細表中保存的數據 * @author 令狐不要蔥 * @date 2017-11-23 * @version 1.0 */ public static List<Map<String, String>> getDetailsInfo( Map<String, String> oldPerson, Map<String, String> newPerson) { List<Map<String, String>> detailsinfo = new ArrayList<Map<String, String>>(); Map<String, String> mapTmp; // 修改字段,修改字段描述,修改前值,修改后值 String fieldName, fieldContent, changeBefore, changeAfter; Iterator<String> i = newPerson.keySet().iterator(); // 遍歷新的個人信息集合 while (i.hasNext()) { // 給字段賦值(NAME) fieldName = i.next(); // 給修改后值賦值 changeAfter = newPerson.get(fieldName); // 給修改前值賦值 if (null != oldPerson && oldPerson.containsKey(fieldName)) { changeBefore = oldPerson.get(fieldName); } else { changeBefore = ""; } // 如果內容沒有修改就跳出遍歷,不再賦值(注意問題) if (changeAfter.equals(changeBefore)) { continue; } // 給修改字段描述賦值 if ("NAME".equals(fieldName)) { fieldContent = "姓名"; } // else if("sex".equals(fieldName)){} mapTmp = new HashMap<String, String>(); mapTmp.put("field_name", fieldName); mapTmp.put("field_content", fieldContent); mapTmp.put("change_before", changeBefore); mapTmp.put("chenge_after", changeAfter); detailsinfo.add(mapTmp); } return detailsinfo; }