package com.norteksoft.mms.form.web; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.springframework.beans.factory.annotation.Autowired; import com.norteksoft.bs.signature.entity.Signature; import com.norteksoft.bs.signature.service.SignatureManager; import com.norteksoft.mms.base.data.DataHandle; import com.norteksoft.mms.form.entity.DataTable; import com.norteksoft.mms.form.entity.FormControl; import com.norteksoft.mms.form.entity.FormView; import com.norteksoft.mms.form.entity.ListView; import com.norteksoft.mms.form.entity.TableColumn; import com.norteksoft.mms.form.enumeration.ControlType; import com.norteksoft.mms.form.enumeration.DataType; import com.norteksoft.mms.form.service.DataTableManager; import com.norteksoft.mms.form.service.FormViewManager; import com.norteksoft.mms.form.service.ImportFormViewManager; import com.norteksoft.mms.form.service.ListViewManager; import com.norteksoft.mms.form.service.TableColumnManager; import com.norteksoft.mms.module.entity.Menu; import com.norteksoft.mms.module.service.MenuManager; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.JsTreeUtils; import com.norteksoft.product.util.PageUtils; import com.norteksoft.product.util.PropUtils; import com.norteksoft.product.util.ZipUtils; import com.norteksoft.product.util.freemarker.TagUtil; import com.norteksoft.product.util.zip.ZipFile; import com.norteksoft.product.web.struts2.CrudActionSupport; import com.norteksoft.product.web.struts2.Struts2Utils; @Namespace("/form") @ParentPackage("default") public class FormViewAction extends CrudActionSupport<FormView> { private static final long serialVersionUID = 1L; private static final String INFO_TYPE_SHOW="show"; private static final String INFO_TYPE_SAVE="save"; private static final String OCCASION_UPDATE="update"; private static final String OCCASION_CHANGE_SOURCE="changeSource"; private static final String SUCCESS_MESSAGE_LEFT = "<font class=\"onSuccess\"><nobr>"; private static final String MESSAGE_RIGHT = "</nobr></font>"; private static final String ERROR_MESSAGE_LEFT = "<font class=\"onError\"><nobr>"; protected void addErrorMessage(String message){ this.addActionMessage(ERROR_MESSAGE_LEFT+message+MESSAGE_RIGHT); } protected void addSuccessMessage(String message){ this.addActionMessage(SUCCESS_MESSAGE_LEFT+message+MESSAGE_RIGHT); } private Long formId; private String code;//formView编号 private Integer version;//formView版本 private FormView formView; private Page<FormView> page = new Page<FormView>(0,true); private Long menuId; private Long dataTableId; private DataTable table; private List<DataTable> dataTables; private List<DataTable> defaultsTables; private FormViewManager formViewManager; private DataTableManager dataTableManager; private Long signId; @Autowired private TableColumnManager tableColumnManager; @Autowired private SignatureManager signatureManager; private List<Long> formViewIds; private String editorId;//编辑器id private Long tableColumnId;//数据表字段id private TableColumn tableColumn; private FormControl formControl;//表单控件 private String occasion;//区别:改变数据来源或修改属性时 private String[][] selectList; private String formHtml; private List<DataTable> dataTableList; private String formControlType; private String formControlId; private String referenceControlValue; private String formTypeId;//标准或自定义表单的Id private String soleCode;//验证编号的唯一 private List<Long> formViewDeleteIds;//删除表单视图的Id private List<String[]> urgencyList=new ArrayList<String[]>(); private List<String[]> properties; //数据选择控件/字段集合 private List<String[]> dataSelectFields=new ArrayList<String[]>();//数据选择控件/表格信息 private Page<Object> datas =new Page<Object>(0,true); private boolean existTable; private String states; private String infoType;//部门人员控件/显示信息和保存信息 private String validateSetting;//校验设置 private String treeType;//部门人员控件中的树的类型 private String multiple;//部门人员控件中的是否是多选树 private String resultId;//部门人员控件中的用于显示信息的组件id private String hiddenResultId;//部门人员控件中的隐藏域的name属性值 private String inputType;//部门人员控件中的"输入框类型"(input/textArea) private MenuManager menuManager; private ListViewManager listViewManager;// private DataHandle dataHandle; private boolean standard; private Long listViewId;//“标准列表控件”中选中的列表 private String listViewCode;//“标准列表控件”中选中的列表 private List<ListView> listViews;//列表视图集合 private File file; private String fileName; String dataBase;//数据库类型:oracle、mysql、sqlserver private String operation;//是更新版本还是增加版本。 private String tableName;//数据表名称,数据选择、数据获取控件有用到 private List<TableColumn> columns; private String htmlResult;//html结果 @Autowired private ImportFormViewManager importFormViewManager; @Autowired public void setMenuManager(MenuManager menuManager) { this.menuManager = menuManager; } @Autowired public void setFormViewManager(FormViewManager formViewManager) { this.formViewManager = formViewManager; } @Autowired public void setDataTableManager(DataTableManager dataTableManager) { this.dataTableManager = dataTableManager; } @Autowired public void setListViewManager(ListViewManager listViewManager) { this.listViewManager = listViewManager; } @Autowired public void setDataHandle(DataHandle dataHandle) { this.dataHandle = dataHandle; } @Override @Action("form-view-delete") public String delete() throws Exception { for(Long fvId:formViewDeleteIds){ formViewManager.deleteFormView(fvId); } ApiFactory.getBussinessLogService().log("表单管理", "删除表单", ContextUtils.getSystemId("mms")); this.addSuccessMessage("删除成功"); return list(); } @Override public String input() throws Exception { //dataTables = dataTableManager.getEnabledDataTables(); return INPUT; } @Override @Action("list-data") public String list() throws Exception { List<Menu> menus = menuManager.getEnabledRootMenuByCompany(); if(menuId==null&&menus.size()>0){ menuId = menus.get(0).getId(); } if(menuId!=null){ if(page.getPageSize()>1){ formViewManager.getFormViewPageByMenu(page, menuId); ApiFactory.getBussinessLogService().log("表单管理", "表单列表", ContextUtils.getSystemId("mms")); this.renderText(PageUtils.pageToJson(page)); return null; } } return "list-data"; } @Override public String save() throws Exception { try { ApiFactory.getBussinessLogService().log("表单管理", "保存表单", ContextUtils.getSystemId("mms")); String result = formViewManager.validatHtml(htmlResult); if(result.equals("ok")){ formViewManager.saveFormView(formView,menuId,operation,htmlResult); this.renderText("id:"+formView.getId().toString()); }else{ this.renderText("ms:"+result); } } catch (Exception e) { this.renderText("ms:"+e.getMessage()); } return null; } public void prepareText() throws Exception { // formControl = new FormControl(); if(StringUtils.isNotEmpty(code)&&version!=null){ formView = formViewManager.getFormViewByCodeAndVersion(ContextUtils.getCompanyId(),code,version); standard=formView.getStandard(); if(standard){ table = formView.getDataTable(); columns=tableColumnManager.getTableColumnByDataTableId(table.getId()); } } if(formControl==null){ formControl = new FormControl(); }else{ if(StringUtils.isNotEmpty(formControl.getName())&&standard){ tableColumn =tableColumnManager.getTableColumnByColName(table.getId(), formControl.getName()); if(tableColumn!=null) tableColumnId=tableColumn.getId(); } } } private void setCommonValue(){ tableColumn = dataTableManager.getTableColumn(tableColumnId); formControl.setControlId(tableColumn.getName()); if(table!=null)formControl.setTableName(table.getName()); formControl.setName(tableColumn.getName()); formControl.setDbName(tableColumn.getDbColumnName()); formControl.setTitle(dataTableManager.getInternation(tableColumn.getAlias())); if(tableColumn.getMaxLength()==null||tableColumn.getMaxLength().equals(0)){ if(tableColumn.getDataType()==DataType.TEXT){ formControl.setMaxLength(255); }else if(tableColumn.getDataType()==DataType.DOUBLE||tableColumn.getDataType()==DataType.FLOAT||tableColumn.getDataType()==DataType.AMOUNT){ formControl.setMaxLength(25); }else if(tableColumn.getDataType()==DataType.INTEGER||tableColumn.getDataType()==DataType.NUMBER){ formControl.setMaxLength(10); }else if(tableColumn.getDataType()==DataType.LONG){ formControl.setMaxLength(19); }else if(tableColumn.getDataType()==DataType.BOOLEAN){ formControl.setMaxLength(1); }else if(tableColumn.getDataType()==DataType.BLOB||tableColumn.getDataType()==DataType.CLOB||tableColumn.getDataType()==DataType.COLLECTION||tableColumn.getDataType()==DataType.ENUM||tableColumn.getDataType()==DataType.REFERENCE||tableColumn.getDataType()==DataType.TIME){ formControl.setMaxLength(null); } }else{ formControl.setMaxLength(tableColumn.getMaxLength()); } formControl.setDataType(tableColumn.getDataType()); if(StringUtils.isNotEmpty(tableColumn.getDefaultValue())){ formControl.setControlValue(tableColumn.getDefaultValue()); } } /** * 转向单行文本的设置页面 * @return * @throws Exception */ public String text() throws Exception { String result = "text"; dataBase=PropUtils.getDataBase(); //计算控件中的计算公式字段里含有符号+时从js中提交到后台为空,所以在js中把符号+替换成了符号@,在此在把@替换回+ if(StringUtils.isNotEmpty(formControl.getComputational())&&formControl.getComputational().contains("@")){ formControl.setComputational(formControl.getComputational().replaceAll("@", "+")); } switch (formControl.getControlType()) { case SELECT_MAN_DEPT: // if(StringUtils.isNotEmpty(formControl.getSaveDeptControlValue())){ // tableColumn = dataTableManager.getTableColumn(formControl.getSaveDeptControlValue()); // Long tableId=tableColumn.getDataTableId(); // table = dataTableManager.getDataTable(tableId); // columns=tableColumnManager.getTableColumnByDataTableId(tableId); // } if(OCCASION_CHANGE_SOURCE.equals(occasion)){ if(INFO_TYPE_SHOW.equals(infoType)){ if(StringUtils.isNotEmpty(formControl.getShowDeptControlValue())){ tableColumn =tableColumnManager.getTableColumnByColName(table.getId(), formControl.getShowDeptControlValue()); if(tableColumn!=null) formControl.setShowDeptControlId(tableColumn.getName()); } }else if(INFO_TYPE_SAVE.equals(infoType)){ if(StringUtils.isNotEmpty(formControl.getSaveDeptControlValue())){ tableColumn =tableColumnManager.getTableColumnByColName(table.getId(), formControl.getSaveDeptControlValue()); if(tableColumn!=null) formControl.setSaveDeptControlId(tableColumn.getName()); } } } result= "selectManOrDept"; break; case CALCULATE_COMPONENT: if(OCCASION_CHANGE_SOURCE.equals(occasion)){ if(tableColumnId!=null&&tableColumnId.intValue()!=0){ setCommonValue(); } } result= "calculateComponent"; break; case PULLDOWNMENU: if(OCCASION_CHANGE_SOURCE.equals(occasion)){ if(tableColumnId!=null&&tableColumnId.intValue()!=0){ setCommonValue(); } } String selectValues=formControl.getSelectValues(); if(selectValues!=null){ String[] vals=selectValues.split(","); selectList=new String[vals.length][2]; for(int i=0;i<vals.length;i++){ if(vals[i].contains(";")){ selectList[i]=vals[i].split(";"); } } } result= "pullDownMenu"; break; case DATA_SELECTION: dataTableList=dataTableManager.getAllEnabledDataTables(); if(formControl.getDataSrc()!=null){ table = dataTableManager.getDataTableByTableName(formControl.getDataSrc()); if(table!=null) columns=tableColumnManager.getTableColumnByDataTableId(table.getId()); } if(formControl.getDataFields()!=null)dataSelectFields.add(formControl.getDataFields().split(",")); if(formControl.getDataFieldNames()!=null) dataSelectFields.add(formControl.getDataFieldNames().split(",")); if(formControl.getDataControlIds()!=null)dataSelectFields.add(formControl.getDataControlIds().split(",")); if(formControl.getDataQuerys()!=null){ String[] querys=formControl.getDataQuerys().split(","); String[] myQuerys=new String[querys.length]; for(int i=0;i<querys.length;i++){ if(querys[i].equals("0")){ myQuerys[i]="否"; }else{ myQuerys[i]="是"; } } dataSelectFields.add(myQuerys); } result= "dataSelection"; break; case DATA_ACQUISITION: dataTableList=dataTableManager.getAllEnabledDataTables(); if(formControl.getDataSrc()!=null){ table = dataTableManager.getDataTableByTableName(formControl.getDataSrc()); if(table!=null) columns=tableColumnManager.getTableColumnByDataTableId(table.getId()); } if(formControl.getDataFields()!=null)dataSelectFields.add(formControl.getDataFields().split(",")); if(formControl.getDataFieldNames()!=null) dataSelectFields.add(formControl.getDataFieldNames().split(",")); if(formControl.getDataControlIds()!=null)dataSelectFields.add(formControl.getDataControlIds().split(",")); result= "dataAcquisition"; break; case URGENCY: if(formControl.getUrgencyValues()!=null)urgencyList.add(formControl.getUrgencyValues().split(",")); if(formControl.getUrgencyDescribes()!=null) urgencyList.add(formControl.getUrgencyDescribes().split(",")); result= "urgency"; break; case CREATE_SPECIAL_TASK: if(tableColumnId!=null&&tableColumnId.intValue()!=0){ if(OCCASION_CHANGE_SOURCE.equals(occasion)){ tableColumn = dataTableManager.getTableColumn(tableColumnId); formControl.setControlId(tableColumn.getName()); formControl.setName(tableColumn.getName()); formControl.setDbName(tableColumn.getDbColumnName()); formControl.setTitle(dataTableManager.getInternation(tableColumn.getAlias())); } } result= "specialTask"; break; case SPECIAL_TASK_TRANSACTOR: result= "specialTaskTransactor"; break; case TEXTAREA: if(tableColumnId!=null&&tableColumnId.intValue()!=0){ if(OCCASION_CHANGE_SOURCE.equals(occasion)){ setCommonValue(); } } result = "textArea"; break; case TIME: if(tableColumnId!=null&&tableColumnId.intValue()!=0){ if(OCCASION_CHANGE_SOURCE.equals(occasion)){ setCommonValue(); } } result = "time"; break; case LIST_CONTROL: // lcTitles,lcSums,lcSizes,lcCals,dataFields dataTableList=dataTableManager.getAllEnabledDataTables(); if(formControl.getDataSrc()!=null){ table = dataTableManager.getDataTableByTableName(formControl.getDataSrc()); if(table!=null) columns=tableColumnManager.getTableColumnByDataTableId(table.getId()); } if(formControl.getDataFields()!=null){ dataSelectFields.add(formControl.getDataFields().split(",")); } if(formControl.getLcTitles()!=null){ dataSelectFields.add(formControl.getLcTitles().split(",")); } if(formControl.getLcSums()!=null){ dataSelectFields.add(formControl.getLcSums().split(",")); } if(formControl.getLcSizes()!=null){ dataSelectFields.add(formControl.getLcSizes().split(",")); } if(formControl.getLcCals()!=null){ dataSelectFields.add(formControl.getLcCals().split(",")); } result = "listControl"; break; case STANDARD_LIST_CONTROL: if(formView!=null){ listViews=listViewManager.getListViewsBySystem(formView.getMenuId()); } if(OCCASION_CHANGE_SOURCE.equals(occasion)){ if(tableColumnId!=null&&tableColumnId.intValue()!=0){ tableColumn = dataTableManager.getTableColumn(tableColumnId); formControl.setControlId(tableColumn.getName()); formControl.setName(tableColumn.getName()); formControl.setDbName(tableColumn.getDbColumnName()); formControl.setTitle(dataTableManager.getInternation(tableColumn.getAlias())); formControl.setDataType(tableColumn.getDataType()); } } result = "standardListControl"; break; case BUTTON: result = "button"; break; case LABEL: result = "label"; break; default: if(OCCASION_CHANGE_SOURCE.equals(occasion)){ if(tableColumnId!=null&&tableColumnId.intValue()!=0){ setCommonValue(); } } break; } return result; } public String validateFormControl() throws Exception{ return null; } /** * 显示表单属性窗口 * @return * @throws Exception */ public String getTabelColumns() throws Exception { StringBuffer str = new StringBuffer(); if(ControlType.LIST_CONTROL.toString().equals(formControlType)){ str.append("<option value=\"\">请选择字段</option>"); }else if(ControlType.DATA_SELECTION.toString().equals(formControlType) ||ControlType.DATA_ACQUISITION.toString().equals(formControlType)){ str.append("<option value=\"\">请选择字段</option>"); } if(StringUtils.isNotEmpty(tableName)){ table=dataTableManager.getDataTableByTableName(tableName); // table=dataTableManager.getDataTable(dataTableId); if(table!=null){ List<TableColumn> columns=tableColumnManager.getTableColumnByDataTableId(table.getId()); if(columns!=null && !columns.isEmpty()){ for (TableColumn field : columns) { if("listControl".equals(formControlType)){ str.append("<option value=\""+field.getDbColumnName()+":"+field.getDataType()+"\">"+dataTableManager.getInternation(field.getAlias())+"</option>"); }else{ if(field.getDbColumnName().contains("dt_")){ str.append("<option value=\""+field.getDbColumnName()+"\">"+dataTableManager.getInternation(field.getAlias())+"</option>"); } } } } } } this.renderText(str.toString()); return null; } /** * 数据选择控件/显示 * @return * @throws Exception */ public String showDataSelection() throws Exception { if(version==0){ version=1; } formView=formViewManager.getFormViewByCodeAndVersion(ContextUtils.getCompanyId(),code,version); properties=formViewManager.getDataProperties(formView.getHtml(), formControlId); Map<String, String[]> parameterMap=Struts2Utils.getRequest().getParameterMap(); if(datas.getPageSize()>1){ datas = formViewManager.getDataExcutionSql(datas,formView.getHtml(), formControlId,parameterMap,properties); StringBuilder json = new StringBuilder(); json.append("{\"page\":\""); json.append(datas.getPageNo()); json.append("\",\"total\":"); json.append(datas.getTotalPages()); json.append(",\"records\":\""); json.append(datas.getTotalCount()); json.append("\",\"rows\":"); json.append("["); for(Object obj:datas.getResult()){ StringBuilder sb=new StringBuilder(); sb.append("{"); int i=0; Object val=null; for(String[] strs:properties){ if(properties.size()==1){ val=obj; }else{ val=((Object[])obj)[i]; } if(val==null){ val=" "; } sb.append("\"") .append(strs[0]) .append("\"") .append(":") .append("\""); if(val!=null){ sb.append(val.toString().replaceAll("\"", "_@_#")); }else{ sb.append(val); } sb.append("\"") .append(","); i++; } //去掉最后一个逗号 if(sb.charAt(sb.length()-1)==','){ sb.delete(sb.length()-1, sb.length()); } sb.append("}"); json.append(sb); json.append(","); } //去掉最后一个逗号 if(json.charAt(json.length()-1)==','){ json.delete(json.length()-1, json.length()); } json.append("]"); json.append("}"); this.renderText(PageUtils.disposeSpecialCharacter(json.toString())); return null; } StringBuilder colNames=new StringBuilder();//数据选择控件中列表jqgrid中的colNames StringBuilder colModel=new StringBuilder();//数据选择控件中列表jqgrid中的colModel colNames.append("["); colModel.append("["); for(String[] strs:properties){ colModel.append("{name:'").append(strs[0]).append("',") .append("index:'").append(strs[0]).append("'}").append(","); colNames.append("'").append(strs[1]).append("'").append(","); } //去掉最后一个逗号 if(colModel.charAt(colModel.length()-1)==','){ colModel.append("{name:'act',index:'act',width:30,align:'center',formatter:function addAct(){return \"<a href='#' class='small-button-bg' onclick='addValue(this);'><span class='ui-icon ui-icon-plusthick'></span></a>\"}}"); } //去掉最后一个逗号 if(colNames.charAt(colNames.length()-1)==','){ colNames.append("'操作'"); } colModel.append("]"); colNames.append("]"); DataTable dataTable=formViewManager.getDataSource(formView.getHtml(), formControlId); if(StringUtils.isNotEmpty(dataTable.getEntityName())){ existTable=true; }else{ existTable=false; } String resourceCtx=PropUtils.getProp("host.resources"); String ctx=PropUtils.getProp("host.app"); Map<String, Object> root=new HashMap<String, Object>(); root.put("colNames", colNames); root.put("colModel", colModel); root.put("resourcesCtx", resourceCtx); root.put("ctx", ctx); root.put("pageName", "datas"); root.put("code", code); root.put("version", version); root.put("formControlId", formControlId); root.put("properties", properties); root.put("theme", ContextUtils.getTheme()); if(parameterMap!=null){ StringBuilder urlParam=new StringBuilder(); String[] value = null; for(String[] strs:properties){ value=parameterMap.get(strs[0]); if(value!=null&&value.length>0&&StringUtils.isNotEmpty(value[0])){ urlParam.append("&").append(strs[0]).append("=").append(value[0]); } } root.put("urlParam", urlParam); } String html = TagUtil.getContent(root, "show-data-selection-tag.ftl"); //将信息内容输出到JSP页面 HttpServletResponse response = Struts2Utils.getResponse(); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.print(html); return null; } /** * 数据选择控件/显示 * @return * @throws Exception */ public String getData() throws Exception { formView=formViewManager.getFormViewByCodeAndVersion(ContextUtils.getCompanyId(),code,version); this.renderText(formViewManager.getDataAcquisitionResult(formView.getHtml(), formControlId, referenceControlValue)); return null; } /** * (人员部门控件)显示树 * @return * @throws Exception */ public String createTree() throws Exception { return "create-tree"; } public void prepareChoiceColumn() throws Exception { table = dataTableManager.getDataTable(dataTableId); } /** * 转向选择数据列的页面 * @return * @throws Exception */ public String choiceColumn() throws Exception { return "choiceColumn"; } /** * 显示表单管理树 * @return * @throws Exception */ public String formTree() throws Exception{ List<Menu> menus = menuManager.getRootMenuByCompany(); java.util.Collections.sort(menus); StringBuilder tree = new StringBuilder("[ "); for(Menu menu :menus){ tree.append(JsTreeUtils.generateJsTreeNode(menu.getId().toString(), "root", menu.getName())).append(","); } JsTreeUtils.removeLastComma(tree); tree.append(" ]"); renderText(tree.toString()); return null; } public String childDefaultForm(){ StringBuilder tree = new StringBuilder(); List<DataTable> tables=dataTableManager.getDefaultDataTables(); for(DataTable dt:tables){ tree.append(JsTreeUtils.generateJsTreeNode(dt.getId().toString(), "leaf", dataTableManager.getInternation(dt.getAlias()))).append(","); } return tree.toString(); } @Override protected void prepareModel() throws Exception { if(formId==null){ formView = new FormView(); }else{ formView = formViewManager.getFormView(formId); } if(dataTableId!=null){ table = dataTableManager.getDataTable(dataTableId); formView.setDataTable(table); } } public String copy() throws Exception{ formView = formViewManager.getFormView(formId); return "copy"; } public void prepareSavecopy() throws Exception{ formView = new FormView(); } @Action("form-view-savecopy") public String savecopy() throws Exception{ formViewManager.savecopy(formId, menuId, formView); return "list-data"; } /** * 改变表单的状态(草稿->启用;启用->禁用;禁用->启用) * * @return * @throws Exception */ @Action("form-view-state") public String changeFormState()throws Exception{ String mssge = formViewManager.changeFormState(formViewIds, menuId); addSuccessMessage(mssge); return list(); } public FormView getModel() { return formView; } public void prepareNext() throws Exception { this.prepareModel(); } public String next() throws Exception{ //dataTables = dataTableManager.getEnabledDataTables(); if(formId!=null&&formId!=0){ formView = formViewManager.getFormView(formId); } return "editor"; } public void preparePreview() throws Exception { this.prepareModel(); } public String preview() throws Exception { validateSetting = formViewManager.getValidateSetting(formView); if(formView!=null)formHtml=formViewManager.getFormHtml(formView,formView.getHtml()); return "preview"; } /** * 验证编号的唯一 * @return * @throws Exception */ public String validateFormCode() throws Exception { this.renderText(formViewManager.isFormCodeExist(soleCode,null).toString()); return null; } /** * 导出表单 * @return * @throws Exception */ @Action("export-form-view") public String exportFormView() throws Exception{ HttpServletResponse response = Struts2Utils.getResponse(); response.reset(); response.setCharacterEncoding("utf-8"); response.setContentType("application/x-download"); response.addHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode("export-form.zip","utf-8")); String name="form-view"; String path="basic-data"; File folder = new File(path); if(!folder.exists()){ folder.mkdirs(); } File file = new File(path+"/"+name+".xls"); OutputStream out=new FileOutputStream(file); dataHandle.exportFormView(out,formViewIds,menuId); OutputStream fileOut=response.getOutputStream(); ZipUtils.zipFolder(path, fileOut); if(fileOut!=null)fileOut.close(); FileUtils.deleteDirectory(new File(path));//删除文件夹 return null; } @Action("show-import-form-view") public String showImportDataTable() throws Exception{ return "show-import-form-view"; } /** * 导入数据表及字段信息 * @return * @throws Exception */ @Action("import-form-view") public String importDataTable() throws Exception{ String result = ""; if(fileName==null || !fileName.endsWith(".zip")){ result="请选择zip文件格式"; } boolean success = true; try { String importRootPath="basic-data-temp"; ZipFile zipFile = new ZipFile(file); ZipUtils.unZipFileByOpache(zipFile, importRootPath); importFormView(importRootPath); FileUtils.deleteDirectory(new File(importRootPath)); } catch (Exception e) { success = false; } if(success){ result="导入成功"; }else{ result="导入失败,请检查zip文件格式"; } renderText(result); return null; } private void importFormView(String importRootPath) { File f=new File(importRootPath+"/form-view.xls"); if(f.exists()){ dataHandle.importFormView(f, ContextUtils.getCompanyId()); } //读取表单内容 File dir=new File(importRootPath+"/formview"); if(dir.exists()){ File[]files=dir.listFiles(); for(int i=0;i<files.length;i++){ File filei=files[i]; String fileName=filei.getName().split("\\.")[0]; String formCode=fileName.substring(0,fileName.lastIndexOf("#")); String formVersion=fileName.substring(fileName.lastIndexOf("#")+1); FormView formview=formViewManager.getCurrentFormViewByCodeAndVersion(formCode, Integer.parseInt(formVersion)); try { String html=FileUtils.readFileToString(filei, "UTF-8"); if(StringUtils.isNotEmpty(html.toString())){ formview.setHtml(html.toString()); } formViewManager.save(formview); } catch (Exception e) { e.printStackTrace(); } } } } /** * 显示图片 * @return * @throws Exception */ @Action("form-view-showPic") public String showPic() throws Exception{ if(signId!=null){ Signature signature=signatureManager.getSignatureById(signId); String uploadPath = PropUtils.getProp("application.properties","upload.file.path"); if(StringUtils.isEmpty(uploadPath)){ uploadPath = PropUtils.getProp("applicationContent.properties","upload.file.path"); } String path=uploadPath+"/"+"Signature"+signature.getPictureSrc(); File file=new File(path); if(file.exists())PropUtils.showPic(file); } return null; } public Long getFormId() { return formId; } public void setFormId(Long formId) { this.formId = formId; } public Page<FormView> getPage() { return page; } public void setPage(Page<FormView> page) { this.page = page; } public List<DataTable> getDataTables() { return dataTables; } public void setDataTableId(Long dataTableId) { this.dataTableId = dataTableId; } public void setFormViewIds(List<Long> formViewIds) { this.formViewIds = formViewIds; } public Long getDataTableId() { return dataTableId; } public String getEditorId() { return editorId; } public void setEditorId(String editorId) { this.editorId = editorId; } public TableColumn getTableColumn() { return tableColumn; } public Long getTableColumnId() { return tableColumnId; } public void setTableColumnId(Long tableColumnId) { this.tableColumnId = tableColumnId; } public FormControl getFormControl() { return formControl; } public void setFormControl(FormControl formControl) { this.formControl = formControl; } public DataTable getTable() { return table; } public String getValidateSetting() { return validateSetting; } public void setInfoType(String infoType) { this.infoType = infoType; } public void setOccasion(String occasion) { this.occasion = occasion; } public String[][] getSelectList() { return selectList; } public String getFormHtml() { return formHtml; } public List<DataTable> getDataTableList() { return dataTableList; } public void setFormControlType(String formControlType) { this.formControlType = formControlType; } public void setFormControlId(String formControlId) { this.formControlId = formControlId; } public String getFormControlId() { return formControlId; } public List<String[]> getProperties() { return properties; } public Page<Object> getDatas() { return datas; } public boolean isExistTable() { return existTable; } public List<String[]> getDataSelectFields() { return dataSelectFields; } public void setReferenceControlValue(String referenceControlValue) { this.referenceControlValue = referenceControlValue; } public List<String[]> getUrgencyList() { return urgencyList; } public String getTreeType() { return treeType; } public void setTreeType(String treeType) { this.treeType = treeType; } public String getMultiple() { return multiple; } public void setMultiple(String multiple) { this.multiple = multiple; } public String getResultId() { return resultId; } public void setResultId(String resultId) { this.resultId = resultId; } public String getHiddenResultId() { return hiddenResultId; } public void setHiddenResultId(String hiddenResultId) { this.hiddenResultId = hiddenResultId; } public String getInputType() { return inputType; } public void setInputType(String inputType) { this.inputType = inputType; } public String getFormTypeId() { return formTypeId; } public void setFormTypeId(String formTypeId) { this.formTypeId = formTypeId; } public List<DataTable> getDefaultsTables() { return defaultsTables; } public void setDefaultsTables(List<DataTable> defaultsTables) { this.defaultsTables = defaultsTables; } public Long getMenuId() { return menuId; } public void setMenuId(Long menuId) { this.menuId = menuId; } public FormView getFormView() { return formView; } public void setFormView(FormView formView) { this.formView = formView; } public String getStates() { return states; } public void setStates(String states) { this.states = states; } public boolean isStandard() { return standard; } public void setStandard(boolean standard) { this.standard = standard; } public String getSoleCode() { return soleCode; } public void setSoleCode(String soleCode) { this.soleCode = soleCode; } public List<Long> getFormViewDeleteIds() { return formViewDeleteIds; } public void setFormViewDeleteIds(List<Long> formViewDeleteIds) { this.formViewDeleteIds = formViewDeleteIds; } public Long getListViewId() { return listViewId; } public void setListViewId(Long listViewId) { this.listViewId = listViewId; } public List<ListView> getListViews() { return listViews; } public void setFile(File file) { this.file = file; } public void setFileFileName(String fileName) { this.fileName = fileName; } public void setOperation(String operation) { this.operation = operation; } public List<TableColumn> getColumns() { return columns; } public void setTableName(String tableName) { this.tableName = tableName; } public void setHtmlResult(String htmlResult) { this.htmlResult = htmlResult; } public String getListViewCode() { return listViewCode; } public void setListViewCode(String listViewCode) { this.listViewCode = listViewCode; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; } public Long getSignId() { return signId; } public void setSignId(Long signId) { this.signId = signId; } public String getDataBase() { return dataBase; } public void setDataBase(String dataBase) { this.dataBase = dataBase; } }