IP通用配置导出,只导出配置列表上展示的列,界面上的列表需要指定exportColumn,与后台注解ExcelField 的title一致

This commit is contained in:
wangxin
2018-07-13 19:58:40 +08:00
parent 3309725c9a
commit 59bf2c3dbe
11 changed files with 267 additions and 83 deletions

View File

@@ -146,7 +146,7 @@ public class BaseCfg<T> extends BaseEntity<T> implements Cloneable{
/**
* 分类
*/
@ExcelField(title="type",dictType="type")
@ExcelField(title="classification",dictType="type")
protected String classify;
/**
* 性质

View File

@@ -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<Field> list=new ArrayList<Field>();
// 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<Method> ms=new ArrayList<Method>();
// 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<Object[]>() {
public int compare(Object[] o1, Object[] o2) {
return new Integer(((ExcelField)o1[0]).sort()).compareTo(
new Integer(((ExcelField)o2[0]).sort()));
};
});
// Initialize
List<String> 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 <E> ExportExcel setDataList(Properties msgProp,List<E> 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 <E> ExportExcel setDataList(String columns,Properties msgProp,List<E> list,Map map){
if(StringUtils.isBlank(columns)) {
return setDataList(msgProp,list,map);
}else {
Map<String,Boolean> 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;
}

View File

@@ -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<BaseIpCfg> 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<BaseIpCfg> 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();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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