diff --git a/src/main/java/neatlogic/framework/form/constvalue/FormHandler.java b/src/main/java/neatlogic/framework/form/constvalue/FormHandler.java index 0db697b27c4d7706b2d5ce10d2062ae012395be2..c22825a823514e12d6ad86d0c92aa7fbd79e0f18 100644 --- a/src/main/java/neatlogic/framework/form/constvalue/FormHandler.java +++ b/src/main/java/neatlogic/framework/form/constvalue/FormHandler.java @@ -16,38 +16,38 @@ limitations under the License. package neatlogic.framework.form.constvalue; -import neatlogic.framework.util.$; -import neatlogic.framework.util.I18n; - public enum FormHandler implements IFormHandler { - FORMLABEL("formlabel", new I18n("标签")), - FORMCASCADER("formcascader", new I18n("级联下拉框")), - FORMCHECKBOX("formcheckbox", new I18n("复选框")), - FORMDATE("formdate", new I18n("日期")), - FORMDIVIDER("formdivider", new I18n("分割线")), - FORMTABLESELECTOR("formtableselector", new I18n("表格选择组件")), - FORMCKEDITOR("formckeditor", new I18n("富文本框")), - FORMLINK("formlink", new I18n("链接")), - FORMPRIORITY("formpriority", new I18n("修改优先级")), - FORMRADIO("formradio", new I18n("单选框")), - FORMSELECT("formselect", new I18n("下拉框")), - FORMTABLEINPUTER("formtableinputer", new I18n("表格输入组件")), - FORMTEXTAREA("formtextarea", new I18n("文本域")), - FORMTEXT("formtext", new I18n("文本框")), - FORMNUMBER("formnumber", new I18n("数字")), - FORMPASSWORD("formpassword", new I18n("密码")), - FORMTIME("formtime", new I18n("时间")), - FORMTREESELECT("formtreeselect", new I18n("下拉树组件")), - FORMUPLOAD("formupload", new I18n("附件上传")), - FORMUSERSELECT("formuserselect", new I18n("用户选择器")), - FORMCUBE("formcube", new I18n("矩阵选择")), - FORMRATE("formrate", new I18n("评分")), + FORMLABEL("formlabel", "标签"), + FORMCASCADER("formcascader", "级联下拉框"), + FORMCHECKBOX("formcheckbox", "复选框"), + FORMDATE("formdate", "日期"), + FORMDIVIDER("formdivider", "分割线"), + FORMTABLESELECTOR("formtableselector", "表格选择组件"), + FORMCKEDITOR("formckeditor", "富文本框"), + FORMLINK("formlink", "链接"), + FORMPRIORITY("formpriority", "修改优先级"), + FORMRADIO("formradio", "单选框"), + FORMSELECT("formselect", "下拉框"), + FORMTABLEINPUTER("formtableinputer", "表格输入组件"), + FORMTEXTAREA("formtextarea", "文本域"), + FORMTEXT("formtext", "文本框"), + FORMNUMBER("formnumber", "数字"), + FORMPASSWORD("formpassword", "密码"), + FORMTIME("formtime", "时间"), + FORMTREESELECT("formtreeselect", "下拉树组件"), + FORMUPLOAD("formupload", "附件上传"), + FORMUSERSELECT("formuserselect", "用户选择器"), + FORMCUBE("formcube", "矩阵选择"), + FORMRATE("formrate", "评分"), + FORMTAB("formtab", "选项卡"), + FORMCOLLAPSE("formcollapse", "折叠面板"), + FORMSUBASSEMBLY("formsubassembly", "子表单"), ; private final String handler; - private final I18n handlerName; + private final String handlerName; - FormHandler(String handler, I18n handlerName) { + FormHandler(String handler, String handlerName) { this.handler = handler; this.handlerName = handlerName; } @@ -59,6 +59,6 @@ public enum FormHandler implements IFormHandler { @Override public String getHandlerName() { - return $.t(handlerName.toString()); + return handlerName; } } diff --git a/src/main/java/neatlogic/framework/form/service/IFormCrossoverService.java b/src/main/java/neatlogic/framework/form/service/IFormCrossoverService.java index 7bc3d95958f0f3e9952ed7f6a06db1b6414fd2b8..be267be142eb93af84f70ef668baea13e62861a8 100644 --- a/src/main/java/neatlogic/framework/form/service/IFormCrossoverService.java +++ b/src/main/java/neatlogic/framework/form/service/IFormCrossoverService.java @@ -62,4 +62,12 @@ public interface IFormCrossoverService extends ICrossoverService { List oldFormAttributeDataList); Object getFormSelectAttributeValueByOriginalValue(Object originalValue); + + /** + * 获取表单组件类型 + * @param attributeUuid 属性唯一标识 + * @param formConfig 表单版本配置信息 + * @return + */ + String getFormAttributeHandler(String attributeUuid, String formConfig); } diff --git a/src/main/java/neatlogic/module/framework/form/attribute/handler/SubassemblyHandler.java b/src/main/java/neatlogic/module/framework/form/attribute/handler/SubassemblyHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..a5e6f780b94959ba361ebb5a45763f58be5cb549 --- /dev/null +++ b/src/main/java/neatlogic/module/framework/form/attribute/handler/SubassemblyHandler.java @@ -0,0 +1,98 @@ +package neatlogic.module.framework.form.attribute.handler; + +import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.common.constvalue.ParamType; +import neatlogic.framework.form.attribute.core.FormHandlerBase; +import neatlogic.framework.form.constvalue.FormConditionModel; +import neatlogic.framework.form.constvalue.FormHandler; +import neatlogic.framework.form.dto.AttributeDataVo; +import neatlogic.framework.form.dto.FormAttributeVo; +import neatlogic.framework.form.exception.AttributeValidException; +import org.springframework.stereotype.Component; + +@Component +public class SubassemblyHandler extends FormHandlerBase { + @Override + protected JSONObject getMyDetailedData(AttributeDataVo attributeDataVo, JSONObject configObj) { + return null; + } + + @Override + public Object valueConversionText(AttributeDataVo attributeDataVo, JSONObject configObj) { + if (!attributeDataVo.dataIsEmpty()) { + return "已更新"; + } else { + return ""; + } + } + + @Override + public Object dataTransformationForEmail(AttributeDataVo attributeDataVo, JSONObject configObj) { + return null; + } + + @Override + public Object textConversionValue(Object text, JSONObject config) { + return null; + } + + @Override + public Object dataTransformationForExcel(AttributeDataVo attributeDataVo, JSONObject configObj) { + return null; + } + + @Override + public int getExcelHeadLength(JSONObject configObj) { + return super.getExcelHeadLength(configObj); + } + + @Override + public int getExcelRowCount(AttributeDataVo attributeDataVo, JSONObject configObj) { + return super.getExcelRowCount(attributeDataVo, configObj); + } + + @Override + public String getHandler() { + return FormHandler.FORMSUBASSEMBLY.getHandler(); + } + + @Override + public String getHandlerType(FormConditionModel model) { + return null; + } + + @Override + public ParamType getParamType() { + return null; + } + + @Override + public boolean isAudit() { + return true; + } + + @Override + public boolean isConditionable() { + return false; + } + + @Override + public boolean isProcessTaskBatchSubmissionTemplateParam() { + return false; + } + + @Override + public JSONObject valid(AttributeDataVo attributeDataVo, JSONObject configObj) throws AttributeValidException { + return null; + } + + @Override + public Object conversionDataType(Object source, String attributeLabel) { + return convertToJSONArray(source, attributeLabel); + } + + @Override + public void makeupFormAttribute(FormAttributeVo formAttributeVo) { + super.makeupFormAttribute(formAttributeVo); + } +} 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 a15ae4eba5125b5fea52449db3a05cefa3f91d2c..7ee683d216ce218d89a026264baec848d1e5de44 100644 --- a/src/main/java/neatlogic/module/framework/form/service/FormService.java +++ b/src/main/java/neatlogic/module/framework/form/service/FormService.java @@ -61,4 +61,32 @@ public interface FormService { boolean isModifiedFormData(List formAttributeList, List newFormAttributeDataList, List oldFormAttributeDataList); + + /** + * 根据表单配置信息解析出表单的所有组件列表,包括子表单中的组件 + * @param formConfig + * @return + */ + List getAllFormAttributeList(JSONObject formConfig); + + /** + * 根据表单配置信息解析出表单的所有组件列表,包括子表单中的组件 + * @param formConfig + * @return + */ + List getAllFormAttributeList(String formConfig); + /** + * 获取表单组件类型 + * @param attributeUuid 属性唯一标识 + * @param formConfig 表单版本配置信息 + * @return + */ + String getFormAttributeHandler(String attributeUuid, JSONObject formConfig); + /** + * 获取表单组件类型 + * @param attributeUuid 属性唯一标识 + * @param formConfig 表单版本配置信息 + * @return + */ + String getFormAttributeHandler(String attributeUuid, String formConfig); } 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 eef966da729cf1865abd0f0e8cd0388442e9741b..29568c82bdaa8db38732285318a70e30432a0939 100644 --- a/src/main/java/neatlogic/module/framework/form/service/FormServiceImpl.java +++ b/src/main/java/neatlogic/module/framework/form/service/FormServiceImpl.java @@ -22,6 +22,7 @@ import neatlogic.framework.common.dto.ValueTextVo; import neatlogic.framework.dependency.core.DependencyManager; import neatlogic.framework.form.attribute.core.FormAttributeHandlerFactory; import neatlogic.framework.form.attribute.core.IFormAttributeHandler; +import neatlogic.framework.form.constvalue.FormHandler; import neatlogic.framework.form.dao.mapper.FormMapper; import neatlogic.framework.form.dto.AttributeDataVo; import neatlogic.framework.form.dto.FormAttributeMatrixVo; @@ -631,4 +632,123 @@ public class FormServiceImpl implements FormService, IFormCrossoverService { } return null; } + + @Override + public List getAllFormAttributeList(JSONObject formConfig) { + JSONArray tableList = formConfig.getJSONArray("tableList"); + return getAllFormAttributeList(tableList); + } + + @Override + public List getAllFormAttributeList(String formConfig) { + return getAllFormAttributeList(JSONObject.parseObject(formConfig)); + } + + @Override + public String getFormAttributeHandler(String attributeUuid, JSONObject formConfig) { + List formAttributeList = getAllFormAttributeList(formConfig); + for (FormAttributeVo formAttributeVo : formAttributeList) { + if (Objects.equals(formAttributeVo.getUuid(), attributeUuid)) { + return formAttributeVo.getHandler(); + } + } + return null; + } + + @Override + public String getFormAttributeHandler(String attributeUuid, String formConfig) { + return getFormAttributeHandler(attributeUuid, JSONObject.parseObject(formConfig)); + } + + private List getAllFormAttributeList(JSONArray tableList) { + List resultList = new ArrayList<>(); + if (CollectionUtils.isEmpty(tableList)) { + return resultList; + } + for (int i = 0; i < tableList.size(); i++) { + JSONObject cellObj = tableList.getJSONObject(i); + if (MapUtils.isEmpty(cellObj)) { + continue; + } + JSONObject componentObj = cellObj.getJSONObject("component"); + if (MapUtils.isEmpty(componentObj)) { + continue; + } + // 标签组件不能改变值,不放入组件列表里 + String handler = componentObj.getString("handler"); + if (Objects.equals(FormHandler.FORMLABEL.getHandler(), handler)) { + continue; + } + resultList.add(createFormAttribute(componentObj)); + if (Objects.equals(FormHandler.FORMTABLEINPUTER.getHandler(), handler)) { + JSONObject config = componentObj.getJSONObject("config"); + JSONArray dataConfigList = config.getJSONArray("dataConfig"); + for (int j = 0; j < dataConfigList.size(); j++) { + JSONObject dataObj = dataConfigList.getJSONObject(j); + resultList.add(createFormAttribute(dataObj)); + if (Objects.equals("formtable", dataObj.getString("handler"))) { + JSONObject config2 = dataObj.getJSONObject("config"); + JSONArray dataConfigList2 = config2.getJSONArray("dataConfig"); + for (int k = 0; k < dataConfigList2.size(); k++) { + JSONObject dataObj2 = dataConfigList2.getJSONObject(k); + resultList.add(createFormAttribute(dataObj2)); + } + } + } + } else if (Objects.equals(FormHandler.FORMTABLESELECTOR.getHandler(), handler)) { + JSONObject config = componentObj.getJSONObject("config"); + JSONArray dataConfigList = config.getJSONArray("dataConfig"); + for (int j = 0; j < dataConfigList.size(); j++) { + JSONObject dataObj = dataConfigList.getJSONObject(j); + resultList.add(createFormAttribute(dataObj)); + } + } else if (Objects.equals(FormHandler.FORMSUBASSEMBLY.getHandler(), handler)) { + JSONObject formData = componentObj.getJSONObject("formData"); + JSONObject formConfig = formData.getJSONObject("formConfig"); + JSONArray tableList2 = formConfig.getJSONArray("tableList"); + resultList.addAll(getAllFormAttributeList(tableList2)); + } else if (Objects.equals(FormHandler.FORMTAB.getHandler(), handler) || Objects.equals(FormHandler.FORMCOLLAPSE.getHandler(), handler)) { + JSONArray componentArray = componentObj.getJSONArray("component"); + if (CollectionUtils.isNotEmpty(componentArray)) { + for (int j = 0; j < componentArray.size(); j++) { + JSONObject component = componentArray.getJSONObject(j); + if (MapUtils.isNotEmpty(component)) { + FormAttributeVo formAttribute = createFormAttribute(component); + if (formAttribute != null) { + resultList.add(formAttribute); + } + } + } + } + } + } + return resultList; + } + + private FormAttributeVo createFormAttribute(JSONObject componentObj) { + String uuid = componentObj.getString("uuid"); + if (StringUtils.isBlank(uuid)) { + return null; + } + String handler = componentObj.getString("handler"); + if (StringUtils.isBlank(handler)) { + return null; + } + FormAttributeVo formAttributeVo = new FormAttributeVo(); + formAttributeVo.setUuid(uuid); + formAttributeVo.setHandler(handler); + String label = componentObj.getString("label"); + formAttributeVo.setLabel(label); + String type = componentObj.getString("type"); + formAttributeVo.setType(type); + JSONObject config = componentObj.getJSONObject("config"); + if (MapUtils.isNotEmpty(config)) { + boolean isRequired = config.getBooleanValue("isRequired"); + formAttributeVo.setRequired(isRequired); + String defaultValue = config.getString("defaultValue"); + formAttributeVo.setData(defaultValue); + formAttributeVo.setConfig(config.toJSONString()); + } + return formAttributeVo; + } }