导入导出Excel

v1.4.1
Parker 5 years ago
parent 8d3a5852a1
commit fdb2893739

@ -114,7 +114,7 @@ public interface TestUserRestApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -107,7 +107,7 @@ public interface SysAreaRestApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -114,7 +114,7 @@ public interface DictApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -114,7 +114,7 @@ public interface DictDetailApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -146,7 +146,7 @@ public interface MenuApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -120,7 +120,7 @@ public interface SysOrgRestApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -114,7 +114,7 @@ public interface RoleApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -114,7 +114,7 @@ public interface TenantApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -181,7 +181,7 @@ public interface UserApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);

@ -4,6 +4,7 @@ import io.swagger.annotations.ApiOperation;
import org.opsli.api.base.result.ResultVo; import org.opsli.api.base.result.ResultVo;
import org.opsli.api.wrapper.test.TestModel; import org.opsli.api.wrapper.test.TestModel;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
@ -134,7 +135,7 @@ public interface TestApi {
* Excel * Excel
* @return * @return
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -114,7 +114,7 @@ public interface TestRestApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -16,6 +16,7 @@
package org.opsli.core.base.concroller; package org.opsli.core.base.concroller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval; import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
@ -91,9 +92,9 @@ public abstract class BaseRestController <T extends BaseEntity, E extends ApiWra
/** Model 泛型游标 */ /** Model 泛型游标 */
private static final int MODEL_INDEX = 1; private static final int MODEL_INDEX = 1;
/** Excel 最大导出数量 防止OOM */ /** Excel 最大操作数量 防止OOM */
@Value("${opsli.export-excel-max-count:20000}") @Value("${opsli.excel-max-count:20000}")
private Integer exportExcelMaxCount; private Integer excelMaxCount;
@Autowired(required = false) @Autowired(required = false)
protected S IService; protected S IService;
@ -209,17 +210,27 @@ public abstract class BaseRestController <T extends BaseEntity, E extends ApiWra
String msgInfo = ""; String msgInfo = "";
try { try {
List<E> modelList = excelUtil.readExcel(files.get(0), modelClazz); List<E> modelList = excelUtil.readExcel(files.get(0), modelClazz);
boolean ret = IService.insertBatch(modelList); if(CollUtil.isNotEmpty(modelList)){
if(!ret){ if(modelList.size() > excelMaxCount){
throw new ExcelPluginException(CoreMsg.EXCEL_IMPORT_NO); String maxError = StrUtil.format(CoreMsg.EXCEL_HANDLE_MAX.getMessage(), modelList.size(), excelMaxCount);
// 超出最大导出数量
throw new ExcelPluginException(CoreMsg.EXCEL_HANDLE_MAX.getCode(), maxError);
}
boolean ret = IService.insertBatch(modelList);
if(!ret){
throw new ExcelPluginException(CoreMsg.EXCEL_IMPORT_NO);
}
// 花费毫秒数
long timerCount = timer.interval();
// 提示信息
msgInfo = StrUtil.format(CoreMsg.EXCEL_IMPORT_SUCCESS.getMessage(), DateUtil.formatBetween(timerCount));
// 导出成功
resultVo = ResultVo.success(msgInfo);
resultVo.setCode(CoreMsg.EXCEL_IMPORT_SUCCESS.getCode());
}else {
throw new ExcelPluginException(CoreMsg.EXCEL_FILE_NULL);
} }
// 花费毫秒数
long timerCount = timer.interval();
// 提示信息
msgInfo = StrUtil.format(CoreMsg.EXCEL_IMPORT_SUCCESS.getMessage(), DateUtil.formatBetween(timerCount));
// 导出成功
resultVo = ResultVo.success(msgInfo);
resultVo.setCode(CoreMsg.EXCEL_IMPORT_SUCCESS.getCode());
} catch (ExcelPluginException e) { } catch (ExcelPluginException e) {
// 花费毫秒数 // 花费毫秒数
long timerCount = timer.interval(); long timerCount = timer.interval();
@ -290,10 +301,10 @@ public abstract class BaseRestController <T extends BaseEntity, E extends ApiWra
if(queryWrapper != null){ if(queryWrapper != null){
// 获得数量 大于 阈值 禁止导出, 防止OOM // 获得数量 大于 阈值 禁止导出, 防止OOM
int count = IService.count(queryWrapper); int count = IService.count(queryWrapper);
if(count > exportExcelMaxCount){ if(count > excelMaxCount){
String maxError = StrUtil.format(CoreMsg.EXCEL_EXPORT_MAX.getMessage(), count, exportExcelMaxCount); String maxError = StrUtil.format(CoreMsg.EXCEL_HANDLE_MAX.getMessage(), count, excelMaxCount);
// 超出最大导出数量 // 超出最大导出数量
throw new ExcelPluginException(CoreMsg.EXCEL_EXPORT_MAX.getCode(), maxError); throw new ExcelPluginException(CoreMsg.EXCEL_HANDLE_MAX.getCode(), maxError);
} }
List<T> entityList = IService.findList(queryWrapper); List<T> entityList = IService.findList(queryWrapper);

@ -46,9 +46,9 @@ public enum CoreMsg implements BaseMsg {
EXCEL_EXPORT_ERROR(10301,"Excel 导出失败! - 耗时:{} - 失败信息:{}"), EXCEL_EXPORT_ERROR(10301,"Excel 导出失败! - 耗时:{} - 失败信息:{}"),
EXCEL_IMPORT_SUCCESS(200,"EXCEL 导入成功! - 耗时:{}"), EXCEL_IMPORT_SUCCESS(200,"EXCEL 导入成功! - 耗时:{}"),
EXCEL_IMPORT_ERROR(10303,"Excel导入失败! - 耗时:{} - 失败信息:{}"), EXCEL_IMPORT_ERROR(10303,"Excel导入失败! - 耗时:{} - 失败信息:{}"),
EXCEL_IMPORT_NO(10304,""), EXCEL_IMPORT_NO(10304,"导入对象为空"),
EXCEL_FILE_NULL(10305,"请选择文件"), EXCEL_FILE_NULL(10305,"请选择文件"),
EXCEL_EXPORT_MAX(10700, "超出最大导出数量, 当前数据[{}]条,允许最大阈值[{}]条"), EXCEL_HANDLE_MAX(10700, "超出最大操作数量, 当前数据[{}]条,允许最大阈值[{}]条"),
/** /**

@ -134,7 +134,7 @@ public interface #(data.model.tableName)RestApi {
* @param request request * @param request request
* @return ResultVo * @return ResultVo
*/ */
@GetMapping("/importExcel") @PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request); ResultVo<?> importExcel(MultipartHttpServletRequest request);
/** /**

@ -232,9 +232,7 @@ public class #(data.model.tableName)RestController extends BaseRestController<#(
@EnableLog @EnableLog
@Override @Override
public ResultVo<?> importExcel(MultipartHttpServletRequest request) { public ResultVo<?> importExcel(MultipartHttpServletRequest request) {
// 当前方法 return super.excelImport(request);
Method method = ReflectUtil.getMethodByName(this.getClass(), "importExcel");
return super.excelImport(request, method);
} }
/** /**

@ -5,7 +5,6 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.opsli.api.base.result.ResultVo; import org.opsli.api.base.result.ResultVo;
import org.opsli.api.web.gentest.user.TestUserRestApi;
import org.opsli.api.web.test.TestRestApi; import org.opsli.api.web.test.TestRestApi;
import org.opsli.api.wrapper.test.TestModel; import org.opsli.api.wrapper.test.TestModel;
import org.opsli.common.annotation.ApiRestController; import org.opsli.common.annotation.ApiRestController;
@ -147,7 +146,7 @@ public class TestRestController extends BaseRestController<TestEntity, TestModel
// 当前方法 // 当前方法
Method method = ReflectUtil.getMethodByName(this.getClass(), "exportExcel"); Method method = ReflectUtil.getMethodByName(this.getClass(), "exportExcel");
QueryBuilder<TestEntity> queryBuilder = new WebQueryBuilder<>(TestEntity.class, request.getParameterMap()); QueryBuilder<TestEntity> queryBuilder = new WebQueryBuilder<>(TestEntity.class, request.getParameterMap());
super.excelExport(TestUserRestApi.TITLE, queryBuilder.build(), response, method); super.excelExport(TestRestApi.TITLE, queryBuilder.build(), response, method);
} }
/** /**
@ -174,7 +173,7 @@ public class TestRestController extends BaseRestController<TestEntity, TestModel
public void importTemplate(HttpServletResponse response) { public void importTemplate(HttpServletResponse response) {
// 当前方法 // 当前方法
Method method = ReflectUtil.getMethodByName(this.getClass(), "importTemplate"); Method method = ReflectUtil.getMethodByName(this.getClass(), "importTemplate");
super.importTemplate(TestUserRestApi.TITLE, response, method); super.importTemplate(TestRestApi.TITLE, response, method);
} }

@ -195,6 +195,6 @@ opsli:
# 失败锁定时间(秒) # 失败锁定时间(秒)
slip-lock-speed: 300 slip-lock-speed: 300
# Excel 最大导出数量 防止OOM # Excel 最大操作数量 防止OOM
export-excel-max-count: 20000 excel-max-count: 20000

Loading…
Cancel
Save