diff --git a/src/main/java/com/rebuild/core/configuration/general/FormsBuilder.java b/src/main/java/com/rebuild/core/configuration/general/FormsBuilder.java index 4baddf006..6be60c8d7 100644 --- a/src/main/java/com/rebuild/core/configuration/general/FormsBuilder.java +++ b/src/main/java/com/rebuild/core/configuration/general/FormsBuilder.java @@ -527,15 +527,16 @@ public class FormsBuilder extends FormsManager { * @see com.rebuild.core.support.general.DataListWrapper#wrapFieldValue(Object, Field) */ public Object wrapFieldValue(Record data, EasyField field, ID user4Desensitized) { + final DisplayType dt = field.getDisplayType(); Object value = data.getObjectValue(field.getName()); // 使用主键 - if (field.getDisplayType() == DisplayType.BARCODE) { + if (dt == DisplayType.BARCODE) { value = data.getPrimary(); } // 处理日期格式 - if (field.getDisplayType() == DisplayType.REFERENCE + if (dt == DisplayType.REFERENCE && value instanceof ID && ((ID) value).getLabelRaw() != null) { Field nameField = field.getRawMeta().getReferenceEntity().getNameField(); @@ -552,8 +553,20 @@ public class FormsBuilder extends FormsManager { value = FieldValueHelper.wrapFieldValue(value, field); - if (value != null && FieldValueHelper.isUseDesensitized(field, user4Desensitized)) { - value = FieldValueHelper.desensitized(field, value); + if (value != null) { + if (FieldValueHelper.isUseDesensitized(field, user4Desensitized)) { + value = FieldValueHelper.desensitized(field, value); + } + // v3.1.4 + else if (dt == DisplayType.REFERENCE || dt == DisplayType.N2NREFERENCE) { + + Field nameField = field.getRawMeta().getReferenceEntity().getNameField(); + EasyField easyNameField = EasyMetaFactory.valueOf(nameField); + + if (FieldValueHelper.isUseDesensitized(easyNameField, user4Desensitized)) { + FieldValueHelper.desensitizedMixValue(easyNameField, (JSON) value); + } + } } return value; } diff --git a/src/main/java/com/rebuild/core/metadata/easymeta/EasyMultiSelect.java b/src/main/java/com/rebuild/core/metadata/easymeta/EasyMultiSelect.java index e4523a9c4..d52f115a6 100644 --- a/src/main/java/com/rebuild/core/metadata/easymeta/EasyMultiSelect.java +++ b/src/main/java/com/rebuild/core/metadata/easymeta/EasyMultiSelect.java @@ -19,7 +19,7 @@ import org.apache.commons.lang.StringUtils; * @since 2020/11/17 */ @Slf4j -public class EasyMultiSelect extends EasyField implements MixValue { +public class EasyMultiSelect extends EasyField implements MixValue, MultiValue { private static final long serialVersionUID = -1615061627351160386L; protected EasyMultiSelect(Field field, DisplayType displayType) { @@ -73,10 +73,10 @@ public class EasyMultiSelect extends EasyField implements MixValue { public Object unpackWrapValue(Object wrappedValue) { if (wrappedValue instanceof Long) { return StringUtils.join( - MultiSelectManager.instance.getLabels((Long) wrappedValue, getRawMeta()), ", "); + MultiSelectManager.instance.getLabels((Long) wrappedValue, getRawMeta()), MV_SPLIT); } JSONObject mixValue = (JSONObject) wrappedValue; - return StringUtils.join(mixValue.getJSONArray("text"), ", "); + return StringUtils.join(mixValue.getJSONArray("text"), MV_SPLIT); } } diff --git a/src/main/java/com/rebuild/core/metadata/easymeta/EasyN2NReference.java b/src/main/java/com/rebuild/core/metadata/easymeta/EasyN2NReference.java index 474fb2c6f..785c5c453 100644 --- a/src/main/java/com/rebuild/core/metadata/easymeta/EasyN2NReference.java +++ b/src/main/java/com/rebuild/core/metadata/easymeta/EasyN2NReference.java @@ -26,7 +26,7 @@ import java.util.List; * @see N2NReferenceSupport */ @Slf4j -public class EasyN2NReference extends EasyReference { +public class EasyN2NReference extends EasyReference implements MultiValue { private static final long serialVersionUID = -16180408450167432L; protected EasyN2NReference(Field field, DisplayType displayType) { @@ -68,7 +68,7 @@ public class EasyN2NReference extends EasyReference { } List idArray = new ArrayList<>(); - for (String id : valueExpr.split(",")) { + for (String id : valueExpr.split(MV_SPLIT.trim())) { if (ID.isId(id)) idArray.add(ID.valueOf(id)); } return idArray.toArray(new ID[0]); @@ -93,6 +93,6 @@ public class EasyN2NReference extends EasyReference { for (Object item : arrayValue) { texts.add(((JSONObject) item).getString ("text")); } - return StringUtils.join(texts, ", "); + return StringUtils.join(texts, MV_SPLIT); } } diff --git a/src/main/java/com/rebuild/core/metadata/easymeta/MixValue.java b/src/main/java/com/rebuild/core/metadata/easymeta/MixValue.java index e76ce219b..a56adcbe0 100644 --- a/src/main/java/com/rebuild/core/metadata/easymeta/MixValue.java +++ b/src/main/java/com/rebuild/core/metadata/easymeta/MixValue.java @@ -10,7 +10,7 @@ package com.rebuild.core.metadata.easymeta; import com.alibaba.fastjson.JSONObject; /** - * 将复合值转为可识别值 + * 复合值 * * @author devezhao * @since 2020/11/17 diff --git a/src/main/java/com/rebuild/core/metadata/easymeta/MultiValue.java b/src/main/java/com/rebuild/core/metadata/easymeta/MultiValue.java new file mode 100644 index 000000000..5aa010ce2 --- /dev/null +++ b/src/main/java/com/rebuild/core/metadata/easymeta/MultiValue.java @@ -0,0 +1,20 @@ +/*! +Copyright (c) REBUILD and/or its owners. All rights reserved. + +rebuild is dual-licensed under commercial and open source licenses (GPLv3). +See LICENSE and COMMERCIAL in the project root for license information. +*/ + +package com.rebuild.core.metadata.easymeta; + +/** + * 多个值 + * + * @author devezhao + * @since 2022/12/12 + */ +public interface MultiValue { + + String MV_SPLIT = ", "; + +} diff --git a/src/main/java/com/rebuild/core/service/datareport/EasyExcelGenerator.java b/src/main/java/com/rebuild/core/service/datareport/EasyExcelGenerator.java index 87af8878c..60f386a51 100644 --- a/src/main/java/com/rebuild/core/service/datareport/EasyExcelGenerator.java +++ b/src/main/java/com/rebuild/core/service/datareport/EasyExcelGenerator.java @@ -22,6 +22,7 @@ import com.rebuild.core.metadata.MetadataHelper; import com.rebuild.core.metadata.easymeta.DisplayType; import com.rebuild.core.metadata.easymeta.EasyField; import com.rebuild.core.metadata.easymeta.EasyMetaFactory; +import com.rebuild.core.metadata.easymeta.MultiValue; import com.rebuild.core.metadata.impl.EasyFieldConfigProps; import com.rebuild.core.privileges.UserHelper; import com.rebuild.core.service.approval.ApprovalState; @@ -274,8 +275,8 @@ public class EasyExcelGenerator extends SetUser { for (final String fieldName : varsMap.values()) { if (fieldName == null) continue; - EasyField easyField = EasyMetaFactory.valueOf( - Objects.requireNonNull(MetadataHelper.getLastJoinField(entity, fieldName))); + @SuppressWarnings("DataFlowIssue") + EasyField easyField = EasyMetaFactory.valueOf(MetadataHelper.getLastJoinField(entity, fieldName)); DisplayType dt = easyField.getDisplayType(); // 替换成变量名 @@ -316,14 +317,31 @@ public class EasyExcelGenerator extends SetUser { // Keep Type fieldValue = ObjectUtils.round(((BigDecimal) fieldValue).doubleValue(), scale); } else { - fieldValue = FieldValueHelper.wrapFieldValue(fieldValue, easyField, true); + fieldValue = FieldValueHelper.wrapFieldValue(fieldValue, easyField, Boolean.TRUE); } - if (FieldValueHelper.isUseDesensitized(easyField, this.getUser())) { - fieldValue = FieldValueHelper.desensitized(easyField, fieldValue); - } else if (record.getEntity().getEntityCode() == EntityHelper.RobotApprovalStep - && "state".equalsIgnoreCase(fieldName)) { + if (record.getEntity().getEntityCode() == EntityHelper.RobotApprovalStep && "state".equalsIgnoreCase(fieldName)) { fieldValue = Language.L(ApprovalState.valueOf(ObjectUtils.toInt(fieldValue))); + } else if (FieldValueHelper.isUseDesensitized(easyField, this.getUser())) { + fieldValue = FieldValueHelper.desensitized(easyField, fieldValue); + } + // v3.1.4 + else if (dt == DisplayType.REFERENCE || dt == DisplayType.N2NREFERENCE) { + + Field refNameField = easyField.getRawMeta().getReferenceEntity().getNameField(); + EasyField easyNameField = EasyMetaFactory.valueOf(refNameField); + + if (FieldValueHelper.isUseDesensitized(easyNameField, this.getUser())) { + if (dt == DisplayType.N2NREFERENCE) { + List fieldValueList = new ArrayList<>(); + for (String s : fieldValue.toString().split(MultiValue.MV_SPLIT)) { + fieldValueList.add((String) FieldValueHelper.desensitized(easyNameField, s)); + } + fieldValue = StringUtils.join(fieldValueList, MultiValue.MV_SPLIT); + } else { + fieldValue = FieldValueHelper.desensitized(easyNameField, fieldValue); + } + } } } data.put(varName, fieldValue); diff --git a/src/main/java/com/rebuild/core/support/general/DataListWrapper.java b/src/main/java/com/rebuild/core/support/general/DataListWrapper.java index 1a386657f..06cc65075 100644 --- a/src/main/java/com/rebuild/core/support/general/DataListWrapper.java +++ b/src/main/java/com/rebuild/core/support/general/DataListWrapper.java @@ -13,7 +13,6 @@ import cn.devezhao.persist4j.dialect.FieldType; import cn.devezhao.persist4j.engine.ID; import cn.devezhao.persist4j.query.compiler.SelectItem; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.rebuild.core.Application; import com.rebuild.core.configuration.ConfigBean; @@ -184,7 +183,7 @@ public class DataListWrapper { Field useNameField = easyField.getRawMeta().getReferenceEntity().getNameField(); EasyField useNameFieldEasy = EasyMetaFactory.valueOf(useNameField); if (useNameFieldEasy.isDesensitized()) { - desensitizedMixValue((JSON) value, useNameFieldEasy); + FieldValueHelper.desensitizedMixValue(useNameFieldEasy, (JSON) value); } } } @@ -225,19 +224,6 @@ public class DataListWrapper { return value; } - private void desensitizedMixValue(JSON value, EasyField easyField) { - if (value instanceof JSONObject) { - String text = ((JSONObject) value).getString("text"); - if (text != null) { - ((JSONObject) value).put("text", FieldValueHelper.desensitized(easyField, text)); - } - } - // N2N - else if (value instanceof JSONArray) { - for (Object o : (JSONArray) value) desensitizedMixValue((JSON) o, easyField); - } - } - /** * @see FieldValueHelper#isUseDesensitized(EasyField, ID) */ diff --git a/src/main/java/com/rebuild/core/support/general/FieldValueHelper.java b/src/main/java/com/rebuild/core/support/general/FieldValueHelper.java index ce7ae526f..4eb83cd66 100644 --- a/src/main/java/com/rebuild/core/support/general/FieldValueHelper.java +++ b/src/main/java/com/rebuild/core/support/general/FieldValueHelper.java @@ -14,6 +14,8 @@ import cn.devezhao.persist4j.Field; import cn.devezhao.persist4j.engine.ID; import cn.devezhao.persist4j.engine.NullValue; import cn.devezhao.persist4j.metadata.MetadataException; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.rebuild.core.Application; import com.rebuild.core.configuration.general.ClassificationManager; @@ -313,6 +315,25 @@ public class FieldValueHelper { } } + /** + * 字段值脱敏:复合值 + * + * @param easyField + * @param mixValue + */ + public static void desensitizedMixValue(EasyField easyField, JSON mixValue) { + if (mixValue instanceof JSONObject) { + String text = ((JSONObject) mixValue).getString("text"); + if (text != null) { + ((JSONObject) mixValue).put("text", FieldValueHelper.desensitized(easyField, text)); + } + } + // N2N + else if (mixValue instanceof JSONArray) { + for (Object o : (JSONArray) mixValue) desensitizedMixValue(easyField, (JSON) o); + } + } + /** * 是否有值 *