Merge branch 'master' into develop

This commit is contained in:
RB 2022-12-12 21:44:13 +08:00
commit 18ae721894
8 changed files with 91 additions and 33 deletions

View file

@ -527,15 +527,16 @@ public class FormsBuilder extends FormsManager {
* @see com.rebuild.core.support.general.DataListWrapper#wrapFieldValue(Object, Field) * @see com.rebuild.core.support.general.DataListWrapper#wrapFieldValue(Object, Field)
*/ */
public Object wrapFieldValue(Record data, EasyField field, ID user4Desensitized) { public Object wrapFieldValue(Record data, EasyField field, ID user4Desensitized) {
final DisplayType dt = field.getDisplayType();
Object value = data.getObjectValue(field.getName()); Object value = data.getObjectValue(field.getName());
// 使用主键 // 使用主键
if (field.getDisplayType() == DisplayType.BARCODE) { if (dt == DisplayType.BARCODE) {
value = data.getPrimary(); value = data.getPrimary();
} }
// 处理日期格式 // 处理日期格式
if (field.getDisplayType() == DisplayType.REFERENCE if (dt == DisplayType.REFERENCE
&& value instanceof ID && ((ID) value).getLabelRaw() != null) { && value instanceof ID && ((ID) value).getLabelRaw() != null) {
Field nameField = field.getRawMeta().getReferenceEntity().getNameField(); Field nameField = field.getRawMeta().getReferenceEntity().getNameField();
@ -552,9 +553,21 @@ public class FormsBuilder extends FormsManager {
value = FieldValueHelper.wrapFieldValue(value, field); value = FieldValueHelper.wrapFieldValue(value, field);
if (value != null && FieldValueHelper.isUseDesensitized(field, user4Desensitized)) { if (value != null) {
if (FieldValueHelper.isUseDesensitized(field, user4Desensitized)) {
value = FieldValueHelper.desensitized(field, value); 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; return value;
} }

View file

@ -19,7 +19,7 @@ import org.apache.commons.lang.StringUtils;
* @since 2020/11/17 * @since 2020/11/17
*/ */
@Slf4j @Slf4j
public class EasyMultiSelect extends EasyField implements MixValue { public class EasyMultiSelect extends EasyField implements MixValue, MultiValue {
private static final long serialVersionUID = -1615061627351160386L; private static final long serialVersionUID = -1615061627351160386L;
protected EasyMultiSelect(Field field, DisplayType displayType) { protected EasyMultiSelect(Field field, DisplayType displayType) {
@ -73,10 +73,10 @@ public class EasyMultiSelect extends EasyField implements MixValue {
public Object unpackWrapValue(Object wrappedValue) { public Object unpackWrapValue(Object wrappedValue) {
if (wrappedValue instanceof Long) { if (wrappedValue instanceof Long) {
return StringUtils.join( return StringUtils.join(
MultiSelectManager.instance.getLabels((Long) wrappedValue, getRawMeta()), ", "); MultiSelectManager.instance.getLabels((Long) wrappedValue, getRawMeta()), MV_SPLIT);
} }
JSONObject mixValue = (JSONObject) wrappedValue; JSONObject mixValue = (JSONObject) wrappedValue;
return StringUtils.join(mixValue.getJSONArray("text"), ", "); return StringUtils.join(mixValue.getJSONArray("text"), MV_SPLIT);
} }
} }

View file

@ -26,7 +26,7 @@ import java.util.List;
* @see N2NReferenceSupport * @see N2NReferenceSupport
*/ */
@Slf4j @Slf4j
public class EasyN2NReference extends EasyReference { public class EasyN2NReference extends EasyReference implements MultiValue {
private static final long serialVersionUID = -16180408450167432L; private static final long serialVersionUID = -16180408450167432L;
protected EasyN2NReference(Field field, DisplayType displayType) { protected EasyN2NReference(Field field, DisplayType displayType) {
@ -68,7 +68,7 @@ public class EasyN2NReference extends EasyReference {
} }
List<ID> idArray = new ArrayList<>(); List<ID> 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)); if (ID.isId(id)) idArray.add(ID.valueOf(id));
} }
return idArray.toArray(new ID[0]); return idArray.toArray(new ID[0]);
@ -93,6 +93,6 @@ public class EasyN2NReference extends EasyReference {
for (Object item : arrayValue) { for (Object item : arrayValue) {
texts.add(((JSONObject) item).getString ("text")); texts.add(((JSONObject) item).getString ("text"));
} }
return StringUtils.join(texts, ", "); return StringUtils.join(texts, MV_SPLIT);
} }
} }

View file

@ -10,7 +10,7 @@ package com.rebuild.core.metadata.easymeta;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
/** /**
* 复合值转为可识别值 * 复合值
* *
* @author devezhao * @author devezhao
* @since 2020/11/17 * @since 2020/11/17

View file

@ -0,0 +1,20 @@
/*!
Copyright (c) REBUILD <https://getrebuild.com/> 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 = ", ";
}

View file

@ -22,6 +22,7 @@ import com.rebuild.core.metadata.MetadataHelper;
import com.rebuild.core.metadata.easymeta.DisplayType; import com.rebuild.core.metadata.easymeta.DisplayType;
import com.rebuild.core.metadata.easymeta.EasyField; import com.rebuild.core.metadata.easymeta.EasyField;
import com.rebuild.core.metadata.easymeta.EasyMetaFactory; 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.metadata.impl.EasyFieldConfigProps;
import com.rebuild.core.privileges.UserHelper; import com.rebuild.core.privileges.UserHelper;
import com.rebuild.core.service.approval.ApprovalState; import com.rebuild.core.service.approval.ApprovalState;
@ -274,8 +275,8 @@ public class EasyExcelGenerator extends SetUser {
for (final String fieldName : varsMap.values()) { for (final String fieldName : varsMap.values()) {
if (fieldName == null) continue; if (fieldName == null) continue;
EasyField easyField = EasyMetaFactory.valueOf( @SuppressWarnings("DataFlowIssue")
Objects.requireNonNull(MetadataHelper.getLastJoinField(entity, fieldName))); EasyField easyField = EasyMetaFactory.valueOf(MetadataHelper.getLastJoinField(entity, fieldName));
DisplayType dt = easyField.getDisplayType(); DisplayType dt = easyField.getDisplayType();
// 替换成变量名 // 替换成变量名
@ -316,14 +317,31 @@ public class EasyExcelGenerator extends SetUser {
// Keep Type // Keep Type
fieldValue = ObjectUtils.round(((BigDecimal) fieldValue).doubleValue(), scale); fieldValue = ObjectUtils.round(((BigDecimal) fieldValue).doubleValue(), scale);
} else { } else {
fieldValue = FieldValueHelper.wrapFieldValue(fieldValue, easyField, true); fieldValue = FieldValueHelper.wrapFieldValue(fieldValue, easyField, Boolean.TRUE);
} }
if (FieldValueHelper.isUseDesensitized(easyField, this.getUser())) { if (record.getEntity().getEntityCode() == EntityHelper.RobotApprovalStep && "state".equalsIgnoreCase(fieldName)) {
fieldValue = FieldValueHelper.desensitized(easyField, fieldValue);
} else if (record.getEntity().getEntityCode() == EntityHelper.RobotApprovalStep
&& "state".equalsIgnoreCase(fieldName)) {
fieldValue = Language.L(ApprovalState.valueOf(ObjectUtils.toInt(fieldValue))); 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<String> 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); data.put(varName, fieldValue);

View file

@ -13,7 +13,6 @@ import cn.devezhao.persist4j.dialect.FieldType;
import cn.devezhao.persist4j.engine.ID; import cn.devezhao.persist4j.engine.ID;
import cn.devezhao.persist4j.query.compiler.SelectItem; import cn.devezhao.persist4j.query.compiler.SelectItem;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.rebuild.core.Application; import com.rebuild.core.Application;
import com.rebuild.core.configuration.ConfigBean; import com.rebuild.core.configuration.ConfigBean;
@ -184,7 +183,7 @@ public class DataListWrapper {
Field useNameField = easyField.getRawMeta().getReferenceEntity().getNameField(); Field useNameField = easyField.getRawMeta().getReferenceEntity().getNameField();
EasyField useNameFieldEasy = EasyMetaFactory.valueOf(useNameField); EasyField useNameFieldEasy = EasyMetaFactory.valueOf(useNameField);
if (useNameFieldEasy.isDesensitized()) { if (useNameFieldEasy.isDesensitized()) {
desensitizedMixValue((JSON) value, useNameFieldEasy); FieldValueHelper.desensitizedMixValue(useNameFieldEasy, (JSON) value);
} }
} }
} }
@ -225,19 +224,6 @@ public class DataListWrapper {
return value; 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) * @see FieldValueHelper#isUseDesensitized(EasyField, ID)
*/ */

View file

@ -14,6 +14,8 @@ import cn.devezhao.persist4j.Field;
import cn.devezhao.persist4j.engine.ID; import cn.devezhao.persist4j.engine.ID;
import cn.devezhao.persist4j.engine.NullValue; import cn.devezhao.persist4j.engine.NullValue;
import cn.devezhao.persist4j.metadata.MetadataException; import cn.devezhao.persist4j.metadata.MetadataException;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.rebuild.core.Application; import com.rebuild.core.Application;
import com.rebuild.core.configuration.general.ClassificationManager; 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);
}
}
/** /**
* 是否有值 * 是否有值
* *