From 7baf145ac8ca6cff9177c50c8862ba38d274b484 Mon Sep 17 00:00:00 2001
From: 许鹏程 <1821349743@qq.com>
Date: 星期三, 24 五月 2023 11:34:32 +0800
Subject: [PATCH] 表单缓存、列表模糊搜索

---
 src/main/java/com/product/face/service/FaceCacheService.java |  173 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 169 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/product/face/service/FaceCacheService.java b/src/main/java/com/product/face/service/FaceCacheService.java
index 731c05c..edf1ce7 100644
--- a/src/main/java/com/product/face/service/FaceCacheService.java
+++ b/src/main/java/com/product/face/service/FaceCacheService.java
@@ -1,7 +1,23 @@
 package com.product.face.service;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
+import com.product.common.lang.StringUtils;
+import com.product.core.cache.util.RedisUtil;
+import com.product.core.entity.DataTableEntity;
+import com.product.core.entity.FieldSetEntity;
 import com.product.core.service.support.AbstractBaseService;
+import com.product.face.config.FaceConst;
+import com.product.face.entity.FaceEntity;
+import com.product.face.entity.FaceListEntity;
+import com.product.face.entity.TableColumn;
+import com.product.face.util.FaceUtil;
+import com.product.util.BaseUtil;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * @Author cheng
@@ -11,13 +27,162 @@
 @Service
 public class FaceCacheService extends AbstractBaseService {
 
-	public final static String FACE_CACHE_KEY = "system:face:";
-
+	/**
+	 * 鍒锋柊琛ㄥ崟缂撳瓨(core璋冪敤锛�
+	 */
 	public void refreshCache() {
-
+		this.loadingCache(null);
 	}
 
+	/**
+	 * 鍒锋柊琛ㄥ崟缂撳瓨(core璋冪敤锛�
+	 *
+	 * @param uuid
+	 */
 	public void refreshCache(String uuid) {
-
+		this.loadingCache(uuid);
 	}
+
+	/**
+	 * 绯荤粺鍔犺浇琛ㄥ崟缂撳瓨
+	 *
+	 * @param uuid
+	 */
+	private void loadingCache(String uuid) {
+		String filter = BaseUtil.ifNotNull(uuid, (val) -> "uuid=?");
+		Object[] objects = null;
+		if (!StringUtils.isEmpty(uuid)) {
+			objects = new Object[]{uuid};
+		}
+		DataTableEntity dt = getBaseDao().listTable(FaceConst.TABLE_FACE_CONFIG, filter, objects);
+		if (!DataTableEntity.isEmpty(dt)) {
+			return;
+		}
+		for (FieldSetEntity fs : dt.getData()) {
+			String faceType = fs.getString(FaceConst.FIELD_FACE_TYPE);
+			if (StringUtils.isEmpty(faceType)) {
+				continue;
+			}
+			String faceNumber = fs.getString(FaceConst.FIELD_FACE_NUMBER);
+			if (StringUtils.isEmpty(faceNumber)) {
+				continue;
+			}
+			if ("2".equals(faceType)) {
+				//琛ㄥ崟
+				loadingFormCache(fs);
+			} else if ("1".equals(faceType)) {
+				//鍒楄〃
+				loadingListCache(fs);
+			}
+		}
+	}
+
+	/**
+	 * 鑾峰彇鍒楄〃缂撳瓨
+	 *
+	 * @param faceNumber
+	 * @return
+	 */
+	public FaceListEntity getFaceListCache(String faceNumber) {
+		if (StringUtils.isEmpty(faceNumber)) {
+			return null;
+		}
+		final String faceListKey = FaceConst.FACE_LIST_KEY + ":face-number" + faceNumber;
+		return (FaceListEntity) RedisUtil.get(faceListKey);
+	}
+
+	/**
+	 * 鑾峰彇琛ㄥ崟缂撳瓨
+	 *
+	 * @param faceNumber
+	 * @return
+	 */
+	public FaceEntity getFaceFormCache(String faceNumber) {
+		if (StringUtils.isEmpty(faceNumber)) {
+			return null;
+		}
+		final String faceFormKey = FaceConst.FACE_FORM_CACHE_KEY + ":face-number" + faceNumber;
+		return (FaceEntity) RedisUtil.get(faceFormKey);
+	}
+
+	/**
+	 * 鍔犺浇琛ㄥ崟缂撳瓨
+	 *
+	 * @param fse
+	 */
+	public void loadingFormCache(FieldSetEntity fse) {
+		DataTableEntity fieldPropertyDt = fse.getSubDataTable(FaceConst.TABLE_FACE_FIELD_CONTROL_PROPERTY);
+		if (DataTableEntity.isEmpty(fieldPropertyDt)) {
+			return;
+		}
+		fse.getSubData().clear();
+		String faceNumber = fse.getString(FaceConst.FIELD_FACE_NUMBER);
+		List<JSONObject> faceControlList = FaceUtil.getFaceControlList(fieldPropertyDt);
+		if (faceControlList != null) {
+			FaceEntity face = new FaceEntity();
+			face.setData(BaseUtil.fieldSetEntityToJson(fse));
+			face.setDrawingList(faceControlList);
+			RedisUtil.set(FaceConst.FACE_FORM_CACHE_KEY + faceNumber, face);
+		}
+	}
+
+	/**
+	 * 鍔犺浇鍒楄〃缂撳瓨
+	 *
+	 * @param fse
+	 */
+	public void loadingListCache(FieldSetEntity fse) {
+		DataTableEntity fieldPropertyDt = fse.getSubDataTable(FaceConst.TABLE_FACE_FIELD_CONTROL_PROPERTY);
+		if (DataTableEntity.isEmpty(fieldPropertyDt)) {
+			return;
+		}
+		List<JSONObject> faceControlList = FaceUtil.getFaceControlList(fieldPropertyDt);
+		JSONObject jsonObject = faceControlList.get(0);
+		if (jsonObject == null || jsonObject.isEmpty()) {
+			return;
+		}
+		//琛ㄦ牸鍒�
+		JSONArray tableColumns = jsonObject.getJSONObject(FaceConst.FIELD_PROPERTY_CONFIG).getJSONArray(FaceConst.CHILDREN);
+		if (tableColumns == null || tableColumns.isEmpty()) {
+			return;
+		}
+		String faceNumber = fse.getString(FaceConst.FIELD_FACE_NUMBER);
+		String tableUuid = fse.getString(FaceConst.FIELD_TABLE_UUID);
+		List<TableColumn> result = Lists.newArrayList();
+		FaceListEntity faceListEntity = new FaceListEntity();
+		faceListEntity.setFaceName(faceNumber);
+		faceListEntity.setTableUuid(tableUuid);
+		faceListEntity.setUuid(fse.getUUID());
+		for (int i = 0; i < tableColumns.size(); i++) {
+			TableColumn tableColumn = new TableColumn();
+			JSONObject columnJson = tableColumns.getJSONObject(i);
+			String fieldName = columnJson.getString(FaceConst.FIELD_PROPERTY_VMODEL);
+			if (StringUtils.isEmpty(fieldName)) {
+				continue;
+			}
+
+
+			JSONObject config = columnJson.getJSONObject(FaceConst.FIELD_PROPERTY_CONFIG);
+
+			Object setWidth = config.get("setWidth");
+			if (!StringUtils.isEmpty(setWidth)) {
+				tableColumn.setColumnWidth(setWidth + "%");
+			}
+			FieldSetEntity fieldInfo = BaseUtil.getSingleInfoByCache("琛ㄥ瓧娈典俊鎭�", new String[]{tableUuid, fieldName});
+			String label = config.getString(FaceConst.FIELD_PROPERTY_LABEL);
+			if (!FieldSetEntity.isEmpty(fieldInfo)) {
+				String fieldUuid = fieldInfo.getString(FaceConst.UUID);
+				String fieldReference = fieldInfo.getString(FaceConst.FIELD_FIELD_REFERENCE);
+				faceListEntity.addField(fieldName, fieldUuid, label, tableColumn.getColumnWidth(), i, fieldReference);
+			}
+			tableColumn.setField(fieldName);
+			tableColumn.setTitle(config.getString(FaceConst.FIELD_PROPERTY_LABEL));
+			result.add(tableColumn);
+		}
+		//楠岃瘉琛ㄥ崟涓殑瀛楁鏄惁瀛樺湪
+		if (faceListEntity != null && !CollectionUtil.isEmpty(faceListEntity.getFaceFields())) {
+			RedisUtil.set(FaceConst.FACE_LIST_KEY + ":face-number" + faceNumber, faceListEntity);
+		}
+	}
+
 }

--
Gitblit v1.9.2