diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java index e2d1303..533c771 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.core.api.iservice.busi.ISysLogSystemService; import cn.estsh.i3plus.core.apiservice.util.ExcelUtil; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; @@ -168,7 +169,7 @@ public class SysLogSystemController extends CoreBaseController{ // 保证系统文件表中 String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; SysDictionary dictionary = sysDictionaryService.getSysDictionaryByParentCodeAndCode( - CommonConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); + BaseConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); SysFile sysFile = new SysFile(); sysFile.setDfsGroupName(fileAbsolutePath[0]); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java index 9c39549..0f3b102 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.core.apiservice.util.ExcelUtil; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; @@ -236,7 +237,7 @@ public class SysOrderNoRuleController extends CoreBaseController { // 保证系统文件表中 String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; SysDictionary dictionary = sysDictionaryService.getSysDictionaryByParentCodeAndCode( - CommonConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); + BaseConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); SysFile sysFile = new SysFile(); sysFile.setDfsGroupName(fileAbsolutePath[0]); @@ -293,7 +294,7 @@ public class SysOrderNoRuleController extends CoreBaseController { // 保证系统文件表中 String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; SysDictionary dictionary = sysDictionaryService.getSysDictionaryByParentCodeAndCode( - CommonConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); + BaseConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); SysFile sysFile = new SysFile(); sysFile.setDfsGroupName(fileAbsolutePath[0]); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java index 2a5a0b9..8700410 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java @@ -1,11 +1,11 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; -import cn.estsh.i3plus.core.api.iservice.busi.ISysDepartmentService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysPositionService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService; +import cn.estsh.i3plus.core.api.iservice.busi.*; +import cn.estsh.i3plus.core.apiservice.util.ExcelUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -17,6 +17,8 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSFile; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; @@ -53,6 +55,18 @@ public class SysUserInfoController extends CoreBaseController{ @Autowired private ISysPositionService sysPositionService; + @Autowired + private ISysDictionaryService sysDictionaryService; + + @Autowired + private ISysConfigService sysConfigService; + + @Autowired + private ISysFileService sysFileService; + + @Autowired + private FastDFSClient dfsClient; + @PostMapping(value="/insert") @ApiOperation(value="添加用户信息",notes="返回内容添加用户信息") public ResultBean insertSysUserInfo(SysUserInfo userInfo){ @@ -334,4 +348,63 @@ public class SysUserInfoController extends CoreBaseController{ LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); } } + + + @GetMapping(value = "/export") + @ApiOperation(value = "导出用户信息") + public ResultBean exportSysOrderNoRule(SysUserInfo sysUserInfo, String[] colName){ + try { + Pager pager = new Pager(); + pager.setCurrentPage(1); + pager.setPageSize(Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_EXPORT_MAX_ROW).getConfigValue())); + ListPager listPager; + String[] fileAbsolutePath; + List result = new ArrayList(); + do { + listPager = sysUserInfoService.querySysUserInfo(sysUserInfo, pager); + pager = listPager.getObjectPager(); + + // 上传至文件服务器 + FastDFSFile fastDFSFile = new FastDFSFile(SysOrderNoRule.class.getSimpleName() + pager.getCurrentPage() + ".xls", + ExcelUtil.exportData(listPager.getObjectList(),SysOrderNoRule.class,colName),"xls"); + + fileAbsolutePath = dfsClient.upload(fastDFSFile); + + // 保证系统文件表中 + String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; + SysDictionary dictionary = sysDictionaryService.getSysDictionaryByParentCodeAndCode( + BaseConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); + + SysFile sysFile = new SysFile(); + sysFile.setDfsGroupName(fileAbsolutePath[0]); + sysFile.setDfsFileName(fileAbsolutePath[1]); + sysFile.setFileSize(fastDFSFile.getContent().length); + sysFile.setFilePath(filePath); + sysFile.setFileOriginalName(fastDFSFile.getName()); + sysFile.setFileTypeId(dictionary.getId()); + sysFile.setFileTypeName(dictionary.getName()); + sysFile.setDownloadNum(0); + result.add(sysFileService.insertSysFile(sysFile)); + + pager.setCurrentPage(pager.getCurrentPage() + 1); + } while (pager.getCurrentPage() <= pager.getTotalPages()); + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/get-col") + @ApiOperation(value = "获取用户可导出字段") + public ResultBean getSysOrderNoRuleColName(){ + try { + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultMap(ExcelUtil.getColName(SysOrderNoRule.class)); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java index ab9639b..6d6d0ea 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; @@ -153,7 +154,7 @@ public class SysDictionaryService implements ISysDictionaryService { @Override @ApiOperation(value = "检出文件名称是否符合系统规范") public boolean checkFileName(String fileName) { - List list = findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_FILE_TYPE); + List list = findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_FILE_TYPE); if(list != null && list.size()> 0){ String suffix = StringTool.getStringFileSuffix(fileName,true); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java index 532433f..a1bd351 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java @@ -1,14 +1,17 @@ package cn.estsh.i3plus.core.apiservice.util; import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.platform.common.tool.ReflexTool; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.platform.bean.SysTool; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; import io.swagger.annotations.ApiParam; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -22,10 +25,12 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.persistence.EntityManager; import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.sql.Ref; import java.util.*; /** @@ -49,6 +54,14 @@ public class ExcelUtil { ExcelUtil.sysConfigService = sysConfigService; } + private static EntityManager entityManager; + + @Autowired + public void setEntityManager(EntityManager entityManager) { + ExcelUtil.entityManager = entityManager; + } + + /** * 导出 * @@ -74,45 +87,61 @@ public class ExcelUtil { HSSFRow tableHeader = sheet.createRow(0); // 类数据 - Field[] declaredFields = exportClass.getDeclaredFields(); Field[] fields = new Field[exportCol.length]; + String colName; + + // 获取字段中文名 优先使用 OutputColumn.name for (int i = 0; i < exportCol.length; i++) { - for (Field field : declaredFields) { - if (field.getName().equals(exportCol[i])) { - fields[i] = field; + fields[i] = exportClass.getDeclaredField(exportCol[i]); + colName = null; - if (field.isAnnotationPresent(ApiParam.class)) { - ApiParam fieldAnno = field.getAnnotation(ApiParam.class); - tableHeader.createCell(i, CellType.STRING).setCellValue(fieldAnno.value()); - } - } + if (fields[i].isAnnotationPresent(AnnoOutputColumn.class)) { + colName = fields[i].getAnnotation(AnnoOutputColumn.class).name(); + } + + if (fields[i].isAnnotationPresent(ApiParam.class) && StringUtils.isBlank(colName)) { + colName = fields[i].getAnnotation(ApiParam.class).value(); } + tableHeader.createCell(i, CellType.STRING).setCellValue(colName); } //加载数据至excel对象 HSSFRow hssfRow; Method method; + AnnoOutputColumn outputColumn; + Object CellValue; + for (int i = 0; i < data.size(); i++) { hssfRow = sheet.createRow(i + 1); for (int j = 0; j < fields.length; j++) { - method = exportClass.getDeclaredMethod("get" + StringTool.toUpperCaseFirstOne(fields[j].getName())); - hssfRow.createCell(j, CellType.STRING).setCellValue( - String.valueOf(method.invoke(data.get(i))) - ); + CellValue = exportClass.getDeclaredMethod("get" + StringTool.toUpperCaseFirstOne(fields[j].getName())).invoke(data.get(i)); + + // 判断是否存在引用关系 + if (fields[j].isAnnotationPresent(AnnoOutputColumn.class)) { + outputColumn = fields[j].getAnnotation(AnnoOutputColumn.class); + + // 判断是否为枚举字段 + if (outputColumn.refClass().isEnum()) { + method = outputColumn.refClass().getDeclaredMethod( + outputColumn.refForeignKey() + "Of" + StringTool.toUpperCaseFirstOne(outputColumn.value()), + outputColumn.refClass().getDeclaredMethod("get" + + StringTool.toUpperCaseFirstOne(outputColumn.refForeignKey())).getReturnType()); + CellValue = method.invoke(data.get(i), CellValue); + } else { + selectByProperty(outputColumn.refClass(), outputColumn.value(), outputColumn.refForeignKey(), CellValue); + } + } + + hssfRow.createCell(j, CellType.STRING).setCellValue(String.valueOf(CellValue)); } } workbook.write(fos); fos.flush(); return file2Byte(excelFile); - } catch (NoSuchMethodException e) { - LOGGER.error("属性get方法不存在!", e); - } catch (IllegalAccessException e) { - LOGGER.error("Excel 导出异常!", e); - } catch (InvocationTargetException e) { - LOGGER.error("Excel 导出异常!", e); - } catch (IOException e) { + } catch (Exception e) { + e.printStackTrace(); throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.IO_EXCEPTION_FILE.getCode()) @@ -127,7 +156,6 @@ public class ExcelUtil { LOGGER.error("IOException!", e); } } - return null; } /** @@ -196,9 +224,9 @@ public class ExcelUtil { obj = importClass.newInstance(); for (int j = 0; j < fields.length; j++) { row.getCell(j).setCellType(CellType.STRING); - if("".equals(row.getCell(j).getStringCellValue())){ + if ("".equals(row.getCell(j).getStringCellValue())) { cellValue = null; - }else if (fields[j].getType() == String.class) { + } else if (fields[j].getType() == String.class) { cellValue = row.getCell(j).getStringCellValue(); } else if (fields[j].getType() == Integer.class) { cellValue = Integer.parseInt(row.getCell(j).getStringCellValue()); @@ -333,6 +361,21 @@ public class ExcelUtil { return colName; } + /** + * @param persistentClass + * @param colName + * @param propertyName + * @param value + * @return + */ + public static Object selectByProperty(Class persistentClass, String colName, String propertyName, Object value) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + String queryString = "select model." + colName + " from " + persistentClass.getSimpleName() + + " as model where model." + propertyName + "= :" + propertyName; + Object result = entityManager.createQuery(queryString).setParameter(propertyName, value).getSingleResult(); + + return persistentClass.getDeclaredMethod("get" + StringTool.toUpperCaseFirstOne(colName)).invoke(result); + } + public static void main(String[] args) { List sysTools = new ArrayList<>(); SysTool sysTool = new SysTool();