diff --git a/acs/nladmin-system/pom.xml b/acs/nladmin-system/pom.xml index 207ff624f..4349d76c0 100644 --- a/acs/nladmin-system/pom.xml +++ b/acs/nladmin-system/pom.xml @@ -45,7 +45,21 @@ commons-io 2.8.0 - + + + + + + + + + + + + + + + org.openscada.jinterop org.openscada.jinterop.core diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device/rest/DeviceController.java b/acs/nladmin-system/src/main/java/org/nl/acs/device/rest/DeviceController.java index cbc8786da..f20f944c1 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device/rest/DeviceController.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device/rest/DeviceController.java @@ -21,7 +21,9 @@ import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @@ -382,4 +384,12 @@ public class DeviceController { deviceService.downDeviceDBloadFX5UCSV(deviceService.queryDeviceProtocol(whereJson), response); } + @PostMapping("/excelImport") + @Log("excel导入") + @ApiOperation("excel导入") + public ResponseEntity excelImport(@RequestParam("file") MultipartFile file, HttpServletRequest request) { + deviceService.excelImport(file, request); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device/service/DeviceService.java b/acs/nladmin-system/src/main/java/org/nl/acs/device/service/DeviceService.java index 708d0e282..80ca6689a 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device/service/DeviceService.java +++ b/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.opc.Device; import org.springframework.data.domain.Pageable; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @@ -289,4 +291,11 @@ public interface DeviceService { void downDeviceDBloadSmartCSV(JSONArray queryDeviceProtocol, HttpServletResponse response); void downDeviceDBloadFX5UCSV(JSONArray queryDeviceProtocol, HttpServletResponse response); + + /** + * excel导入 + * @param file + * @param request + */ + void excelImport(MultipartFile file, HttpServletRequest request); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java index 9850e6328..930c0b3e3 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java +++ b/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.ObjectUtil; 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.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -44,9 +46,12 @@ import org.slf4j.LoggerFactory; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.InputStream; import java.util.*; /** @@ -1813,6 +1818,47 @@ public class DeviceServiceImpl implements DeviceService, ApplicationAutoInitial ExportCSVUtil.responseSetProperties(fileName, bytes, response); } + @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> read = excelReader.read(1, excelReader.getRowCount()); + // 循环获取的数据 + for (int i = 0; i < read.size(); i++) { + List list = read.get(i); + JSONObject param = new JSONObject(); + //按照列获取 + param.put("device_id", IdUtil.getSnowflake(1, 1).nextId()); + param.put("device_code", list.get(0).toString()); + param.put("device_name", list.get(0).toString()); + param.put("device_type", "conveyor"); + param.put("is_config", "FALSE"); + param.put("is_route", "FALSE"); + param.put("create_by", nickName); + param.put("create_time", now); + param.put("update_by", nickName); + param.put("update_time", now); + wo.insert(param); + } + } + public Map getValue1(JSONArray wss, int j, Integer dbInterval, int i){ int size = wss.size(); Map map = new ListOrderedMap<>(); diff --git a/acs/nladmin-ui/src/api/acs/device/device.js b/acs/nladmin-ui/src/api/acs/device/device.js index d1d28edb7..85dd735c3 100644 --- a/acs/nladmin-ui/src/api/acs/device/device.js +++ b/acs/nladmin-ui/src/api/acs/device/device.js @@ -149,6 +149,14 @@ export function reload() { }) } +export function excelImport(data) { + return request({ + url: 'api/device/excelImport', + method: 'post', + data + }) +} + export default { add, edit, del, selectDeviceList, selectDeviceListByRegion, callAgv, responseAgv, selectDeviceDevicerInfo, autoCreateTask, changeDeviceStatus, cleanTask, queryStorageExtra, selectConDeviceList, saveBarcode, selectDeviceListOne, selectDeviceListTwo, selectDeviceListThree, - addMaterial, cleanMaterial, reload } + addMaterial, cleanMaterial, reload, excelImport } diff --git a/acs/nladmin-ui/src/views/acs/device/UploadDialog.vue b/acs/nladmin-ui/src/views/acs/device/UploadDialog.vue new file mode 100644 index 000000000..b299a0e50 --- /dev/null +++ b/acs/nladmin-ui/src/views/acs/device/UploadDialog.vue @@ -0,0 +1,116 @@ + + + + diff --git a/acs/nladmin-ui/src/views/acs/device/index.vue b/acs/nladmin-ui/src/views/acs/device/index.vue index 7b2e16989..fa87c1eb6 100644 --- a/acs/nladmin-ui/src/views/acs/device/index.vue +++ b/acs/nladmin-ui/src/views/acs/device/index.vue @@ -29,6 +29,16 @@ + + 导入 + - + 驱动配置 @@ -151,6 +161,7 @@ + @@ -162,6 +173,7 @@ import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' import { get } from '@/api/system/dictDetail' +import UploadDialog from '@/views/acs/device/UploadDialog' const defaultForm = { manufacturer: null, @@ -184,7 +196,7 @@ const defaultForm = { } export default { name: 'Device', - components: { pagination, crudOperation, rrOperation, udOperation }, + components: { pagination, crudOperation, rrOperation, udOperation, UploadDialog }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ @@ -203,6 +215,7 @@ export default { del: ['admin', 'device:del'] }, device_types: [], + uploadShow: false, regions: [], rules: { device_code: [ @@ -235,6 +248,9 @@ export default { [CRUD.HOOK.beforeRefresh]() { return true }, + tableChanged3() { + this.crud.toQuery() + }, reload() { crudDevice.reload().then(res => { this.crud.toQuery()