Ver Fonte

数据操作记录增加数据id字段

William há 2 anos atrás
pai
commit
74cd4e665c

+ 41 - 4
src/main/java/org/springblade/flow/datalog/controller/FormDataLogController.java

@@ -20,7 +20,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import cn.hutool.core.collection.CollUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
 
 /**
  * 表单数据操作记录控制器
@@ -28,7 +27,6 @@ import lombok.extern.slf4j.Slf4j;
  * @author William
  * @date 2022年11月17日 上午11:54:32
  */
-@Slf4j
 @RestController
 @RequestMapping("/paas/visualdev/datalog")
 @Api(tags = "表单数据操作记录", value = "FormDataLog")
@@ -39,9 +37,10 @@ public class FormDataLogController {
 
 	@GetMapping("/all")
 	@ApiOperation(value = "表单所有数据变更记录")
-	public R<List<Kv>> all(String formId) {
+	public R<List<Kv>> all(String formId, String dataId) {
 		LambdaQueryWrapper<FormDataLog> wrapper = Wrappers.<FormDataLog>lambdaQuery();
 		wrapper.eq(FormDataLog::getFormId, formId);
+		wrapper.eq(FormDataLog::getDataId, dataId);
 		wrapper.orderByDesc(FormDataLog::getSn);
 		LinkedHashMap<Long, List<FormDataLog>> map = new LinkedHashMap<>();
 		List<FormDataLog> all = logService.list(wrapper);
@@ -50,7 +49,7 @@ public class FormDataLogController {
 				List<FormDataLog> list = new ArrayList<>();
 				if (map.containsKey(item.getSn())) {
 					list = map.get(item.getSn());
-				}else {
+				} else {
 					map.put(item.getSn(), list);
 				}
 				list.add(item);
@@ -75,6 +74,44 @@ public class FormDataLogController {
 		return R.data(null);
 	}
 
+//	@GetMapping("/all")
+//	@ApiOperation(value = "表单所有数据变更记录")
+//	public R<List<Kv>> all(String formId) {
+//		LambdaQueryWrapper<FormDataLog> wrapper = Wrappers.<FormDataLog>lambdaQuery();
+//		wrapper.eq(FormDataLog::getFormId, formId);
+//		wrapper.orderByDesc(FormDataLog::getSn);
+//		LinkedHashMap<Long, List<FormDataLog>> map = new LinkedHashMap<>();
+//		List<FormDataLog> all = logService.list(wrapper);
+//		if (CollUtil.isNotEmpty(all)) {
+//			all.forEach(item -> {
+//				List<FormDataLog> list = new ArrayList<>();
+//				if (map.containsKey(item.getSn())) {
+//					list = map.get(item.getSn());
+//				}else {
+//					map.put(item.getSn(), list);
+//				}
+//				list.add(item);
+//			});
+//		}
+//
+//		if (CollUtil.isNotEmpty(map)) {
+//			List<Kv> allList = new ArrayList<>();
+//			Set<Long> keys = map.keySet();
+//			keys.forEach(key -> {
+//				List<FormDataLog> childList = map.get(key);
+//				Kv kv = Kv.create();
+//				kv.set("sn", key);
+//				kv.set("time", childList.get(0).getTime());
+//				kv.set("operator", childList.get(0).getOperator());
+//				kv.set("items", childList);
+//				allList.add(kv);
+//			});
+//			return R.data(allList);
+//		}
+//
+//		return R.data(null);
+//	}
+
 //	@PostMapping("/list")
 //	@ApiOperation(value = "分页查询")
 //	public R<IPage<FormDataLog>> list(String formId, Query query) {

+ 1 - 0
src/main/java/org/springblade/flow/datalog/model/FormDataLog.java

@@ -24,6 +24,7 @@ public class FormDataLog implements Serializable {
 
 	private Long id; // 主键ID
 	private String formId; // 表单ID
+	private String dataId; // 对应数据的ID
 	private Integer columnId; // 字段ID 在数据集中的
 	private String valueOld; // 旧的数据
 	private String valueNew; // 新的数据

+ 50 - 24
src/main/java/org/springblade/flow/datalog/service/FormDataLogService.java

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 
 /**
  * 
@@ -39,12 +40,13 @@ public class FormDataLogService extends ServiceImpl<FormDataLogMapper, FormDataL
 	 * 保存表单数据变化
 	 * 
 	 * @param formId
+	 * @param dataId
 	 * @param oldMap
 	 * @param newMap
 	 * @return
 	 */
-	public boolean saveLog(String formId, Map<String, Object> oldMap, Map<String, Object> newMap) {
-		List<FormDataLog> diffList = diff(formId, oldMap, newMap);
+	public boolean saveLog(String formId, String dataId, Map<String, Object> oldMap, Map<String, Object> newMap) {
+		List<FormDataLog> diffList = diff(formId, dataId, oldMap, newMap);
 		if (CollUtil.isNotEmpty(diffList)) {
 			return saveBatch(diffList);
 		}
@@ -55,11 +57,13 @@ public class FormDataLogService extends ServiceImpl<FormDataLogMapper, FormDataL
 	 * 找出两次表单提交的不同
 	 * 
 	 * @param formId
+	 * @param dataId
 	 * @param oldMap
 	 * @param newMap
 	 * @return
 	 */
-	private List<FormDataLog> diff(String formId, Map<String, Object> oldMap, Map<String, Object> newMap) {
+	private List<FormDataLog> diff(String formId, String dataId, Map<String, Object> oldMap,
+			Map<String, Object> newMap) {
 		if (oldMap == null) {
 			oldMap = new HashMap<>();
 		}
@@ -93,38 +97,60 @@ public class FormDataLogService extends ServiceImpl<FormDataLogMapper, FormDataL
 				}
 			}
 
-			FormDataLog log = null;
+			FormDataLog dataLog = null;
 			CubeTableColumnModel columnData = dataSourceService.getFieldInfo(Integer.decode(columnId));
-			if (oldValue == null && newValue != null) {
+			if (isEmptyObject(oldValue) && !isEmptyObject(newValue)) {
 				// 新增
-				log = new FormDataLog(FormDataLogType.add, Integer.decode(columnId), formId);
-				log.setValueNew(handleValue(newValue, columnData));
-			}
-
-			if (oldValue != null && newValue != null && oldValue != newValue) {
+				dataLog = new FormDataLog(FormDataLogType.add, Integer.decode(columnId), formId);
+				dataLog.setValueNew(handleValue(newValue, columnData));
+				inserLog(logList, dataLog, sn, dataId);
+			} else if (!isEmptyObject(oldValue) && !isEmptyObject(newValue) && !isEqualObject(oldValue, newValue)) {
 				// 更新
-				log = new FormDataLog(FormDataLogType.update, Integer.decode(columnId), formId);
-				log.setValueOld(handleValue(oldValue, columnData));
-				log.setValueNew(handleValue(newValue, columnData));
-			}
-
-			if (oldValue != null && newValue == null) {
+				dataLog = new FormDataLog(FormDataLogType.update, Integer.decode(columnId), formId);
+				dataLog.setValueOld(handleValue(oldValue, columnData));
+				dataLog.setValueNew(handleValue(newValue, columnData));
+				inserLog(logList, dataLog, sn, dataId);
+			} else if (!isEmptyObject(oldValue) && isEmptyObject(newValue)) {
 				// 删除
-				log = new FormDataLog(FormDataLogType.remove, Integer.decode(columnId), formId);
-				log.setValueOld(handleValue(oldValue, columnData));
+				dataLog = new FormDataLog(FormDataLogType.remove, Integer.decode(columnId), formId);
+				dataLog.setValueOld(handleValue(oldValue, columnData));
+				inserLog(logList, dataLog, sn, dataId);
 			}
 
-			// 同一批次的数据变更,时间和批号都相同
-			log.setTime(new Date());
-			log.setSn(sn);
-			log.setOperator(SecureUtil.getNickName());
-			log.setOperatorId(SecureUtil.getUserId());
-			logList.add(log);
 		}
 
 		return logList;
 	}
 
+	private void inserLog(List<FormDataLog> logList, FormDataLog dataLog, long sn, String dataId) {
+		// 同一批次的数据变更,时间和批号都相同
+		dataLog.setDataId(dataId);
+		dataLog.setTime(new Date());
+		dataLog.setSn(sn);
+		dataLog.setOperator(SecureUtil.getNickName());
+		dataLog.setOperatorId(SecureUtil.getUserId());
+		logList.add(dataLog);
+	}
+
+	private boolean isEmptyObject(Object obj) {
+		if (obj == null) {
+			return true;
+		}
+
+		String value = obj.toString();
+		if (StrUtil.isBlankIfStr(value)) {
+			return true;
+		}
+
+		return false;
+	}
+
+	private boolean isEqualObject(Object obj1, Object obj2) {
+		String value1 = obj1.toString();
+		String value2 = obj2.toString();
+		return value1.equalsIgnoreCase(value2);
+	}
+
 	private String handleValue(Object object, CubeTableColumnModel field) {
 		if (object != null) {
 			String value = null;

+ 1 - 6
src/main/java/org/springblade/flow/visual/onlinedev/controller/VisualdevModelDataController.java

@@ -236,11 +236,6 @@ public class VisualdevModelDataController extends BladeController {
 	public ActionResult<String> create(@PathVariable("modelId") String modelId,
 			@RequestBody VisualdevModelDataCrForm visualdevModelDataCrForm) throws WorkFlowException {
 		ActionResult<String> ret = formDataWithTableService.add(modelId, visualdevModelDataCrForm);
-		if (ret.getCode() == 200) {
-			Map<String, Object> oldData = JsonUtil.stringToMap(visualdevModelDataCrForm.getOldData());
-			Map<String, Object> newData = JsonUtil.stringToMap(visualdevModelDataCrForm.getData());
-			logService.saveLog(modelId, oldData, newData);
-		}
 		return ret;
 	}
 
@@ -296,7 +291,7 @@ public class VisualdevModelDataController extends BladeController {
 		if (ret.getCode() == 200) {
 			Map<String, Object> oldData = JsonUtil.stringToMap(visualdevModelDataUpForm.getOldData());
 			Map<String, Object> newData = JsonUtil.stringToMap(visualdevModelDataUpForm.getData());
-			logService.saveLog(modelId, oldData, newData);
+			logService.saveLog(modelId, id, oldData, newData);
 		}
 		return ret;
 	}