要求:保存修改的记录,保存在数据库中(以保存人员基本信息表为例)
修改保存思路:
两个表:①变更基本表
②一个变更明细表
四个方法:①获取前台信息
②处理数据
③添加变更基本表
④添加变更明细表
注意方面:①处理数据为空时
②处理数据相同时
两个表:
数据字典:
四个方法:
①获取前台处理信息
这个方法主要是对前台的传来的数据进行获取并根据变更的类型来进行操作,根据类型的不同来进行判断进入不同的方法。
②处理数据
这个方法主要是对数据进行处理,分别对新旧数据进行对比,对比结果封装并传给下一个方法。(这里解决注意方面的问题)。
③添加到变更基本表
获取信息,保存到数据库。(返回值为表单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; }