From c21ff85b57929e39bf37d462181b0edc242f354b Mon Sep 17 00:00:00 2001 From: zhujie <693337446@qq.com> Date: 星期五, 26 十一月 2021 13:02:59 +0800 Subject: [PATCH] update 增加excel导入样例 --- ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java | 25 +++++++- ruoyi-ui/src/views/demo/demo/index.vue | 67 ++++++++++++++++++++++ ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java | 66 ++++++++++++++++++++++ 3 files changed, 155 insertions(+), 3 deletions(-) diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java index 7b70360..695d254 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java @@ -1,27 +1,31 @@ package com.ruoyi.demo.controller; +import cn.hutool.core.bean.BeanUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.core.validate.QueryGroup; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.ValidatorUtils; +import com.ruoyi.common.utils.poi.ExcelResult; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.demo.domain.TestDemo; import com.ruoyi.demo.domain.bo.TestDemoBo; +import com.ruoyi.demo.domain.bo.TestDemoImportVo; import com.ruoyi.demo.domain.vo.TestDemoVo; import com.ruoyi.demo.service.ITestDemoService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; +import io.swagger.annotations.*; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotEmpty; @@ -65,6 +69,21 @@ return iTestDemoService.customPageList(bo); } + @ApiOperation("瀵煎叆娴嬭瘯鍗曡〃") + @ApiImplicitParams({ + @ApiImplicitParam(name = "file", value = "瀵煎叆鏂囦欢", dataType = "java.io.File", required = true), + }) + @Log(title = "娴嬭瘯鍗曡〃", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('demo:demo:import')") + @PostMapping("/importData") + public AjaxResult<Void> importData(@RequestPart("file") MultipartFile file) throws Exception { + ExcelResult<TestDemoImportVo> excelResult = ExcelUtil.importExcel(file.getInputStream(), TestDemoImportVo.class, true, true); + List<TestDemoImportVo> testDemoImportVoList = excelResult.getList(); + List<TestDemo> TestDemoList = BeanUtil.copyToList(testDemoImportVoList, TestDemo.class); + iTestDemoService.saveAll(TestDemoList); + return AjaxResult.success(excelResult.getAnalysis()); + } + /** * 瀵煎嚭娴嬭瘯鍗曡〃鍒楄〃 */ diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java new file mode 100644 index 0000000..2150cdf --- /dev/null +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java @@ -0,0 +1,66 @@ +package com.ruoyi.demo.domain.bo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 娴嬭瘯鍗曡〃涓氬姟瀵硅薄 test_demo + * + * @author Lion Li + * @date 2021-07-26 + */ + +@Data +@ApiModel("娴嬭瘯鍗曡〃涓氬姟瀵硅薄") +public class TestDemoImportVo { + + + /** + * 閮ㄩ棬id + */ + @ApiModelProperty("閮ㄩ棬id") + @NotNull(message = "閮ㄩ棬id涓嶈兘涓虹┖") + @ExcelProperty(value = "閮ㄩ棬id") + private Long deptId; + + /** + * 鐢ㄦ埛id + */ + @ApiModelProperty("鐢ㄦ埛id") + @NotNull(message = "鐢ㄦ埛id涓嶈兘涓虹┖") + @ExcelProperty(value = "鐢ㄦ埛id") + private Long userId; + + /** + * 鎺掑簭鍙� + */ + @ApiModelProperty("鎺掑簭鍙�") + @NotNull(message = "鎺掑簭鍙蜂笉鑳戒负绌�") + @ExcelProperty(value = "鎺掑簭鍙�") + private Long orderNum; + + /** + * key閿� + */ + @ApiModelProperty("key閿�") + @NotBlank(message = "key閿笉鑳戒负绌�") + @ExcelProperty(value = "key閿�") + private String testKey; + + /** + * 鍊� + */ + @ApiModelProperty("鍊�") + @NotBlank(message = "鍊间笉鑳戒负绌�") + @ExcelProperty(value = "鍊�") + private String value; +} diff --git a/ruoyi-ui/src/views/demo/demo/index.vue b/ruoyi-ui/src/views/demo/demo/index.vue index 9ff0e47..c6a2cdf 100644 --- a/ruoyi-ui/src/views/demo/demo/index.vue +++ b/ruoyi-ui/src/views/demo/demo/index.vue @@ -73,6 +73,16 @@ </el-col> <el-col :span="1.5"> <el-button + type="info" + plain + icon="el-icon-upload2" + size="mini" + @click="handleImport" + v-hasPermi="['demo:demo:import']" + >瀵煎叆</el-button> + </el-col> + <el-col :span="1.5"> + <el-button type="warning" plain icon="el-icon-download" @@ -164,11 +174,34 @@ <el-button @click="cancel">鍙� 娑�</el-button> </div> </el-dialog> + <!-- 鐢ㄦ埛瀵煎叆瀵硅瘽妗� --> + <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body> + <el-upload + ref="upload" + :limit="1" + accept=".xlsx, .xls" + :headers="upload.headers" + :action="upload.url + '?updateSupport=' + upload.updateSupport" + :disabled="upload.isUploading" + :on-progress="handleFileUploadProgress" + :on-success="handleFileSuccess" + :auto-upload="false" + drag + > + <i class="el-icon-upload"></i> + <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div> + </el-upload> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button> + <el-button @click="upload.open = false">鍙� 娑�</el-button> + </div> + </el-dialog> </div> </template> <script> import { listDemo, pageDemo, getDemo, delDemo, addDemo, updateDemo } from "@/api/demo/demo"; +import {getToken} from "@/utils/auth"; export default { name: "Demo", @@ -198,6 +231,19 @@ open: false, // 鍒涘缓鏃堕棿鏃堕棿鑼冨洿 daterangeCreateTime: [], + // 鐢ㄦ埛瀵煎叆鍙傛暟 + upload: { + // 鏄惁鏄剧ず寮瑰嚭灞傦紙鐢ㄦ埛瀵煎叆锛� + open: false, + // 寮瑰嚭灞傛爣棰橈紙鐢ㄦ埛瀵煎叆锛� + title: "", + // 鏄惁绂佺敤涓婁紶 + isUploading: false, + // 璁剧疆涓婁紶鐨勮姹傚ご閮� + headers: { Authorization: "Bearer " + getToken() }, + // 涓婁紶鐨勫湴鍧� + url: process.env.VUE_APP_BASE_API + "/demo/demo/importData" + }, // 鏌ヨ鍙傛暟 queryParams: { pageNum: 1, @@ -353,11 +399,32 @@ this.loading = false; }); }, + /** 瀵煎叆鎸夐挳鎿嶄綔 */ + handleImport() { + this.upload.title = "鐢ㄦ埛瀵煎叆"; + this.upload.open = true; + }, /** 瀵煎嚭鎸夐挳鎿嶄綔 */ handleExport() { this.download('demo/demo/export', { ...this.queryParams }, `demo_${new Date().getTime()}.xlsx`) + }, + // 鏂囦欢涓婁紶涓鐞� + handleFileUploadProgress(event, file, fileList) { + this.upload.isUploading = true; + }, + // 鏂囦欢涓婁紶鎴愬姛澶勭悊 + handleFileSuccess(response, file, fileList) { + this.upload.open = false; + this.upload.isUploading = false; + this.$refs.upload.clearFiles(); + this.$alert(response.msg, "瀵煎叆缁撴灉", { dangerouslyUseHTMLString: true }); + this.getList(); + }, + // 鎻愪氦涓婁紶鏂囦欢 + submitFileForm() { + this.$refs.upload.submit(); } } }; -- Gitblit v1.9.3