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 ++++++++++ src/main/java/com/product/face/config/FaceConst.java | 8 src/main/java/com/product/face/entity/FaceListEntity.java | 346 +++++++++++++++++++++ src/main/java/com/product/face/service/FaceApplyService.java | 47 -- src/main/java/com/product/face/service/FaceDesignService.java | 112 ------ src/main/java/com/product/face/service/FaceListSearchService.java | 59 +++ src/main/java/com/product/face/entity/FaceEntity.java | 36 ++ src/main/java/com/product/face/util/FaceUtil.java | 128 ++++++++ 8 files changed, 758 insertions(+), 151 deletions(-) diff --git a/src/main/java/com/product/face/config/FaceConst.java b/src/main/java/com/product/face/config/FaceConst.java index 44c045a..a61fea7 100644 --- a/src/main/java/com/product/face/config/FaceConst.java +++ b/src/main/java/com/product/face/config/FaceConst.java @@ -44,4 +44,12 @@ //鎺т欢鎺掑簭灞炴�� public static final String CONTROL_SEQUENCE = "control_sequence"; + /** + * 缂撳瓨璧峰Key + */ + public static final String FACE_LIST_KEY = "face:fieldList:"; + + public static final String FACE_FORM_CACHE_KEY = "face:form:"; + + } diff --git a/src/main/java/com/product/face/entity/FaceEntity.java b/src/main/java/com/product/face/entity/FaceEntity.java new file mode 100644 index 0000000..3bd5786 --- /dev/null +++ b/src/main/java/com/product/face/entity/FaceEntity.java @@ -0,0 +1,36 @@ +package com.product.face.entity; + +import com.alibaba.fastjson.JSONObject; + +import java.io.Serializable; +import java.util.List; + +/** + * @Author cheng + * @Date 2023/5/24 10:31 + * @Desc + */ +public class FaceEntity implements Serializable { + + private static final long serialVersionUID = 2740417254150550879L; + + private JSONObject data; + + private List<JSONObject> drawingList; + + public JSONObject getData() { + return data; + } + + public void setData(JSONObject data) { + this.data = data; + } + + public List<JSONObject> getDrawingList() { + return drawingList; + } + + public void setDrawingList(List<JSONObject> drawingList) { + this.drawingList = drawingList; + } +} diff --git a/src/main/java/com/product/face/entity/FaceListEntity.java b/src/main/java/com/product/face/entity/FaceListEntity.java new file mode 100644 index 0000000..e2fbd06 --- /dev/null +++ b/src/main/java/com/product/face/entity/FaceListEntity.java @@ -0,0 +1,346 @@ +package com.product.face.entity; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.product.admin.config.CmnConst; +import com.product.admin.service.DictService; +import com.product.admin.service.SystemFaceService; +import com.product.common.lang.StringUtils; +import com.product.core.cache.DataPoolCacheImpl; +import com.product.core.cache.util.RedisUtil; +import com.product.core.config.CoreConst; +import com.product.core.entity.DataTableEntity; +import com.product.core.entity.FieldSetEntity; +import com.product.core.spring.context.SpringBeanUtil; +import com.product.core.spring.context.SpringMVCContextHolder; +import com.product.module.sys.entity.SystemUser; +import com.product.util.BaseUtil; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * @Author cheng + * @Description 鍒楄〃瀛楁鎿嶄綔绫� + * @Date 2021/9/7 14:34 + * @Version 1.0 + */ +public class FaceListEntity implements Serializable { + + private static final long serialVersionUID = -6777140406080679771L; + /** + * 琛╱uid + */ + private String tableUuid; + /** + * face_uuid + */ + private String uuid; + /** + * 琛ㄥ崟鍚� + */ + private String faceName; + /** + * 鍔熻兘uuid + */ + @Deprecated + private String functionUuid; + /** + * 瀛楁闆嗗悎 + */ + private List<FaceField> faceFields; + /** + * 琛ㄥ悕 + */ + private String tableName; + + /** + * 鑾峰彇琛ㄥ悕 + * + * @return + */ + public String getTableName() { + if (this.tableName == null && this.tableUuid != null) { + //浠庣紦瀛樹腑鑾峰彇 + DataTableEntity cacheData = DataPoolCacheImpl.getInstance().getCacheData("鎵�鏈夎〃淇℃伅(uuid)", new String[]{this.tableUuid}); + if (cacheData != null && cacheData.getRows() > 0) { + String table_name = cacheData.getString(0, "table_name"); + this.tableName = table_name; + } + } + return tableName; + } + + /** + * 鏉′欢瀛楁 + * + * @param fieldName 瀛楁鍚嶇О + * @param faceUuid 瀛楁uuid + * @param columnName 鍒楀悕 + * @param columnWidth 鍒楀 + * @param sequence 鎺掑簭 + * @param fieldReference 鍙傜収 + */ + public void addField(String fieldName, String faceUuid, String columnName, String columnWidth, Integer sequence, String fieldReference) { + FaceField faceField = new FaceField(); + faceField.setFieldName(fieldName); + faceField.setFieldUuid(faceUuid); + faceField.setColumnName(columnName); + faceField.setColumnWidth(columnWidth); + faceField.setSequence(sequence); + faceField.setFieldReference(fieldReference); + if (this.faceFields == null) { + this.faceFields = Lists.newArrayList(); + } + this.faceFields.add(faceField); + } + + /** + * 瀛楁鎺掑簭鏂规硶 + */ + public void sortField() { + if (this.faceFields != null && this.faceFields.size() > 0) { + this.faceFields.sort((a, b) -> { + return a.getSequence().compareTo(b.getSequence()); + }); + } + } + + public String getTableUuid() { + return tableUuid; + } + + public void setTableUuid(String tableUuid) { + this.tableUuid = tableUuid; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getFaceName() { + return faceName; + } + + public void setFaceName(String faceName) { + this.faceName = faceName; + } + + public String getFunctionUuid() { + return functionUuid; + } + + public void setFunctionUuid(String functionUuid) { + this.functionUuid = functionUuid; + } + + public List<FaceField> getFaceFields() { + return faceFields; + } + + public void setFaceFields(List<FaceField> faceFields) { + this.faceFields = faceFields; + } + + /** + * 鑾峰彇鍙傜収鏉′欢 + * + * @param fieldName + * @param dictName + * @return + */ + private String getDictFilter(String fieldName, String dictName) { + StringBuilder filter = new StringBuilder(); + DictService bean = SpringBeanUtil.getBean(DictService.class); + String manager_type = null; + SystemUser currentUser = SpringMVCContextHolder.getCurrentUser(); + if (currentUser != null && currentUser.getCurrentManager() != null) { + manager_type = currentUser.getCurrentManager().getString(CmnConst.MANAGER_TYPE); + } else { + manager_type = null; + } + //鎷艰鏅�氬弬鐓ф煡璇㈡墍闇�鍙傛暟 + FieldSetEntity fse = new FieldSetEntity(); + fse.setTableName(CmnConst.PRODUCT_SYS_DICT); + fse.setValue(CmnConst.DICT_NAME, dictName); + fse.setValue(CoreConst.SYSTEM_CLIENT_TYPE_, currentUser.getClientType()); + //鑾峰彇鍙傜収闆嗗悎 + DataTableEntity dataTableEntity = bean.listDictByname(fse, manager_type); + if (!BaseUtil.dataTableIsEmpty(dataTableEntity)) { + //缁勬垚鏉′欢 + Object[] uuids = dataTableEntity.getUuids(); + filter.append(fieldName); + filter.append(" in (SELECT dict_value FROM product_sys_dict where "); + filter.append(BaseUtil.buildQuestionMarkFilter("uuid", uuids, true)); + filter.append(" and dict_label like concat('%','~val~','%') ) "); + } + return filter.toString(); + } + + /** + * 鑾峰彇鏉′欢 + * + * @param tableAlias 琛ㄥ埆鍚� + * @param aliasField 瀛楁鍒悕 + * @return + */ + public Map<String, List<String>> getFilters(String tableAlias, Map<String, List<String>> aliasField) { + DataPoolCacheImpl poolCache = null; + //鎵�鏈夊瓧娈甸泦鍚� + List<FaceField> faceFields = this.getFaceFields(); + //鏅�氭ā绯婃煡璇㈠瓧娈甸泦鍚� + List<String> fieldNames = Lists.newArrayList(); + //鍙傜収妯$硦鏌ヨ鏉′欢闆嗗悎 + List<String> filters = Lists.newArrayList(); + //杩斿洖鐨勭粨鏋滈泦 + Map<String, List<String>> maps = Maps.newHashMap(); + maps.put("fields", fieldNames); + maps.put("filter", filters); + for (int i = 0; i < faceFields.size(); i++) { + FaceField faceField = faceFields.get(i); + if (StringUtils.isEmpty(faceField.getFieldName()) || StringUtils.isEmpty(faceField.getFieldReference())) { + if (poolCache == null) { + poolCache = DataPoolCacheImpl.getInstance(); + } + DataTableEntity dt = poolCache.getCacheData("琛ㄥ瓧娈典俊鎭�", new String[]{getTableUuid(), faceField.getFieldName()}); + if (BaseUtil.dataTableIsEmpty(dt)) { + } else { + FieldSetEntity f = dt.getFieldSetEntity(0); + faceField.setFieldName(f.getString(CmnConst.FIELD_NAME)); + faceField.setFieldReference(f.getString("field_reference")); + } + } + //瀛楁鍚嶇О + String fieldName = faceField.getFieldName(); + if (aliasField != null && !StringUtils.isEmpty(fieldName)) { + List<String> fieldAlias = aliasField.get(getTableName() + "." + fieldName); + if (fieldAlias != null && fieldAlias.size() > 0) { + String alias = fieldAlias.get(0); + if (!StringUtils.isEmpty(alias)) { + fieldName = alias; + } + } + } + //鍙傜収澶勭悊 + String field_reference = faceField.getFieldReference(); + if (!StringUtils.isEmpty(field_reference)) { + if (field_reference.indexOf("銆�") == 0 && field_reference.indexOf("銆�") > 0) { + //鏅�氬弬鐓� + filters.add(getDictFilter(fieldName, field_reference.replace("銆�", "").replace("銆�", ""))); + continue; + } else { + if (poolCache == null) { + poolCache = DataPoolCacheImpl.getInstance(); + } + //楂樼骇鍙傜収 + DataTableEntity prompt = poolCache.getCacheData("楂樼骇鍙傜収閰嶇疆淇℃伅", new String[]{field_reference}); + if (BaseUtil.dataTableIsEmpty(prompt)) { + continue; + } + FieldSetEntity ff = prompt.getFieldSetEntity(0); + StringBuilder p = new StringBuilder(); + p.append(fieldName).append(" in ").append(" ( SELECT ").append(ff.getString("value_field")).append(" FROM ").append(ff.getString("source_table")); + p.append(" WHERE ").append(ff.getString("view_fields")).append(" like concat('%','~val~','%') )"); + filters.add(p.toString()); + continue; + } + } + + if (!StringUtils.isEmpty(faceField.getFieldName())) { + fieldNames.add(StringUtils.isEmpty(tableAlias) ? faceField.getFieldName() : ("`" + tableAlias + "`.`" + fieldName + "`")); + } + } + //鑾峰彇redis 璧峰key + String faceListKey = SystemFaceService.FACE_LIST_KEY; + //閲嶆柊鏀惧叆redis + RedisUtil.set(faceListKey + getUuid(), this); + return maps; + } + + /** + * 瀛楁瀹炰綋绫� + */ + public class FaceField implements Serializable { + + private static final long serialVersionUID = 3154509166818911568L; + /** + * 瀛楁鍚嶇О + */ + private String fieldName; + /** + * 瀛楁uuid + */ + private String fieldUuid; + /** + * 鍒楀悕 + */ + private String columnName; + /** + * 鍒楀 + */ + private String columnWidth; + /** + * 鎺掑簭 + */ + private Integer sequence; + /** + * 瀛楁鍙傜収 + */ + private String fieldReference; + + public String getFieldReference() { + return fieldReference; + } + + public void setFieldReference(String fieldReference) { + this.fieldReference = fieldReference; + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public String getFieldUuid() { + return fieldUuid; + } + + public void setFieldUuid(String fieldUuid) { + this.fieldUuid = fieldUuid; + } + + public String getColumnName() { + return columnName; + } + + public void setColumnName(String columnName) { + this.columnName = columnName; + } + + public String getColumnWidth() { + return columnWidth; + } + + public void setColumnWidth(String columnWidth) { + this.columnWidth = columnWidth; + } + + public Integer getSequence() { + return sequence; + } + + public void setSequence(Integer sequence) { + this.sequence = sequence; + } + + } + +} diff --git a/src/main/java/com/product/face/service/FaceApplyService.java b/src/main/java/com/product/face/service/FaceApplyService.java index 689c4a8..b807fe8 100644 --- a/src/main/java/com/product/face/service/FaceApplyService.java +++ b/src/main/java/com/product/face/service/FaceApplyService.java @@ -3,8 +3,10 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; +import com.product.admin.entity.FaceListEntity; import com.product.admin.service.SystemFaceService; 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.exception.BaseException; @@ -12,6 +14,7 @@ import com.product.face.config.ErrorCode; import com.product.face.config.FaceConst; import com.product.face.entity.TableColumn; +import com.product.face.util.FaceUtil; import com.product.util.BaseUtil; import org.springframework.stereotype.Service; @@ -19,7 +22,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * @Author cheng @@ -33,8 +35,7 @@ private SystemFaceService systemFaceService; @Resource - private FaceDesignService designService; - + private FaceCacheService faceCacheService; public Object getFaceListConf(FieldSetEntity fse) { String faceUuid = fse.getString(FaceConst.FIELD_FACE_UUID); @@ -46,41 +47,13 @@ if (!StringUtils.isEmpty(faceUuid) && StringUtils.isEmpty(faceNumber)) { return systemFaceService.getFaceFieldList(faceUuid); } - //鏍规嵁琛ㄥ崟鍙锋煡璇� - FieldSetEntity faceConf = getBaseDao().getFieldSetByFilter(FaceConst.TABLE_FACE_CONFIG, "face_number=?", new Object[]{faceNumber}, true); - DataTableEntity fieldPropertyDt = faceConf.getSubDataTable(FaceConst.TABLE_FACE_FIELD_CONTROL_PROPERTY); - if (DataTableEntity.isEmpty(fieldPropertyDt)) { - throw new BaseException(ErrorCode.GET_FACE_CONFIG_FAIL); - } - List<JSONObject> faceControlList = designService.getFaceControlList(fieldPropertyDt); - JSONObject jsonObject = faceControlList.get(0); - if (jsonObject == null || jsonObject.isEmpty()) { - throw new BaseException(ErrorCode.GET_FACE_CONFIG_FAIL); - } - //琛ㄦ牸鍒� - JSONArray tableColumns = jsonObject.getJSONObject(FaceConst.FIELD_PROPERTY_CONFIG).getJSONArray(FaceConst.CHILDREN); - if (tableColumns == null || tableColumns.isEmpty()) { - throw new BaseException(ErrorCode.GET_FACE_CONFIG_FAIL); - } - List<TableColumn> result = Lists.newArrayList(); - 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 + "%"); - } - tableColumn.setField(fieldName); - tableColumn.setTitle(config.getString(FaceConst.FIELD_PROPERTY_LABEL)); - result.add(tableColumn); + final String redisKey = FaceConst.FACE_LIST_KEY + ":face-number" + faceNumber; + if (RedisUtil.exists(redisKey)) { + return RedisUtil.get(redisKey); } - return result; + + return null; } /** @@ -101,7 +74,7 @@ if (DataTableEntity.isEmpty(fieldPropertyDt)) { throw new BaseException(ErrorCode.GET_FACE_CONFIG_FAIL); } - List<JSONObject> faceControlList = designService.getFaceControlList(fieldPropertyDt); + List<JSONObject> faceControlList = FaceUtil.getFaceControlList(fieldPropertyDt); Map<String, Object> other = new HashMap<>(); other.put("drawingList", faceControlList); faceConf.getSubData().clear(); 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); + } + } + } diff --git a/src/main/java/com/product/face/service/FaceDesignService.java b/src/main/java/com/product/face/service/FaceDesignService.java index ba68ba1..9eb1d40 100644 --- a/src/main/java/com/product/face/service/FaceDesignService.java +++ b/src/main/java/com/product/face/service/FaceDesignService.java @@ -1,13 +1,9 @@ package com.product.face.service; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.NumberUtil; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.drew.metadata.Face; import com.product.admin.service.PublicService; import com.product.common.lang.StringUtils; import com.product.core.config.CoreConst; @@ -16,18 +12,15 @@ import com.product.core.exception.BaseException; import com.product.core.service.support.AbstractBaseService; import com.product.core.transfer.Transactional; -import com.product.core.util.JsonUtil; import com.product.face.config.ErrorCode; import com.product.face.config.FaceConst; import com.product.face.service.ide.IFaceDesignService; +import com.product.face.util.FaceUtil; import com.product.util.BaseUtil; -import org.apache.logging.log4j.core.Core; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.io.File; import java.util.*; -import java.util.stream.Collectors; /** * @Author cheng @@ -55,112 +48,11 @@ if (DataTableEntity.isEmpty(fieldPropertyDt)) { throw new BaseException(ErrorCode.GET_FACE_CONFIG_FAIL); } - List<JSONObject> result = getFaceControlList(fieldPropertyDt); + List<JSONObject> result = FaceUtil.getFaceControlList(fieldPropertyDt); Map<String, Object> other = new HashMap<>(); other.put("drawingList", result); fse.getSubData().clear(); return BaseUtil.success(fse, other); - } - - public List<JSONObject> getFaceControlList(DataTableEntity faceControlDt) { - List<JSONObject> result = new ArrayList<>(); - List<FieldSetEntity> data = faceControlDt.getData(); - Map<String, List<FieldSetEntity>> collect = data.stream() - .filter(item -> StringUtils.isEmpty(item.getString(FaceConst.FIELD_PARENT_UUID))) //杩囨护 鍙栫埗绾� -// .sorted(Comparator.comparing(item -> item.getInteger(FaceConst.CONTROL_SEQUENCE))) //鎺掑簭 - .collect(Collectors.groupingBy(item -> item.getString(FaceConst.FIELD_GROUP_UUID))); //鍒嗙粍 - Map<String, List<FieldSetEntity>> groupContainer = data.stream() - .filter(item -> !StringUtils.isEmpty(item.getString(FaceConst.FIELD_PARENT_UUID))) //杩囨护 鍙栧瓙绾� - .collect(Collectors.groupingBy(item -> item.getString(FaceConst.FIELD_PARENT_UUID))); //鍒嗙粍 - for (Map.Entry<String, List<FieldSetEntity>> entry : collect.entrySet()) { - List<FieldSetEntity> propertyList = entry.getValue(); - result.add(getPropertyJson(propertyList, groupContainer)); - } - result.sort(Comparator.comparing(item -> item.getInteger(FaceConst.CONTROL_SEQUENCE))); - return result; - } - - private JSONObject getPropertyJson(List<FieldSetEntity> propertyList, Map<String, List<FieldSetEntity>> groupContainer) { - JSONObject property = new JSONObject(); - String propertyValue = null; - if (!CollectionUtil.isEmpty(propertyList)) { - for (FieldSetEntity fs : propertyList) { - //灞炴�х被鍨� 1 - String groupUuid = fs.getUUID(); - String propertyType = fs.getString(FaceConst.FIELD_PROPERTY_TYPE); - String propertyName = fs.getString(FaceConst.FIELD_PROPERTY_NAME); - propertyValue = fs.getString(FaceConst.FIELD_PROPERTY_VALUE); - if (StringUtils.equalsAny(propertyName, "renderKey", "formId")) { - propertyValue = fs.getString("id"); - } - if ("componentType".equals(propertyName) && "design".equals(propertyValue)) { - continue; - } - if ("layout".equals(propertyName)) { - property.put("defaultValue", null); - } - switch (propertyType) { - case "1"://瀛楃涓� - property.put(propertyName, propertyValue); - break; - case "2"://鏁扮粍 - property.put(propertyName, propertyValue.split(",")); - break; - case "3"://瀛愮骇瀵硅薄 - try { - JSONObject propertyJson = getPropertyJson(groupContainer.get(groupUuid), groupContainer); - property.put(propertyName, propertyJson); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - break; - case "4"://瀛愮骇鏁扮粍瀵硅薄 - List<FieldSetEntity> propertyListChild = groupContainer.get(groupUuid); - if (propertyListChild != null && !propertyListChild.isEmpty()) { - List<Object> array = propertyListChild.stream() - .collect(Collectors.groupingBy(item -> item.getString(FaceConst.FIELD_GROUP_UUID))) - .values().stream().map(item -> getPropertyJson(item, groupContainer)).sorted(Comparator.comparing(item -> item.getInteger(FaceConst.CONTROL_SEQUENCE))).collect(Collectors.toList()); - property.put(propertyName, new JSONArray(array)); - } - -// groupContainer.put(groupUuid, array); - break; - case "5": //boolean 绫诲瀷 - Boolean value = null; - if ("1".equals(propertyValue)) { - value = true; - } else if ("0".equals(propertyValue)) { - value = false; - } - property.put(propertyName, value); - break; - case "6":// int 绫诲瀷 - if (NumberUtil.isNumber(propertyValue)) { - property.put(propertyName, NumberUtil.parseInt(propertyValue)); - } - break; - case "7"://double 绫诲瀷 - if (NumberUtil.isDouble(propertyValue)) { - property.put(propertyName, NumberUtil.parseDouble(propertyValue)); - } - break; - } - } - } - - if (!StringUtils.isEmpty(propertyValue)) { - Object o = groupContainer.get(propertyValue); - if (o != null) { - if (o instanceof JSONArray) { - ((JSONArray) o).add(property); - } else { - ((JSONObject) o).putAll(property); - groupContainer.remove(propertyValue); - } - } - } - return property; } diff --git a/src/main/java/com/product/face/service/FaceListSearchService.java b/src/main/java/com/product/face/service/FaceListSearchService.java new file mode 100644 index 0000000..de1d08e --- /dev/null +++ b/src/main/java/com/product/face/service/FaceListSearchService.java @@ -0,0 +1,59 @@ +package com.product.face.service; + +import com.product.common.lang.StringUtils; +import com.product.core.cache.util.RedisUtil; +import com.product.core.exception.BaseException; +import com.product.core.service.support.AbstractBaseService; +import com.product.face.config.FaceConst; +import com.product.face.entity.FaceListEntity; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Author cheng + * @Date 2023/5/23 17:41 + * @Desc 琛ㄥ崟鍒楄〃鎼滅储 + */ +@Component +public class FaceListSearchService extends AbstractBaseService { + + public String getFaceListSearchFilter(Map<String, List<String>> aliasTable, Map<String, List<String>> aliasField, String faceUuid, String faceNumber, String val) throws BaseException { + if (StringUtils.isEmpty(val)) { + return ""; + } + FaceListEntity face = null; + if (!StringUtils.isEmpty(faceNumber)) { + face = (FaceListEntity) RedisUtil.get(FaceConst.FACE_LIST_KEY + ":face-number" + faceNumber); + } else if (!StringUtils.isEmpty(faceUuid)){ + face = (FaceListEntity) RedisUtil.get(FaceConst.FACE_LIST_KEY + faceUuid); + } + if (face != null) { + String tableAlias = null; + String tableName = face.getTableName(); + List<String> t = aliasTable.get(tableName); + if (t != null && t.size() > 0) { + tableAlias = t.get(0); + } + Map<String, List<String>> params = face.getFilters(tableAlias, aliasField); + List<String> fieldNames = params.get("fields"); + List<String> filters = params.get("filter"); + String filter = ""; + for (int i = 0; i < fieldNames.size(); i++) { + if (i > 0) { + filter += " or "; + } + filter += " " + fieldNames.get(i) + " LIKE BINARY concat('%','" + val + "','%')"; + } + for (int i = 0; i < filters.size(); i++) { + if (!"".equals(filter)) { + filter += " or "; + } + filter += filters.get(i).replace("~val~", val); + } + return "".equals(filter) ? "" : "( " + filter + " )"; + } + return ""; + } +} diff --git a/src/main/java/com/product/face/util/FaceUtil.java b/src/main/java/com/product/face/util/FaceUtil.java new file mode 100644 index 0000000..8dafdd4 --- /dev/null +++ b/src/main/java/com/product/face/util/FaceUtil.java @@ -0,0 +1,128 @@ +package com.product.face.util; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.NumberUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.product.common.lang.StringUtils; +import com.product.core.entity.DataTableEntity; +import com.product.core.entity.FieldSetEntity; +import com.product.face.config.FaceConst; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author cheng + * @Date 2023/5/24 10:42 + * @Desc + */ +public class FaceUtil { + + + public static List<JSONObject> getFaceControlList(DataTableEntity faceControlDt) { + List<JSONObject> result = new ArrayList<>(); + List<FieldSetEntity> data = faceControlDt.getData(); + Map<String, List<FieldSetEntity>> collect = data.stream() + .filter(item -> StringUtils.isEmpty(item.getString(FaceConst.FIELD_PARENT_UUID))) //杩囨护 鍙栫埗绾� +// .sorted(Comparator.comparing(item -> item.getInteger(FaceConst.CONTROL_SEQUENCE))) //鎺掑簭 + .collect(Collectors.groupingBy(item -> item.getString(FaceConst.FIELD_GROUP_UUID))); //鍒嗙粍 + Map<String, List<FieldSetEntity>> groupContainer = data.stream() + .filter(item -> !StringUtils.isEmpty(item.getString(FaceConst.FIELD_PARENT_UUID))) //杩囨护 鍙栧瓙绾� + .collect(Collectors.groupingBy(item -> item.getString(FaceConst.FIELD_PARENT_UUID))); //鍒嗙粍 + for (Map.Entry<String, List<FieldSetEntity>> entry : collect.entrySet()) { + List<FieldSetEntity> propertyList = entry.getValue(); + result.add(getPropertyJson(propertyList, groupContainer)); + } + result.sort(Comparator.comparing(item -> item.getInteger(FaceConst.CONTROL_SEQUENCE))); + return result; + } + + private static JSONObject getPropertyJson(List<FieldSetEntity> propertyList, Map<String, List<FieldSetEntity>> groupContainer) { + JSONObject property = new JSONObject(); + String propertyValue = null; + if (!CollectionUtil.isEmpty(propertyList)) { + for (FieldSetEntity fs : propertyList) { + //灞炴�х被鍨� 1 + String groupUuid = fs.getUUID(); + String propertyType = fs.getString(FaceConst.FIELD_PROPERTY_TYPE); + String propertyName = fs.getString(FaceConst.FIELD_PROPERTY_NAME); + propertyValue = fs.getString(FaceConst.FIELD_PROPERTY_VALUE); + if (StringUtils.equalsAny(propertyName, "renderKey", "formId")) { + propertyValue = fs.getString("id"); + } + if ("componentType".equals(propertyName) && "design".equals(propertyValue)) { + continue; + } + if ("layout".equals(propertyName)) { + property.put("defaultValue", null); + } + switch (propertyType) { + case "1"://瀛楃涓� + property.put(propertyName, propertyValue); + break; + case "2"://鏁扮粍 + property.put(propertyName, propertyValue.split(",")); + break; + case "3"://瀛愮骇瀵硅薄 + try { + JSONObject propertyJson = getPropertyJson(groupContainer.get(groupUuid), groupContainer); + property.put(propertyName, propertyJson); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + break; + case "4"://瀛愮骇鏁扮粍瀵硅薄 + List<FieldSetEntity> propertyListChild = groupContainer.get(groupUuid); + if (propertyListChild != null && !propertyListChild.isEmpty()) { + List<Object> array = propertyListChild.stream() + .collect(Collectors.groupingBy(item -> item.getString(FaceConst.FIELD_GROUP_UUID))) + .values().stream().map(item -> getPropertyJson(item, groupContainer)).sorted(Comparator.comparing(item -> item.getInteger(FaceConst.CONTROL_SEQUENCE))).collect(Collectors.toList()); + property.put(propertyName, new JSONArray(array)); + } + +// groupContainer.put(groupUuid, array); + break; + case "5": //boolean 绫诲瀷 + Boolean value = null; + if ("1".equals(propertyValue)) { + value = true; + } else if ("0".equals(propertyValue)) { + value = false; + } + property.put(propertyName, value); + break; + case "6":// int 绫诲瀷 + if (NumberUtil.isNumber(propertyValue)) { + property.put(propertyName, NumberUtil.parseInt(propertyValue)); + } + break; + case "7"://double 绫诲瀷 + if (NumberUtil.isDouble(propertyValue)) { + property.put(propertyName, NumberUtil.parseDouble(propertyValue)); + } + break; + } + } + } + + if (!StringUtils.isEmpty(propertyValue)) { + Object o = groupContainer.get(propertyValue); + if (o != null) { + if (o instanceof JSONArray) { + ((JSONArray) o).add(property); + } else { + ((JSONObject) o).putAll(property); + groupContainer.remove(propertyValue); + } + } + } + return property; + } + + +} -- Gitblit v1.9.2