diff --git a/src/main/java/neatlogic/framework/form/attribute/core/IFormAttributeDataConversionHandler.java b/src/main/java/neatlogic/framework/form/attribute/core/IFormAttributeDataConversionHandler.java index 736992130531788f5e6516e820d0479e90aca724..016b478217afb4e1a4d01147ace7257b2cf93013 100644 --- a/src/main/java/neatlogic/framework/form/attribute/core/IFormAttributeDataConversionHandler.java +++ b/src/main/java/neatlogic/framework/form/attribute/core/IFormAttributeDataConversionHandler.java @@ -51,6 +51,15 @@ public interface IFormAttributeDataConversionHandler { return originalValue; } + /** + * 通过简单值获取标准值,例如下拉框的简单值为a或A,返回标准值为{"value":"a", "text":"A"} + * @param simpleValue + * @return + */ + default Object getStandardValueBySimpleValue(Object simpleValue, JSONObject configObj) { + return simpleValue; + } + /** * 数据转换,用于邮件模板展示表单信息 * diff --git a/src/main/java/neatlogic/module/framework/form/attribute/handler/CheckboxHandler.java b/src/main/java/neatlogic/module/framework/form/attribute/handler/CheckboxHandler.java index d6f24f7b35097e1898011ad7994a9eb96187e006..be3a160ea1b41b7e99a3e9e30c8e9c0a0a587cf7 100644 --- a/src/main/java/neatlogic/module/framework/form/attribute/handler/CheckboxHandler.java +++ b/src/main/java/neatlogic/module/framework/form/attribute/handler/CheckboxHandler.java @@ -83,6 +83,11 @@ public class CheckboxHandler extends FormHandlerBase { return FormUtil.getFormSelectAttributeValueByOriginalValue(originalValue); } + @Override + public Object getStandardValueBySimpleValue(Object simpleValue, JSONObject configObj) { + return formService.getSelectStandardValueBySimpleValue(simpleValue, configObj); + } + @Override public Object dataTransformationForEmail(AttributeDataVo attributeDataVo, JSONObject configObj) { JSONObject resultObj = getMyDetailedData(attributeDataVo, configObj); diff --git a/src/main/java/neatlogic/module/framework/form/attribute/handler/RadioHandler.java b/src/main/java/neatlogic/module/framework/form/attribute/handler/RadioHandler.java index 3dc91b2ba8fd23d00bd28331068bd5270a103a8c..e40ea9eda896139be136d8d8a08a96077213a5c9 100644 --- a/src/main/java/neatlogic/module/framework/form/attribute/handler/RadioHandler.java +++ b/src/main/java/neatlogic/module/framework/form/attribute/handler/RadioHandler.java @@ -100,6 +100,11 @@ public class RadioHandler extends FormHandlerBase { return FormUtil.getFormSelectAttributeValueByOriginalValue(originalValue); } + @Override + public Object getStandardValueBySimpleValue(Object simpleValue, JSONObject configObj) { + return formService.getSelectStandardValueBySimpleValue(simpleValue, configObj); + } + @Override public Object dataTransformationForEmail(AttributeDataVo attributeDataVo, JSONObject configObj) { JSONObject resultObj = getMyDetailedData(attributeDataVo, configObj); diff --git a/src/main/java/neatlogic/module/framework/form/attribute/handler/SelectHandler.java b/src/main/java/neatlogic/module/framework/form/attribute/handler/SelectHandler.java index d6def83bc7c2d44b89af1462702f4104a8bad5c5..0f2e08f93cbf02e0f63aad41ae636893acc4a118 100644 --- a/src/main/java/neatlogic/module/framework/form/attribute/handler/SelectHandler.java +++ b/src/main/java/neatlogic/module/framework/form/attribute/handler/SelectHandler.java @@ -194,6 +194,11 @@ public class SelectHandler extends FormHandlerBase { return FormUtil.getFormSelectAttributeValueByOriginalValue(originalValue); } + @Override + public Object getStandardValueBySimpleValue(Object simpleValue, JSONObject configObj) { + return formService.getSelectStandardValueBySimpleValue(simpleValue, configObj); + } + @Override public Object dataTransformationForEmail(AttributeDataVo attributeDataVo, JSONObject configObj) { JSONObject resultObj = getMyDetailedData(attributeDataVo, configObj); diff --git a/src/main/java/neatlogic/module/framework/form/attribute/handler/UserSelectHandler.java b/src/main/java/neatlogic/module/framework/form/attribute/handler/UserSelectHandler.java index efd4ee5d0b471291e5bdbf3dee01b1fafd3ff3f9..e00cf6181bd081c23c88b77f1af63d876cf948fc 100644 --- a/src/main/java/neatlogic/module/framework/form/attribute/handler/UserSelectHandler.java +++ b/src/main/java/neatlogic/module/framework/form/attribute/handler/UserSelectHandler.java @@ -125,6 +125,44 @@ public class UserSelectHandler extends FormHandlerBase { // return dataObj; } + @Override + public Object getStandardValueBySimpleValue(Object dataObj, JSONObject configObj) { + boolean isMultiple = configObj.getBooleanValue("isMultiple"); + if (isMultiple) { + boolean flag = false; + for (Object data : (List) dataObj) { + String dataStr = data.toString(); + if (dataStr.contains(GroupSearch.COMMON.getValuePlugin()) + || dataStr.contains(GroupSearch.USER.getValuePlugin()) + || dataStr.contains(GroupSearch.TEAM.getValuePlugin()) + || dataStr.contains(GroupSearch.ROLE.getValuePlugin())) { + flag = true; + break; + } + } + if (flag) { + return dataObj; + } else { + return textConversionValue(dataObj, configObj); + } + + } else { + Object data = dataObj; + if (dataObj instanceof List) { + data = ((List) dataObj).get(0); + } + String dataStr = data.toString(); + if (dataStr.contains(GroupSearch.COMMON.getValuePlugin()) + || dataStr.contains(GroupSearch.USER.getValuePlugin()) + || dataStr.contains(GroupSearch.TEAM.getValuePlugin()) + || dataStr.contains(GroupSearch.ROLE.getValuePlugin())) { + return data; + } else { + return textConversionValue(data, configObj); + } + } + } + @Override public Object dataTransformationForEmail(AttributeDataVo attributeDataVo, JSONObject configObj) { JSONObject resultObj = getMyDetailedData(attributeDataVo, configObj); diff --git a/src/main/java/neatlogic/module/framework/form/service/FormService.java b/src/main/java/neatlogic/module/framework/form/service/FormService.java index 1317360c21454bbcd73d106ad498a70b3308b40a..71615c0874f345703a17551c5a02d6f2af126387 100644 --- a/src/main/java/neatlogic/module/framework/form/service/FormService.java +++ b/src/main/java/neatlogic/module/framework/form/service/FormService.java @@ -48,4 +48,12 @@ public interface FormService { * @return 组件列表 */ List getFormAttributeList(String formUuid, String formName, String tag); + + /** + * 通过简单值获取标准值,例如下拉框的简单值为a或A,返回标准值为{"value":"a", "text":"A"} + * @param simpleValue + * @param configObj + * @return + */ + Object getSelectStandardValueBySimpleValue(Object simpleValue, JSONObject configObj); } diff --git a/src/main/java/neatlogic/module/framework/form/service/FormServiceImpl.java b/src/main/java/neatlogic/module/framework/form/service/FormServiceImpl.java index cccb4829aa97167583f96d5abf2f7b1790d1d2a1..58b735476ecc308d79698eb82441b01a487077b4 100644 --- a/src/main/java/neatlogic/module/framework/form/service/FormServiceImpl.java +++ b/src/main/java/neatlogic/module/framework/form/service/FormServiceImpl.java @@ -29,10 +29,7 @@ import neatlogic.framework.matrix.core.IMatrixDataSourceHandler; import neatlogic.framework.matrix.core.MatrixDataSourceHandlerFactory; import neatlogic.framework.matrix.core.MatrixPrivateDataSourceHandlerFactory; import neatlogic.framework.matrix.dao.mapper.MatrixMapper; -import neatlogic.framework.matrix.dto.MatrixDataVo; -import neatlogic.framework.matrix.dto.MatrixDefaultValueFilterVo; -import neatlogic.framework.matrix.dto.MatrixKeywordFilterVo; -import neatlogic.framework.matrix.dto.MatrixVo; +import neatlogic.framework.matrix.dto.*; import neatlogic.framework.matrix.exception.MatrixDataSourceHandlerNotFoundException; import neatlogic.framework.matrix.exception.MatrixNotFoundException; import org.apache.commons.collections4.CollectionUtils; @@ -43,10 +40,7 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; @Service @@ -394,6 +388,127 @@ public class FormServiceImpl implements FormService, IFormCrossoverService { return null; } + private JSONObject getSelectStandardValueBySimpleValue(String matrixUuid, ValueTextVo mapping, List hiddenFieldList, String value) { + if (StringUtils.isBlank(value)) { + return null; + } + try { + MatrixVo matrixVo = MatrixPrivateDataSourceHandlerFactory.getMatrixVo(matrixUuid); + if (matrixVo == null) { + matrixVo = matrixMapper.getMatrixByUuid(matrixUuid); + if (matrixVo == null) { + throw new MatrixNotFoundException(matrixUuid); + } + } + IMatrixDataSourceHandler matrixDataSourceHandler = MatrixDataSourceHandlerFactory.getHandler(matrixVo.getType()); + if (matrixDataSourceHandler == null) { + throw new MatrixDataSourceHandlerNotFoundException(matrixVo.getType()); + } + Set notNullColumnSet = new HashSet<>(); + String valueField = (String) mapping.getValue(); + String textField = mapping.getText(); + MatrixDataVo dataVo = new MatrixDataVo(); + dataVo.setMatrixUuid(matrixUuid); + notNullColumnSet.add(valueField); + dataVo.setKeywordColumn(textField); + notNullColumnSet.add(textField); + List columnList = new ArrayList<>(); + columnList.add(valueField); + columnList.add(textField); + if (CollectionUtils.isNotEmpty(hiddenFieldList)) { + for (int i = 0; i < hiddenFieldList.size(); i++) { + String hiddenField = hiddenFieldList.get(i); + if (StringUtils.isNotBlank(hiddenField)) { + columnList.add(hiddenField); + } + } + } + dataVo.setColumnList(columnList); + dataVo.setNotNullColumnList(new ArrayList<>(notNullColumnSet)); + { + List defaultValueFilterList = new ArrayList<>(); + MatrixDefaultValueFilterVo matrixDefaultValueFilterVo = new MatrixDefaultValueFilterVo( + null, + new MatrixKeywordFilterVo(textField, SearchExpression.EQ.getExpression(), value) + ); + defaultValueFilterList.add(matrixDefaultValueFilterVo); + dataVo.setDefaultValueFilterList(defaultValueFilterList); + for (int i = 0; i < 10; i++) { + List> tbodyList = matrixDataSourceHandler.searchTableDataNew(dataVo); + for (Map tbody : tbodyList) { + JSONObject textObj = tbody.get(textField); + if (MapUtils.isEmpty(textObj)) { + continue; + } + if (Objects.equals(value, textObj.getString("text"))) { + JSONObject valueObj = tbody.get(valueField); + if (MapUtils.isEmpty(valueObj)) { + continue; + } + JSONObject resultObj = new JSONObject(); + resultObj.put("value", valueObj.getString("value")); + resultObj.put("text", textObj.getString("text")); + for (String hiddenField : hiddenFieldList) { + JSONObject hiddenFieldObj = tbody.get(hiddenField); + if (MapUtils.isNotEmpty(hiddenFieldObj)) { + String hiddenFieldValue = hiddenFieldObj.getString("value"); + resultObj.put(hiddenField, hiddenFieldValue); + } + } + return resultObj; + } + } + if (dataVo.getCurrentPage() >= dataVo.getPageCount()) { + break; + } + dataVo.setCurrentPage(dataVo.getCurrentPage() + 1); + } + } + { + List defaultValueFilterList = new ArrayList<>(); + MatrixDefaultValueFilterVo matrixDefaultValueFilterVo = new MatrixDefaultValueFilterVo( + new MatrixKeywordFilterVo(valueField, SearchExpression.EQ.getExpression(), value), + null + ); + defaultValueFilterList.add(matrixDefaultValueFilterVo); + dataVo.setDefaultValueFilterList(defaultValueFilterList); + for (int i = 0; i < 10; i++) { + List> tbodyList = matrixDataSourceHandler.searchTableDataNew(dataVo); + for (Map tbody : tbodyList) { + JSONObject valueObj = tbody.get(valueField); + if (MapUtils.isEmpty(valueObj)) { + continue; + } + if (Objects.equals(value, valueObj.getString("value"))) { + JSONObject textObj = tbody.get(textField); + if (MapUtils.isEmpty(textObj)) { + continue; + } + JSONObject resultObj = new JSONObject(); + resultObj.put("value", valueObj.getString("value")); + resultObj.put("text", textObj.getString("text")); + for (String hiddenField : hiddenFieldList) { + JSONObject hiddenFieldObj = tbody.get(hiddenField); + if (MapUtils.isNotEmpty(hiddenFieldObj)) { + String hiddenFieldValue = hiddenFieldObj.getString("value"); + resultObj.put(hiddenField, hiddenFieldValue); + } + } + return resultObj; + } + } + if (dataVo.getCurrentPage() >= dataVo.getPageCount()) { + break; + } + dataVo.setCurrentPage(dataVo.getCurrentPage() + 1); + } + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + return null; + } + @Override public List getFormAttributeList(String formUuid, String formName, String tag) { FormVersionVo formVersion = formMapper.getActionFormVersionByFormUuid(formUuid); @@ -426,4 +541,100 @@ public class FormServiceImpl implements FormService, IFormCrossoverService { resultList.addAll(formExtendAttributeList); return resultList; } + + @Override + public Object getSelectStandardValueBySimpleValue(Object dataObj, JSONObject configObj) { + JSONArray resultList = new JSONArray(); + if (Objects.equals(configObj.getString("dataSource"), "static")) { + JSONArray dataArray = configObj.getJSONArray("dataList"); + if (CollectionUtils.isNotEmpty(dataArray)) { + if (dataObj instanceof JSONArray) { + JSONArray valueArray = (JSONArray) dataObj; + if (CollectionUtils.isNotEmpty(valueArray)) { + for (Object valueObj : valueArray) { + if (valueObj instanceof JSONObject) { + JSONObject jsonObj = (JSONObject) valueObj; + if (dataArray.contains(jsonObj)) { + resultList.add(jsonObj); + } + } else { + for (int i = 0; i < dataArray.size(); i++) { + JSONObject jsonObj = dataArray.getJSONObject(i); + if (MapUtils.isNotEmpty(jsonObj)) { + if (jsonObj.containsValue(valueObj)) { + resultList.add(jsonObj); + } + } + } + } + } + } + } else if (dataObj instanceof JSONObject) { + JSONObject jsonObj = (JSONObject) dataObj; + if (dataArray.contains(jsonObj)) { + resultList.add(jsonObj); + } + } else { + for (int i = 0; i < dataArray.size(); i++) { + JSONObject jsonObj = dataArray.getJSONObject(i); + if (MapUtils.isNotEmpty(jsonObj)) { + if (jsonObj.containsValue(dataObj)) { + resultList.add(jsonObj); + } + } + } + } + } + } else { + String matrixUuid = configObj.getString("matrixUuid"); + JSONObject mappingObj = configObj.getJSONObject("mapping"); + ValueTextVo mapping = mappingObj.toJavaObject(ValueTextVo.class); + List hiddenFieldUuidList = new ArrayList<>(); + JSONArray hiddenFieldArray = configObj.getJSONArray("hiddenFieldList"); + if (CollectionUtils.isNotEmpty(hiddenFieldArray)) { + for (int i = 0; i < hiddenFieldArray.size(); i++) { + JSONObject hiddenFieldObj = hiddenFieldArray.getJSONObject(i); + if (MapUtils.isNotEmpty(hiddenFieldObj)) { + hiddenFieldUuidList.add(hiddenFieldObj.getString("uuid")); + } + } + } + if (dataObj instanceof JSONArray) { + JSONArray valueArray = (JSONArray) dataObj; + if (CollectionUtils.isNotEmpty(valueArray)) { + for (int i = 0; i < valueArray.size(); i++) { + Object obj = valueArray.get(i); + if (obj instanceof JSONObject) { + JSONObject jsonObj = (JSONObject) obj; + resultList.add(jsonObj); + } else { + String value = obj.toString(); + JSONObject jsonObj = getSelectStandardValueBySimpleValue(matrixUuid, mapping, hiddenFieldUuidList, value); + if (jsonObj != null) { + resultList.add(jsonObj); + } + } + } + } + } else if (dataObj instanceof JSONObject) { + JSONObject jsonObj = (JSONObject) dataObj; + resultList.add(jsonObj); + } else { + String value = dataObj.toString(); + JSONObject jsonObj = getSelectStandardValueBySimpleValue(matrixUuid, mapping, hiddenFieldUuidList, value); + if (jsonObj != null) { + resultList.add(jsonObj); + } + } + } + if (CollectionUtils.isNotEmpty(resultList)) { + boolean isMultiple = configObj.getBooleanValue("isMultiple"); + if (isMultiple) { + return resultList; + } else { + return resultList.get(0); + } + } + return null; + } }