导入导出Excel

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -46,9 +46,9 @@ public enum CoreMsg implements BaseMsg {
EXCEL_EXPORT_ERROR(10301,"Excel 导出失败! - 耗时:{} - 失败信息:{}"),
EXCEL_IMPORT_SUCCESS(200,"EXCEL 导入成功! - 耗时:{}"),
EXCEL_IMPORT_ERROR(10303,"Excel导入失败! - 耗时:{} - 失败信息:{}"),
EXCEL_IMPORT_NO(10304,""),
EXCEL_IMPORT_NO(10304,"导入对象为空"),
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
* @return ResultVo
*/
@GetMapping("/importExcel")
@PostMapping("/importExcel")
ResultVo<?> importExcel(MultipartHttpServletRequest request);
/**

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

@ -5,7 +5,6 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.wrapper.test.TestModel;
import org.opsli.common.annotation.ApiRestController;
@ -147,7 +146,7 @@ public class TestRestController extends BaseRestController<TestEntity, TestModel
// 当前方法
Method method = ReflectUtil.getMethodByName(this.getClass(), "exportExcel");
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) {
// 当前方法
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
# Excel 最大导出数量 防止OOM
export-excel-max-count: 20000
# Excel 最大操作数量 防止OOM
excel-max-count: 20000

Loading…
Cancel
Save