许鹏程
2025-02-08 61fc6b12f5231c50103849866fe2d094fc0b9936
src/main/java/com/product/face/service/FaceCacheService.java
@@ -1,7 +1,21 @@
package com.product.face.service;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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.util.FaceUtil;
import com.product.util.BaseUtil;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @Author cheng
@@ -11,13 +25,167 @@
@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, null, null, 0, 0, true);
      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;
      }
      FaceEntity face = (FaceEntity) RedisUtil.get(FaceConst.FACE_FORM_CACHE_KEY + faceNumber);
      return face;
   }
   /**
    * 加载表单缓存
    *
    * @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(fse, 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(fse, 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);
      String treeShow = fse.getString("tree_show");
      String treeDataType = fse.getString("tree_data_type");
      String treeDataSource = fse.getString("tree_datasource");
      String treeLabelKey = fse.getString("tree_label_key");
      String treeValueKey = fse.getString("tree_value_key");
      FaceListEntity faceListEntity = new FaceListEntity();
      faceListEntity.setFaceName(faceNumber);
      faceListEntity.setTableUuid(tableUuid);
      faceListEntity.setUuid(fse.getUUID());
      faceListEntity.setTreeShow(treeShow);
      faceListEntity.setTreeDataType(treeDataType);
      faceListEntity.setTreeDataSource(treeDataSource);
      faceListEntity.setTreeLabelKey(treeLabelKey);
      faceListEntity.setTreeValueKey(treeValueKey);
      for (int i = 0; i < tableColumns.size(); i++) {
         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");
         FieldSetEntity fieldInfo = BaseUtil.getSingleInfoByCache("表字段信息", new String[]{tableUuid, fieldName});
         String label = config.getString(FaceConst.FIELD_PROPERTY_LABEL);
         boolean search  = !"0".equals(config.getString("isSearch"));
         String fieldUuid = null;
         String fieldReference = null;
         if (!FieldSetEntity.isEmpty(fieldInfo)) {
            fieldUuid = fieldInfo.getString(FaceConst.UUID);
            fieldReference = fieldInfo.getString(FaceConst.FIELD_FIELD_REFERENCE);
         }
         faceListEntity.addField(fieldName, fieldUuid, label, !StringUtils.isEmpty(setWidth)? setWidth+"%" : null, i, fieldReference,search);
      }
      //验证表单中的字段是否存在
      if (faceListEntity != null && !CollectionUtil.isEmpty(faceListEntity.getFaceFields())) {
         RedisUtil.set(FaceConst.FACE_LIST_KEY + ":face-number" + faceNumber, faceListEntity);
      }
   }
}