diff --git a/src/main/java/com/nis/domain/configuration/BaseCfg.java b/src/main/java/com/nis/domain/configuration/BaseCfg.java index 120600485..02472d9f0 100644 --- a/src/main/java/com/nis/domain/configuration/BaseCfg.java +++ b/src/main/java/com/nis/domain/configuration/BaseCfg.java @@ -146,7 +146,7 @@ public class BaseCfg extends BaseEntity implements Cloneable{ /** * 分类 */ - @ExcelField(title="type",dictType="type") + @ExcelField(title="classification",dictType="type") protected String classify; /** * 性质 diff --git a/src/main/java/com/nis/util/excel/ExportExcel.java b/src/main/java/com/nis/util/excel/ExportExcel.java index c5aee6389..5c7106446 100644 --- a/src/main/java/com/nis/util/excel/ExportExcel.java +++ b/src/main/java/com/nis/util/excel/ExportExcel.java @@ -297,6 +297,113 @@ public class ExportExcel { } initialize(title, headerList); } + /** + * 构造函数 + * @param msgProp 国际化配置 + * @param title 表格标题,传“空值”,表示无标题 + * @param cls 实体对象,通过annotation.ExportField获取标题 + * @param type 导出类型(1:导出数据;2:导出模板) + * @param groups 导入分组 + */ + public ExportExcel(String columns,Properties msgProp,String title, Class cls, int type, int... groups){ + String[] cloumnArray=columns.split(","); + List list=new ArrayList(); + // Get annotation field + //递归获取cls实体对象及父级对象的属性 + getFields(list, cls); + + if(!StringUtil.isEmpty(list)){ + for (Field f : list){ + ExcelField ef = f.getAnnotation(ExcelField.class); + boolean export=false; + for(String column:cloumnArray) { + if(ef!=null&&column.equals(ef.title())) { + export=true; + break; + } + } + if(export) { + if (ef != null && (ef.type()==0 || ef.type()==type)){ + if (groups!=null && groups.length>0){ + boolean inGroup = false; + for (int g : groups){ + if (inGroup){ + break; + } + for (int efg : ef.groups()){ + if (g == efg){ + inGroup = true; + annotationList.add(new Object[]{ef, f}); + break; + } + } + } + }else{ + annotationList.add(new Object[]{ef, f}); + } + } + } + } + } + List ms=new ArrayList(); + // Get annotation method + //递归获取cls实体对象及父级对象的属性 + getMethods(ms, cls); + if(!StringUtil.isEmpty(ms)){ + for (Method m : ms){ + ExcelField ef = m.getAnnotation(ExcelField.class); + boolean export=false; + for(String column:cloumnArray) { + if(ef!=null&&column.equals(ef.title())) { + export=true; + break; + } + } + if(export) { + if (ef != null && (ef.type()==0 || ef.type()==type)){ + if (groups!=null && groups.length>0){ + boolean inGroup = false; + for (int g : groups){ + if (inGroup){ + break; + } + for (int efg : ef.groups()){ + if (g == efg){ + inGroup = true; + annotationList.add(new Object[]{ef, m}); + break; + } + } + } + }else{ + annotationList.add(new Object[]{ef, m}); + } + } + } + } + } + // Field sorting + Collections.sort(annotationList, new Comparator() { + public int compare(Object[] o1, Object[] o2) { + return new Integer(((ExcelField)o1[0]).sort()).compareTo( + new Integer(((ExcelField)o2[0]).sort())); + }; + }); + // Initialize + List headerList = Lists.newArrayList(); + for (Object[] os : annotationList){ + String t = ((ExcelField)os[0]).title(); + // 如果是导出,则去掉注释 + if (type==1){ + String[] ss = StringUtils.split(t, "**", 2); + if (ss.length==2){ + t = ss[0]; + } + } + headerList.add(msgProp.getProperty(t)==null?t:msgProp.getProperty(t)); + } + initialize(title, headerList); + } /** * 构造函数 * @param title 表格标题,传“空值”,表示无标题 @@ -497,48 +604,116 @@ public class ExportExcel { * @return list 数据列表 */ public ExportExcel setDataList(Properties msgProp,List list,Map map){ - for (E e : list){ - int colunm = 0; - Row row = this.addRow(); - StringBuilder sb = new StringBuilder(); + for (E e : list){ + int colunm = 0; + Row row = this.addRow(); + StringBuilder sb = new StringBuilder(); + for (Object[] os : annotationList){ + ExcelField ef = (ExcelField)os[0]; + Object val = null; + // Get entity value + try{ + if (StringUtils.isNotBlank(ef.value())){ + val = Reflections.invokeGetter(e, ef.value()); + }else{ + if (os[1] instanceof Field){ + val = Reflections.invokeGetter(e, ((Field)os[1]).getName()); + }else if (os[1] instanceof Method){ + val = Reflections.invokeMethod(e, ((Method)os[1]).getName(), new Class[] {}, new Object[] {}); + } + } + // If is dict, get dict label + if (StringUtils.isNotBlank(ef.dictType())){ + String valStr=val==null?"":val.toString(); + if("type".equals(ef.dictType()) || "attribute".equals(ef.dictType()) + || "label".equals(ef.dictType())){ + // Get basic info + val = getBasicInfo(ef.dictType(),map,valStr); + }else{ + //字典数据已做国际化处理 + String dict=DictUtils.getDictLabel(ef.dictType(), valStr, ""); + //如果找不到字典国际化值,把字典本身作为默认值放进去,不然导出就是空了 + val = msgProp.getProperty(dict,dict); + } + + } + }catch(Exception ex) { + // Failure to ignore + log.error("Get entity value failed",ex); + val = ""; + } + this.addCell(row, colunm++, val, ef.align(), ef.fieldType()); + sb.append(val + ", "); + } + log.debug("Write success: ["+row.getRowNum()+"] "+sb.toString()); + } + return this; + } + /** + * 添加数据(通过annotation.ExportField添加数据) + * @return list 数据列表 + */ + public ExportExcel setDataList(String columns,Properties msgProp,List list,Map map){ + if(StringUtils.isBlank(columns)) { + return setDataList(msgProp,list,map); + }else { + Map exportMap=new HashMap<>(); + String[] columnArray=columns.split(","); for (Object[] os : annotationList){ ExcelField ef = (ExcelField)os[0]; - Object val = null; - // Get entity value - try{ - if (StringUtils.isNotBlank(ef.value())){ - val = Reflections.invokeGetter(e, ef.value()); - }else{ - if (os[1] instanceof Field){ - val = Reflections.invokeGetter(e, ((Field)os[1]).getName()); - }else if (os[1] instanceof Method){ - val = Reflections.invokeMethod(e, ((Method)os[1]).getName(), new Class[] {}, new Object[] {}); - } + for(String column:columnArray) { + if(column.equals(ef.title())) { + exportMap.put(column, true); + break; } - // If is dict, get dict label - if (StringUtils.isNotBlank(ef.dictType())){ - String valStr=val==null?"":val.toString(); - if("type".equals(ef.dictType()) || "attribute".equals(ef.dictType()) - || "label".equals(ef.dictType())){ - // Get basic info - val = getBasicInfo(ef.dictType(),map,valStr); - }else{ - //字典数据已做国际化处理 - String dict=DictUtils.getDictLabel(ef.dictType(), valStr, ""); - //如果找不到字典国际化值,把字典本身作为默认值放进去,不然导出就是空了 - val = msgProp.getProperty(dict,dict); - } - - } - }catch(Exception ex) { - // Failure to ignore - log.error("Get entity value failed",ex); - val = ""; } - this.addCell(row, colunm++, val, ef.align(), ef.fieldType()); - sb.append(val + ", "); } - log.debug("Write success: ["+row.getRowNum()+"] "+sb.toString()); + for (E e : list){ + int colunm = 0; + Row row = this.addRow(); + StringBuilder sb = new StringBuilder(); + for (Object[] os : annotationList){ + ExcelField ef = (ExcelField)os[0]; + if(exportMap.containsKey(ef.title())) { + Object val = null; + // Get entity value + try{ + + if (StringUtils.isNotBlank(ef.value())){ + val = Reflections.invokeGetter(e, ef.value()); + }else{ + if (os[1] instanceof Field){ + val = Reflections.invokeGetter(e, ((Field)os[1]).getName()); + }else if (os[1] instanceof Method){ + val = Reflections.invokeMethod(e, ((Method)os[1]).getName(), new Class[] {}, new Object[] {}); + } + } + // If is dict, get dict label + if (StringUtils.isNotBlank(ef.dictType())){ + String valStr=val==null?"":val.toString(); + if("type".equals(ef.dictType()) || "attribute".equals(ef.dictType()) + || "label".equals(ef.dictType())){ + // Get basic info + val = getBasicInfo(ef.dictType(),map,valStr); + }else{ + //字典数据已做国际化处理 + String dict=DictUtils.getDictLabel(ef.dictType(), valStr, ""); + //如果找不到字典国际化值,把字典本身作为默认值放进去,不然导出就是空了 + val = msgProp.getProperty(dict,dict); + } + + } + }catch(Exception ex) { + // Failure to ignore + log.error("Get entity value failed",ex); + val = ""; + } + this.addCell(row, colunm++, val, ef.align(), ef.fieldType()); + sb.append(val + ", "); + } + } + log.debug("Write success: ["+row.getRowNum()+"] "+sb.toString()); + } } return this; } diff --git a/src/main/java/com/nis/web/controller/configuration/CommonController.java b/src/main/java/com/nis/web/controller/configuration/CommonController.java index 9e2402ab6..06dc10a59 100644 --- a/src/main/java/com/nis/web/controller/configuration/CommonController.java +++ b/src/main/java/com/nis/web/controller/configuration/CommonController.java @@ -245,7 +245,7 @@ public class CommonController extends BaseController { this.importCfgTemplate(request, response, redirectAttributes, functionId, cfgRegionCode); } //ip配置导出 - public void _exportIp(Model model,HttpServletRequest request,HttpServletResponse response, + public void _exportIp(String columns,Model model,HttpServletRequest request,HttpServletResponse response, IpPortCfg entity,String ids,RedirectAttributes redirectAttributes){ try { //获取国际化配置 @@ -267,7 +267,7 @@ public class CommonController extends BaseController { Long.parseLong(id); } List list=ipCfgService.getListByCfgIdWithName(IpPortCfg.getTablename(), entity.getFunctionId(), ids); - new ExportExcel(msgProp,null, IpPortCfg.class,1).setDataList(msgProp,list,map).write(response, fileName).dispose(); + new ExportExcel(columns,msgProp,null, IpPortCfg.class,1).setDataList(columns,msgProp,list,map).write(response, fileName).dispose(); }else{ //条件导出数据大于最大导出数,只导出最大导出条数 entity.setTableName(IpPortCfg.getTablename()); @@ -280,7 +280,7 @@ public class CommonController extends BaseController { pageInfo.setPageSize(-1); } Page page = ipCfgService.findPage(pageInfo, entity); - new ExportExcel(msgProp,null, IpPortCfg.class,1).setDataList(msgProp,page.getList(),map).write(response, fileName).dispose(); + new ExportExcel(columns,msgProp,null, IpPortCfg.class,1).setDataList(columns,msgProp,page.getList(),map).write(response, fileName).dispose(); } } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/com/nis/web/controller/configuration/manipulation/IpMultiplexController.java b/src/main/java/com/nis/web/controller/configuration/manipulation/IpMultiplexController.java index b741a93b2..8054fb080 100644 --- a/src/main/java/com/nis/web/controller/configuration/manipulation/IpMultiplexController.java +++ b/src/main/java/com/nis/web/controller/configuration/manipulation/IpMultiplexController.java @@ -106,8 +106,8 @@ public class IpMultiplexController extends CommonController { } //ip配置导出 @RequestMapping(value = "export") - public void exportIp(Model model,HttpServletRequest request,HttpServletResponse response, + public void exportIp(String columns,Model model,HttpServletRequest request,HttpServletResponse response, @ModelAttribute("cfg")IpPortCfg entity,String ids,RedirectAttributes redirectAttributes){ - this._exportIp(model, request, response, entity, ids, redirectAttributes); + this._exportIp(columns,model, request, response, entity, ids, redirectAttributes); } } diff --git a/src/main/java/com/nis/web/controller/configuration/manipulation/RatelimitController.java b/src/main/java/com/nis/web/controller/configuration/manipulation/RatelimitController.java index f6ea0548a..85cf7d925 100644 --- a/src/main/java/com/nis/web/controller/configuration/manipulation/RatelimitController.java +++ b/src/main/java/com/nis/web/controller/configuration/manipulation/RatelimitController.java @@ -126,8 +126,8 @@ public class RatelimitController extends CommonController { } //ip配置导出 @RequestMapping(value = "/ip/export") - public void exportIp(Model model,HttpServletRequest request,HttpServletResponse response, + public void exportIp(String columns,Model model,HttpServletRequest request,HttpServletResponse response, @ModelAttribute("cfg")IpPortCfg entity,String ids,RedirectAttributes redirectAttributes){ - this._exportIp(model, request, response, entity, ids, redirectAttributes); + this._exportIp(columns,model, request, response, entity, ids, redirectAttributes); } } diff --git a/src/main/java/com/nis/web/controller/configuration/ntc/IpController.java b/src/main/java/com/nis/web/controller/configuration/ntc/IpController.java index 6e969da78..b1d9e3a0d 100644 --- a/src/main/java/com/nis/web/controller/configuration/ntc/IpController.java +++ b/src/main/java/com/nis/web/controller/configuration/ntc/IpController.java @@ -79,8 +79,8 @@ public class IpController extends CommonController{ } //ip配置导出 @RequestMapping(value = "export") - public void exportIp(Model model,HttpServletRequest request,HttpServletResponse response, + public void exportIp(String columns,Model model,HttpServletRequest request,HttpServletResponse response, @ModelAttribute("cfg")IpPortCfg entity,String ids,RedirectAttributes redirectAttributes){ - this._exportIp(model, request, response, entity, ids, redirectAttributes); + this._exportIp(columns,model, request, response, entity, ids, redirectAttributes); } } diff --git a/src/main/java/com/nis/web/controller/configuration/ntc/WhiteListController.java b/src/main/java/com/nis/web/controller/configuration/ntc/WhiteListController.java index 632d65432..4db8d050a 100644 --- a/src/main/java/com/nis/web/controller/configuration/ntc/WhiteListController.java +++ b/src/main/java/com/nis/web/controller/configuration/ntc/WhiteListController.java @@ -233,8 +233,8 @@ public class WhiteListController extends CommonController{ } //ip配置导出 @RequestMapping(value = "ip/export") - public void exportIp(Model model,HttpServletRequest request,HttpServletResponse response, + public void exportIp(String columns,Model model,HttpServletRequest request,HttpServletResponse response, @ModelAttribute("cfg")IpPortCfg entity,String ids,RedirectAttributes redirectAttributes){ - this._exportIp(model, request, response, entity, ids, redirectAttributes); + this._exportIp(columns,model, request, response, entity, ids, redirectAttributes); } } diff --git a/src/main/java/com/nis/web/controller/configuration/proxy/ControlController.java b/src/main/java/com/nis/web/controller/configuration/proxy/ControlController.java index 8db0ea9b0..5ad5837db 100644 --- a/src/main/java/com/nis/web/controller/configuration/proxy/ControlController.java +++ b/src/main/java/com/nis/web/controller/configuration/proxy/ControlController.java @@ -126,8 +126,8 @@ public class ControlController extends CommonController { } //ip配置导出 @RequestMapping(value = "/ip/export") - public void exportIp(Model model,HttpServletRequest request,HttpServletResponse response, + public void exportIp(String columns,Model model,HttpServletRequest request,HttpServletResponse response, @ModelAttribute("cfg")IpPortCfg entity,String ids,RedirectAttributes redirectAttributes){ - this._exportIp(model, request, response, entity, ids, redirectAttributes); + this._exportIp(columns,model, request, response, entity, ids, redirectAttributes); } } diff --git a/src/main/java/com/nis/web/controller/configuration/proxy/InterceptController.java b/src/main/java/com/nis/web/controller/configuration/proxy/InterceptController.java index 2789aeccc..fc5b47648 100644 --- a/src/main/java/com/nis/web/controller/configuration/proxy/InterceptController.java +++ b/src/main/java/com/nis/web/controller/configuration/proxy/InterceptController.java @@ -116,8 +116,8 @@ public class InterceptController extends CommonController{ } //ip配置导出 @RequestMapping(value = "/ip/export") - public void exportIp(Model model,HttpServletRequest request,HttpServletResponse response, + public void exportIp(String columns,Model model,HttpServletRequest request,HttpServletResponse response, @ModelAttribute("cfg")IpPortCfg entity,String ids,RedirectAttributes redirectAttributes){ - this._exportIp(model, request, response, entity, ids, redirectAttributes); + this._exportIp(columns,model, request, response, entity, ids, redirectAttributes); } } diff --git a/src/main/webapp/WEB-INF/tags/sys/delRow.tag b/src/main/webapp/WEB-INF/tags/sys/delRow.tag index 50a19af98..c2d8b2fb6 100644 --- a/src/main/webapp/WEB-INF/tags/sys/delRow.tag +++ b/src/main/webapp/WEB-INF/tags/sys/delRow.tag @@ -214,6 +214,15 @@ var checkboxes=$("#${id} ${value} tbody tr td input.i-checks:checkbox"); } //删除 function exportData(url,maxRow){ + var column=[]; + $("#${id} ${value} thead tr th").each(function(){ + if($(this).attr("exportColumn")){ + column.push($(this).attr("exportColumn")); + } + }); + if(column){ + url+="&columns="+column.toString(); + } var checkboxes=$("#${id} ${value} tbody tr td input.i-checks:checkbox"); //导出选中数据 if($(checkboxes).filter(":checked").length>0){ diff --git a/src/main/webapp/WEB-INF/views/cfg/common/ipList.jsp b/src/main/webapp/WEB-INF/views/cfg/common/ipList.jsp index ecc037e64..5f2f5ae99 100644 --- a/src/main/webapp/WEB-INF/views/cfg/common/ipList.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/common/ipList.jsp @@ -277,46 +277,46 @@ <%-- --%> - - IP + + - - - - + + + + - - + + - - - - + + + + - - + + - + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + <%-- --%>