Browse Source

add 导入

master
汪菘 2 years ago
parent
commit
17b80da888
  1. 9
      acs/nladmin-system/pom.xml
  2. 14
      acs/nladmin-system/src/main/java/org/nl/acs/device/rest/DeviceController.java
  3. 9
      acs/nladmin-system/src/main/java/org/nl/acs/device/service/DeviceService.java
  4. 73
      acs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java
  5. 10
      acs/nladmin-ui/src/api/acs/device/device.js
  6. 116
      acs/nladmin-ui/src/views/acs/device/UploadDialog.vue
  7. 20
      acs/nladmin-ui/src/views/acs/device/index.vue

9
acs/nladmin-system/pom.xml

@ -331,12 +331,17 @@
<dependency> <dependency>
<groupId>org.apache.poi</groupId> <groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId> <artifactId>poi</artifactId>
<version>3.17</version> <version>4.1.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.poi</groupId> <groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId> <artifactId>poi-ooxml</artifactId>
<version>3.17</version> <version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>xerces</groupId> <groupId>xerces</groupId>

14
acs/nladmin-system/src/main/java/org/nl/acs/device/rest/DeviceController.java

@ -22,7 +22,9 @@ import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
@ -118,6 +120,18 @@ public class DeviceController {
return new ResponseEntity<>(deviceService.selectList(), HttpStatus.OK); return new ResponseEntity<>(deviceService.selectList(), HttpStatus.OK);
} }
@PostMapping("/excelImport")
@Log("excel导入")
@ApiOperation("excel导入")
public ResponseEntity<Object> excelImport(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
deviceService.excelImport(file, request);
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/region/{region}") @GetMapping("/region/{region}")
@Log("根据区域查询设备") @Log("根据区域查询设备")
@ApiOperation("根据区域查询设备") @ApiOperation("根据区域查询设备")

9
acs/nladmin-system/src/main/java/org/nl/acs/device/service/DeviceService.java

@ -9,7 +9,9 @@ import org.nl.acs.device.service.dto.DeviceDto;
import org.nl.acs.device.service.dto.StorageCellDto; import org.nl.acs.device.service.dto.StorageCellDto;
import org.nl.acs.opc.Device; import org.nl.acs.opc.Device;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
@ -118,6 +120,13 @@ public interface DeviceService {
*/ */
JSONArray selectList(); JSONArray selectList();
/**
* excel导入
* @param file
* @param request
*/
void excelImport(MultipartFile file, HttpServletRequest request);
/** /**
* 前端输送设备下拉选列表 * 前端输送设备下拉选列表
* *

73
acs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java

@ -7,6 +7,8 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -43,9 +45,12 @@ import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.util.*; import java.util.*;
/** /**
@ -335,6 +340,74 @@ public class DeviceServiceImpl implements DeviceService, ApplicationAutoInitial
return result; return result;
} }
@Override
@Transactional(rollbackFor = Exception.class)
public void excelImport(MultipartFile file, HttpServletRequest request) {
if (file.isEmpty()) {
throw new BadRequestException("文件为空,请添加数据后重新导入");
}
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
// 1.获取上传文件输入流
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
} catch (Exception e) {
e.printStackTrace();
}
WQLObject wo = WQLObject.getWQLObject("acs_device");
// 调用用 hutool 方法读取数据 默认调用第一个sheet
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
// 从第二行开始获取数据 excelReader.read的结果是一个2纬的list,外层是行,内层是行对应的所有列
List<List<Object>> read = excelReader.read(1, excelReader.getRowCount());
// 循环获取的数据
for (int i = 0; i < read.size(); i++) {
List list = read.get(i);
JSONObject param = new JSONObject();
String device_code = list.get(0).toString();
String device_name = list.get(1).toString();
String device_type = list.get(2).toString();
String is_config = list.get(3).toString();
String is_route = list.get(4).toString();
String region = list.get(5).toString();
if (StrUtil.isEmpty(device_code)) {
throw new BadRequestException("设备编号为空!");
}
if (StrUtil.isEmpty(device_name)) {
device_name = device_code;
}
if (StrUtil.isEmpty(device_type)) {
device_type = "conveyor";
}
if (StrUtil.isEmpty(is_config)) {
is_config = "FALSE";
}
if (StrUtil.isEmpty(is_route)) {
is_route = "false";
}
DeviceDto dto = this.findByCode(device_code);
if (ObjectUtil.isNotEmpty(dto)) {
continue;
}
//按照列获取
param.put("device_id", IdUtil.getSnowflake(1, 1).nextId());
param.put("device_code", device_code);
param.put("device_name", device_name);
param.put("device_type", device_type);
param.put("is_config", is_config);
param.put("is_route", is_route);
param.put("create_by", nickName);
param.put("create_time", now);
param.put("update_by", nickName);
param.put("update_time", now);
param.put("region", region);
wo.insert(param);
}
}
@Override @Override
public JSONArray selectConveyorList() { public JSONArray selectConveyorList() {
//设备基础信息表【acs_device】 //设备基础信息表【acs_device】

10
acs/nladmin-ui/src/api/acs/device/device.js

@ -149,14 +149,14 @@ export function reload() {
}) })
} }
export function excelImport(data) {
export function selectRequestMethodList() {
return request({ return request({
url: 'api/device/selectRequestMethodList', url: 'api/device/excelImport',
method: 'get' method: 'post',
data
}) })
} }
export default { add, edit, del, selectDeviceList, selectDeviceListByRegion, callAgv, responseAgv, selectDeviceDevicerInfo, autoCreateTask, export default { add, edit, del, selectDeviceList, selectDeviceListByRegion, callAgv, responseAgv, selectDeviceDevicerInfo, autoCreateTask,
changeDeviceStatus, cleanTask, queryStorageExtra, selectConDeviceList, saveBarcode, selectDeviceListOne, selectDeviceListTwo, selectDeviceListThree, changeDeviceStatus, cleanTask, queryStorageExtra, selectConDeviceList, saveBarcode, selectDeviceListOne, selectDeviceListTwo, selectDeviceListThree,
addMaterial, cleanMaterial, reload, selectRequestMethodList } addMaterial, cleanMaterial, reload, excelImport }

116
acs/nladmin-ui/src/views/acs/device/UploadDialog.vue

@ -0,0 +1,116 @@
<template>
<el-dialog
title="导入Excel文件"
append-to-body
:visible.sync="dialogVisible"
destroy-on-close
width="400px"
:show-close="true"
@close="close"
@open="open"
>
<el-upload
ref="upload"
class="upload-demo"
action=""
drag
:on-exceed="is_one"
:limit="1"
:auto-upload="false"
:multiple="false"
:show-file-list="true"
:on-change="uploadByJsqd"
:file-list="fileList"
accept=".xlsx,.xls"
>
<i class="el-icon-upload" />
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
<div slot="tip" class="el-upload__tip">只能上传Excel文件且不超过10MB</div>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</span>
</el-dialog>
</template>
<script>
import crudDevice from '@/api/acs/device/device'
import CRUD, { crud } from '@crud/crud'
export default {
name: 'UploadDialog',
mixins: [crud()],
components: {},
props: {
dialogShow: {
type: Boolean,
default: false
},
openParam: {
type: String
}
},
data() {
return {
dialogVisible: false,
fileList: [],
file1: ''
}
},
watch: {
dialogShow: {
handler(newValue, oldValue) {
this.dialogVisible = newValue
}
},
openParam: {
handler(newValue, oldValue) {
this.opendtlParam = newValue
}
}
},
methods: {
open() {
},
close() {
this.$emit('update:dialogShow', false)
},
is_one() {
this.crud.notify('只能上传一个excel文件!', CRUD.NOTIFICATION_TYPE.WARNING)
},
//
beforeAvatarUpload(file) {
// 2Mb
if (file.size > 10 * 1024 * 1024) {
return false
}
return true
},
//
uploadByJsqd(file) {
this.file1 = file
},
submit() {
if (this.beforeAvatarUpload(this.file1)) {
this.fileList.name = this.file1.name
this.fileList.url = ''
var formdata = new FormData()
formdata.append('file', this.file1.raw)
// excelImport formdata
crudDevice.excelImport(formdata).then((res) => {
this.crud.notify('导入成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.$emit('tableChanged3', '')
this.$emit('update:dialogShow', false)
})
} else {
this.crud.notify('文件过大,请上传小于10MB的文件〜', CRUD.NOTIFICATION_TYPE.WARNING)
}
}
}
}
</script>

20
acs/nladmin-ui/src/views/acs/device/index.vue

@ -29,6 +29,16 @@
<rrOperation /> <rrOperation />
</div> </div>
<crudOperation :permission="permission"> <crudOperation :permission="permission">
<el-button
slot="right"
class="filter-item"
type="warning"
icon="el-icon-upload2"
size="mini"
@click="uploadShow = true"
>
导入
</el-button>
<el-button <el-button
slot="right" slot="right"
class="filter-item" class="filter-item"
@ -140,7 +150,7 @@
:data="scope.row" :data="scope.row"
:permission="permission" :permission="permission"
/> />
<el-button size="mini" style="margin-left: -1px;margin-right: 2px" type="text" slot="right"> <el-button slot="right" size="mini" style="margin-left: -1px;margin-right: 2px" type="text">
<router-link :to="'/devices/device/config/' + scope.row.device_code "> <router-link :to="'/devices/device/config/' + scope.row.device_code ">
驱动配置 驱动配置
</router-link> </router-link>
@ -151,6 +161,7 @@
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</div> </div>
<UploadDialog :dialog-show.sync="uploadShow" @tableChanged3="tableChanged3" />
</div> </div>
</template> </template>
@ -162,6 +173,7 @@ import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation' import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination' import pagination from '@crud/Pagination'
import { get } from '@/api/system/dictDetail' import { get } from '@/api/system/dictDetail'
import UploadDialog from '@/views/acs/device/UploadDialog'
const defaultForm = { const defaultForm = {
manufacturer: null, manufacturer: null,
@ -184,7 +196,7 @@ const defaultForm = {
} }
export default { export default {
name: 'Device', name: 'Device',
components: { pagination, crudOperation, rrOperation, udOperation }, components: { pagination, crudOperation, rrOperation, udOperation, UploadDialog },
mixins: [presenter(), header(), form(defaultForm), crud()], mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() { cruds() {
return CRUD({ return CRUD({
@ -203,6 +215,7 @@ export default {
del: ['admin', 'device:del'] del: ['admin', 'device:del']
}, },
device_types: [], device_types: [],
uploadShow: false,
regions: [], regions: [],
rules: { rules: {
device_code: [ device_code: [
@ -235,6 +248,9 @@ export default {
[CRUD.HOOK.beforeRefresh]() { [CRUD.HOOK.beforeRefresh]() {
return true return true
}, },
tableChanged3() {
this.crud.toQuery()
},
reload() { reload() {
crudDevice.reload().then(res => { crudDevice.reload().then(res => {
this.crud.toQuery() this.crud.toQuery()

Loading…
Cancel
Save