前端

<div style="margin-bottom: 10px">
<el-button
:loading="importLoading"
type="primary"
icon="el-icon-upload" @click="handleImport">导入</el-button>
<el-upload
ref="importUpload"
:auto-upload="false"
:show-file-list="false"
:on-change="handleUploadChange"
:disabled="importDisabled"
style="display: inline"
action="#"
class="upload-demo">
<el-button
id="uploadButton"
style="display: none"
slot="trigger"
:loading="importLoading"
size="small"
type="primary"
icon="el-icon-upload" >导入</el-button>
</el-upload>
&nbsp;
<el-button
type="primary"
icon="el-icon-download"
@click="downloadTemplate('药品清单-模板.xlsx')">下载模板</el-button>
</div>

数据模型:


data() {
return {
listQuery: {
page: 1,
limit: 10,
drugno: '',
drugname: ''
},
list: [],
total: 1,
importLoading: false,
importDisabled: false,
listLoading: false,
}
},

方法:


handleUploadChange(file) {
if (file.name.lastIndexOf('.') < 0) {
this.$message.error('上传文件只能是xls、xlsx格式!')
return
}
const testMsg = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase()
const extensionXLS = testMsg == 'xls'
const extensionXLSX = testMsg == 'xlsx'
if (!extensionXLS && !extensionXLSX) {
this.$message.error('上传文件只能是xls、xlsx格式!')
return
}
const isLt2M = file.size / 1024 / 1024 < 2
if (!isLt2M) {
this.$message.error('上传文件不能超过 2MB!')
return
}
this.importLoading = true
this.importDisabled = true
const data = new FormData()
data.append('file', file.raw)
medicineListApi.importExcel(data).then(response => {
if (response.status == true) {
this.open2(response.msg)
this.importLoading = false
this.importDisabled = false
this.getList()
} else {
this.open2(response.msg)
this.importLoading = false
this.importDisabled = false
}
}).catch(() => {
this.open2('抱歉,导入失败')
this.importLoading = false
this.importDisabled = false
})
},
open2(str) {
this.$notify({
title: '提示',
message: str,
duration: 0
})
},
handleImport(){
const uploadObj = document.getElementById("uploadButton");
uploadObj.click();
},

在medicineList.js中添加代码

importExcel(data) {
return request({
url: baseUrl +'/import',
method: 'post',
data: data,
headers: {
'Content-Type': 'multipart/form-data'
}
})
},

multipart/form-data:指定传输数据为二进制类型,比如图片、mp3、文件。

后台代码

controller

@PostMapping("/import")
public JSONObject importNodeInfo(MultipartFile file) throws Exception {
return medicineListService.importNodeInfo(file.getInputStream());
}

service接口

public interface MedicineListService extends IService<DrugData> {
    JSONObject importNodeInfo(InputStream inputStream) throws Exception;
}

service实现类

public JSONObject importNodeInfo(InputStream in) throws Exception {
// 根据类型进行分流导入
String str0 = "";
String str = "";
String fstr = "";
int operCount = 0;
try {
XSSFWorkbook workbook = new XSSFWorkbook(in);
XSSFSheet sheet = workbook.getSheetAt(0);
int totalColumnNum = sheet.getRow(0).getLastCellNum();
logger.info("导入代码信息excel文件的总列数:" + totalColumnNum);
System.out.println(totalColumnNum);
int lastRowNum = sheet.getLastRowNum();

logger.info("导入节点信息excel文件的总行数:" + lastRowNum);
System.out.println(sheet.getLastRowNum());
for (int num = 0; num <= lastRowNum; num++) {
XSSFRow row = sheet.getRow(num);
if(row == null) {
str0 = "存在空数据行,行号:" + (num + 1) + ",导入失败!";
break;
}
int hcount = num + 1;
if (num == 0) {
if (null != String.valueOf(row.getCell(0)) && String.valueOf(row.getCell(0)).equals("药品编码")) {
continue;
} else {
JSONObject json = new JSONObject();
json.put("msg", "导入的模板名称出错,请确认");
json.put("status", false);
json.put("data", operCount);
return json;
}
}
DrugData drugData = new DrugData();
drugData.setDrugno(String.valueOf(row.getCell(0))); // 药品编码
drugData.setDrugname(String.valueOf(row.getCell(1))); //药品名称
drugData.setIndiction(String.valueOf(row.getCell(2))); //适应症

try {
this.insertOrUpdate(drugData);
} catch (Exception e) {
logger.error(e.getMessage());
str = str + "第【" + hcount + "】行,";
continue;
}
operCount++;
}
if (StringUtils.isNotBlank(str)) {
str = "其中-->" + str + "导入失败!";
}

if (StringUtils.isNotBlank(fstr)) {
fstr = "==投量-->" + fstr + "附表导入失败!";
}
JSONObject json = new JSONObject();
json.put("msg", "操作成功" + str0 + str + fstr);
json.put("status", true);
json.put("data", operCount);
return json;
} catch (Exception e) {
logger.error(e.getMessage());
throw new Exception(e);
} finally {
try {
in.close();
} catch (IOException e) {
logger.error(e.getMessage());
throw new Exception(e);
}
}
}
public void insertOrUpdate(DrugData drugData) {
// 首先根据药品编号查询有没有记录,有的话拿到则修改,否则新增
QueryWrapper<DrugData> wrapper = new QueryWrapper<>();
if(StringUtils.isNotBlank(drugData.getDrugno())){
wrapper.eq("drugno",drugData.getDrugno());
}
List<DrugData> drugDataList = medicineListMapper.selectList(wrapper);

if (null != drugDataList && drugDataList.size() > 0) {
drugData.setId(drugDataList.get(0).getId());
medicineListMapper.updateById(drugData);
} else {
medicineListMapper.insert(drugData);
}
}

Dao层

public interface MedicineListMapper extends BaseMapper<DrugData> {
}

 

posted on 2020-09-27 19:55  周文豪  阅读(162)  评论(0)    收藏  举报