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)
*/
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;
}

View file

@ -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);
}
}

View file

@ -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<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));
}
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);
}
}

View file

@ -10,7 +10,7 @@ package com.rebuild.core.metadata.easymeta;
import com.alibaba.fastjson.JSONObject;
/**
* 复合值转为可识别值
* 复合值
*
* @author devezhao
* @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.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<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);

View file

@ -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)
*/

View file

@ -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);
}
}
/**
* 是否有值
*