diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index 0149cc1..743ff7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.device.entity.BusLedger; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -26,4 +27,7 @@ @Param("deptStrs") String deptStrs); Page pageGridList(@Param("scope") DataScope dataScope, Page page, @Param("request") BusLedgerDTO request); + + @Select("SELECT id FROM bus_ledger_all_view WHERE tagNumber = #{tagNumber} and type= #{type} ") + List ledgerIdsByTagNumber(@Param("tagNumber") String tagNumber ,@Param("type") String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index 0149cc1..743ff7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.device.entity.BusLedger; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -26,4 +27,7 @@ @Param("deptStrs") String deptStrs); Page pageGridList(@Param("scope") DataScope dataScope, Page page, @Param("request") BusLedgerDTO request); + + @Select("SELECT id FROM bus_ledger_all_view WHERE tagNumber = #{tagNumber} and type= #{type} ") + List ledgerIdsByTagNumber(@Param("tagNumber") String tagNumber ,@Param("type") String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java new file mode 100644 index 0000000..fcf777f --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +@Data +public class BusDeviceImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelProperty("设备编号") + private String devCode; + + @ExcelProperty("产品编号") + private Long productId; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("安装日期") + private Date installDate; + + @ExcelProperty("在用情况") + private String valid; + + private String watchObject; + + private Long deviceType; + + private List ledgerIds; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index 0149cc1..743ff7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.device.entity.BusLedger; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -26,4 +27,7 @@ @Param("deptStrs") String deptStrs); Page pageGridList(@Param("scope") DataScope dataScope, Page page, @Param("request") BusLedgerDTO request); + + @Select("SELECT id FROM bus_ledger_all_view WHERE tagNumber = #{tagNumber} and type= #{type} ") + List ledgerIdsByTagNumber(@Param("tagNumber") String tagNumber ,@Param("type") String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java new file mode 100644 index 0000000..fcf777f --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +@Data +public class BusDeviceImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelProperty("设备编号") + private String devCode; + + @ExcelProperty("产品编号") + private Long productId; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("安装日期") + private Date installDate; + + @ExcelProperty("在用情况") + private String valid; + + private String watchObject; + + private Long deviceType; + + private List ledgerIds; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index d272a30..e0afae6 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -61,6 +63,7 @@ @TableField("VALID") private String valid; + @com.alibaba.excel.annotation.format.DateTimeFormat("yyyy-MM-dd") @ExcelProperty(value = "安装时间", order = 12) @ApiModelProperty("安装时间") @TableField("INSTALL_DATE") @@ -138,4 +141,31 @@ @TableField(exist = false) private String position; + public BusDevice() { + } + + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + this.devcode = devcode; + this.deviceType = deviceType; + this.productId = productId; + this.valid = valid; + this.installDate = installDate; + this.watchObject = watchObject; + this.ledgerIds = ledgerIds; + } + + public static List convertDeviceList(List dtoList){ + List busDeviceList = new ArrayList<>(); + dtoList.forEach(deviceImportDTO -> { + busDeviceList.add(new BusDevice(deviceImportDTO.getDevCode(), + deviceImportDTO.getDeviceType(), + deviceImportDTO.getProductId(), + deviceImportDTO.getValid(), + deviceImportDTO.getInstallDate(), + deviceImportDTO.getWatchObject(), + deviceImportDTO.getLedgerIds())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index 0149cc1..743ff7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.device.entity.BusLedger; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -26,4 +27,7 @@ @Param("deptStrs") String deptStrs); Page pageGridList(@Param("scope") DataScope dataScope, Page page, @Param("request") BusLedgerDTO request); + + @Select("SELECT id FROM bus_ledger_all_view WHERE tagNumber = #{tagNumber} and type= #{type} ") + List ledgerIdsByTagNumber(@Param("tagNumber") String tagNumber ,@Param("type") String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java new file mode 100644 index 0000000..fcf777f --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +@Data +public class BusDeviceImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelProperty("设备编号") + private String devCode; + + @ExcelProperty("产品编号") + private Long productId; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("安装日期") + private Date installDate; + + @ExcelProperty("在用情况") + private String valid; + + private String watchObject; + + private Long deviceType; + + private List ledgerIds; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index d272a30..e0afae6 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -61,6 +63,7 @@ @TableField("VALID") private String valid; + @com.alibaba.excel.annotation.format.DateTimeFormat("yyyy-MM-dd") @ExcelProperty(value = "安装时间", order = 12) @ApiModelProperty("安装时间") @TableField("INSTALL_DATE") @@ -138,4 +141,31 @@ @TableField(exist = false) private String position; + public BusDevice() { + } + + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + this.devcode = devcode; + this.deviceType = deviceType; + this.productId = productId; + this.valid = valid; + this.installDate = installDate; + this.watchObject = watchObject; + this.ledgerIds = ledgerIds; + } + + public static List convertDeviceList(List dtoList){ + List busDeviceList = new ArrayList<>(); + dtoList.forEach(deviceImportDTO -> { + busDeviceList.add(new BusDevice(deviceImportDTO.getDevCode(), + deviceImportDTO.getDeviceType(), + deviceImportDTO.getProductId(), + deviceImportDTO.getValid(), + deviceImportDTO.getInstallDate(), + deviceImportDTO.getWatchObject(), + deviceImportDTO.getLedgerIds())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java index 5c8982d..68eefad 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 设备类型管理 服务类 @@ -15,4 +17,6 @@ boolean saveBaseDeviceType(BaseDeviceType baseDeviceType); + List getList(); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index 0149cc1..743ff7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.device.entity.BusLedger; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -26,4 +27,7 @@ @Param("deptStrs") String deptStrs); Page pageGridList(@Param("scope") DataScope dataScope, Page page, @Param("request") BusLedgerDTO request); + + @Select("SELECT id FROM bus_ledger_all_view WHERE tagNumber = #{tagNumber} and type= #{type} ") + List ledgerIdsByTagNumber(@Param("tagNumber") String tagNumber ,@Param("type") String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java new file mode 100644 index 0000000..fcf777f --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +@Data +public class BusDeviceImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelProperty("设备编号") + private String devCode; + + @ExcelProperty("产品编号") + private Long productId; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("安装日期") + private Date installDate; + + @ExcelProperty("在用情况") + private String valid; + + private String watchObject; + + private Long deviceType; + + private List ledgerIds; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index d272a30..e0afae6 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -61,6 +63,7 @@ @TableField("VALID") private String valid; + @com.alibaba.excel.annotation.format.DateTimeFormat("yyyy-MM-dd") @ExcelProperty(value = "安装时间", order = 12) @ApiModelProperty("安装时间") @TableField("INSTALL_DATE") @@ -138,4 +141,31 @@ @TableField(exist = false) private String position; + public BusDevice() { + } + + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + this.devcode = devcode; + this.deviceType = deviceType; + this.productId = productId; + this.valid = valid; + this.installDate = installDate; + this.watchObject = watchObject; + this.ledgerIds = ledgerIds; + } + + public static List convertDeviceList(List dtoList){ + List busDeviceList = new ArrayList<>(); + dtoList.forEach(deviceImportDTO -> { + busDeviceList.add(new BusDevice(deviceImportDTO.getDevCode(), + deviceImportDTO.getDeviceType(), + deviceImportDTO.getProductId(), + deviceImportDTO.getValid(), + deviceImportDTO.getInstallDate(), + deviceImportDTO.getWatchObject(), + deviceImportDTO.getLedgerIds())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java index 5c8982d..68eefad 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 设备类型管理 服务类 @@ -15,4 +17,6 @@ boolean saveBaseDeviceType(BaseDeviceType baseDeviceType); + List getList(); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index 6ff3639..7be03a3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import java.util.List; @@ -24,4 +25,7 @@ boolean batchDeleteDevice(List ids); + List addDeviceBatch(List results); + + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index 0149cc1..743ff7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.device.entity.BusLedger; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -26,4 +27,7 @@ @Param("deptStrs") String deptStrs); Page pageGridList(@Param("scope") DataScope dataScope, Page page, @Param("request") BusLedgerDTO request); + + @Select("SELECT id FROM bus_ledger_all_view WHERE tagNumber = #{tagNumber} and type= #{type} ") + List ledgerIdsByTagNumber(@Param("tagNumber") String tagNumber ,@Param("type") String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java new file mode 100644 index 0000000..fcf777f --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +@Data +public class BusDeviceImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelProperty("设备编号") + private String devCode; + + @ExcelProperty("产品编号") + private Long productId; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("安装日期") + private Date installDate; + + @ExcelProperty("在用情况") + private String valid; + + private String watchObject; + + private Long deviceType; + + private List ledgerIds; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index d272a30..e0afae6 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -61,6 +63,7 @@ @TableField("VALID") private String valid; + @com.alibaba.excel.annotation.format.DateTimeFormat("yyyy-MM-dd") @ExcelProperty(value = "安装时间", order = 12) @ApiModelProperty("安装时间") @TableField("INSTALL_DATE") @@ -138,4 +141,31 @@ @TableField(exist = false) private String position; + public BusDevice() { + } + + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + this.devcode = devcode; + this.deviceType = deviceType; + this.productId = productId; + this.valid = valid; + this.installDate = installDate; + this.watchObject = watchObject; + this.ledgerIds = ledgerIds; + } + + public static List convertDeviceList(List dtoList){ + List busDeviceList = new ArrayList<>(); + dtoList.forEach(deviceImportDTO -> { + busDeviceList.add(new BusDevice(deviceImportDTO.getDevCode(), + deviceImportDTO.getDeviceType(), + deviceImportDTO.getProductId(), + deviceImportDTO.getValid(), + deviceImportDTO.getInstallDate(), + deviceImportDTO.getWatchObject(), + deviceImportDTO.getLedgerIds())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java index 5c8982d..68eefad 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 设备类型管理 服务类 @@ -15,4 +17,6 @@ boolean saveBaseDeviceType(BaseDeviceType baseDeviceType); + List getList(); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index 6ff3639..7be03a3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import java.util.List; @@ -24,4 +25,7 @@ boolean batchDeleteDevice(List ids); + List addDeviceBatch(List results); + + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java index 22a3732..6041b7f 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java @@ -22,4 +22,6 @@ Page pageList(Page page, BusLedgerDTO request, DataScope dataScope); Page pageGridList(Page page, BusLedgerDTO request, DataScope dataScope); + + List ledgerIdsByTagNumber(String tagNumber,String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index 0149cc1..743ff7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.device.entity.BusLedger; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -26,4 +27,7 @@ @Param("deptStrs") String deptStrs); Page pageGridList(@Param("scope") DataScope dataScope, Page page, @Param("request") BusLedgerDTO request); + + @Select("SELECT id FROM bus_ledger_all_view WHERE tagNumber = #{tagNumber} and type= #{type} ") + List ledgerIdsByTagNumber(@Param("tagNumber") String tagNumber ,@Param("type") String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java new file mode 100644 index 0000000..fcf777f --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +@Data +public class BusDeviceImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelProperty("设备编号") + private String devCode; + + @ExcelProperty("产品编号") + private Long productId; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("安装日期") + private Date installDate; + + @ExcelProperty("在用情况") + private String valid; + + private String watchObject; + + private Long deviceType; + + private List ledgerIds; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index d272a30..e0afae6 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -61,6 +63,7 @@ @TableField("VALID") private String valid; + @com.alibaba.excel.annotation.format.DateTimeFormat("yyyy-MM-dd") @ExcelProperty(value = "安装时间", order = 12) @ApiModelProperty("安装时间") @TableField("INSTALL_DATE") @@ -138,4 +141,31 @@ @TableField(exist = false) private String position; + public BusDevice() { + } + + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + this.devcode = devcode; + this.deviceType = deviceType; + this.productId = productId; + this.valid = valid; + this.installDate = installDate; + this.watchObject = watchObject; + this.ledgerIds = ledgerIds; + } + + public static List convertDeviceList(List dtoList){ + List busDeviceList = new ArrayList<>(); + dtoList.forEach(deviceImportDTO -> { + busDeviceList.add(new BusDevice(deviceImportDTO.getDevCode(), + deviceImportDTO.getDeviceType(), + deviceImportDTO.getProductId(), + deviceImportDTO.getValid(), + deviceImportDTO.getInstallDate(), + deviceImportDTO.getWatchObject(), + deviceImportDTO.getLedgerIds())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java index 5c8982d..68eefad 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 设备类型管理 服务类 @@ -15,4 +17,6 @@ boolean saveBaseDeviceType(BaseDeviceType baseDeviceType); + List getList(); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index 6ff3639..7be03a3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import java.util.List; @@ -24,4 +25,7 @@ boolean batchDeleteDevice(List ids); + List addDeviceBatch(List results); + + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java index 22a3732..6041b7f 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java @@ -22,4 +22,6 @@ Page pageList(Page page, BusLedgerDTO request, DataScope dataScope); Page pageGridList(Page page, BusLedgerDTO request, DataScope dataScope); + + List ledgerIdsByTagNumber(String tagNumber,String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java index 0e08ee3..861b402 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java @@ -1,11 +1,14 @@ package com.casic.missiles.modular.device.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.device.dao.BaseDeviceTypeMapper; import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.casic.missiles.modular.device.service.IBaseDeviceTypeService; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备类型管理 服务实现类 @@ -25,4 +28,11 @@ baseDeviceType.setTypeCode((typeCodeMax + 1) + ""); return this.baseMapper.insert(baseDeviceType) > 0 ? true : false; } + + @Override + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("IS_USED",1); + return this.list(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index 0149cc1..743ff7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.device.entity.BusLedger; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -26,4 +27,7 @@ @Param("deptStrs") String deptStrs); Page pageGridList(@Param("scope") DataScope dataScope, Page page, @Param("request") BusLedgerDTO request); + + @Select("SELECT id FROM bus_ledger_all_view WHERE tagNumber = #{tagNumber} and type= #{type} ") + List ledgerIdsByTagNumber(@Param("tagNumber") String tagNumber ,@Param("type") String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java new file mode 100644 index 0000000..fcf777f --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +@Data +public class BusDeviceImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelProperty("设备编号") + private String devCode; + + @ExcelProperty("产品编号") + private Long productId; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("安装日期") + private Date installDate; + + @ExcelProperty("在用情况") + private String valid; + + private String watchObject; + + private Long deviceType; + + private List ledgerIds; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index d272a30..e0afae6 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -61,6 +63,7 @@ @TableField("VALID") private String valid; + @com.alibaba.excel.annotation.format.DateTimeFormat("yyyy-MM-dd") @ExcelProperty(value = "安装时间", order = 12) @ApiModelProperty("安装时间") @TableField("INSTALL_DATE") @@ -138,4 +141,31 @@ @TableField(exist = false) private String position; + public BusDevice() { + } + + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + this.devcode = devcode; + this.deviceType = deviceType; + this.productId = productId; + this.valid = valid; + this.installDate = installDate; + this.watchObject = watchObject; + this.ledgerIds = ledgerIds; + } + + public static List convertDeviceList(List dtoList){ + List busDeviceList = new ArrayList<>(); + dtoList.forEach(deviceImportDTO -> { + busDeviceList.add(new BusDevice(deviceImportDTO.getDevCode(), + deviceImportDTO.getDeviceType(), + deviceImportDTO.getProductId(), + deviceImportDTO.getValid(), + deviceImportDTO.getInstallDate(), + deviceImportDTO.getWatchObject(), + deviceImportDTO.getLedgerIds())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java index 5c8982d..68eefad 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 设备类型管理 服务类 @@ -15,4 +17,6 @@ boolean saveBaseDeviceType(BaseDeviceType baseDeviceType); + List getList(); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index 6ff3639..7be03a3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import java.util.List; @@ -24,4 +25,7 @@ boolean batchDeleteDevice(List ids); + List addDeviceBatch(List results); + + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java index 22a3732..6041b7f 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java @@ -22,4 +22,6 @@ Page pageList(Page page, BusLedgerDTO request, DataScope dataScope); Page pageGridList(Page page, BusLedgerDTO request, DataScope dataScope); + + List ledgerIdsByTagNumber(String tagNumber,String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java index 0e08ee3..861b402 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java @@ -1,11 +1,14 @@ package com.casic.missiles.modular.device.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.device.dao.BaseDeviceTypeMapper; import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.casic.missiles.modular.device.service.IBaseDeviceTypeService; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备类型管理 服务实现类 @@ -25,4 +28,11 @@ baseDeviceType.setTypeCode((typeCodeMax + 1) + ""); return this.baseMapper.insert(baseDeviceType) > 0 ? true : false; } + + @Override + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("IS_USED",1); + return this.list(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 6ec692d..6b539f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -7,15 +8,12 @@ import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dto.BusDeviceDTO; -import com.casic.missiles.modular.device.entity.BusDevice; -import com.casic.missiles.modular.device.entity.BusDeviceLog; -import com.casic.missiles.modular.device.service.IBusDeviceLedgerService; -import com.casic.missiles.modular.device.service.IBusDeviceLogService; -import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; +import com.casic.missiles.modular.device.entity.*; +import com.casic.missiles.modular.device.service.*; import lombok.RequiredArgsConstructor; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -41,6 +39,9 @@ private final IBusDeviceLogService iBusDeviceLogService; private final AbstractDictService abstractDictService; private final AbstractDeptService abstractDeptService; + private final IBaseProductService baseProductService; + private final IBusLedgerService iBusLedgerService; + private final IBaseDeviceTypeService deviceTypeService; @Transactional @Override @@ -50,7 +51,7 @@ this.baseMapper.insert(busDevice); //存储绑定关系 if (ObjectUtil.isNotEmpty(busDevice.getLedgerIds())) { - busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(),busDevice.getWatchObject()); + busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } //添加设备操作日志 iBusDeviceLogService.saveBusDeviceLog(busDevice.getDevcode(), "1", busDevice.getTagNumber()); @@ -65,7 +66,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request, DataScope dataScope) { - Page busDevicePage = this.baseMapper.pageList(page, request,dataScope,getDeptIds(request.getDeptId())); + Page busDevicePage = this.baseMapper.pageList(page, request, dataScope, getDeptIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { busDevice.setWatchObject(abstractDictService.getDictNameByCode("watchObject", busDevice.getWatchObject())); @@ -93,6 +94,63 @@ return true; } + + @Transactional + @Override + public List addDeviceBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List baseDeviceTypes = deviceTypeService.list(); + final Integer[] index = {0}; + results.forEach(deviceImportDTO -> { + index[0]++; + //产品编号校验 + BaseProduct baseProduct = baseProductService.getById(deviceImportDTO.getProductId()); + if (null == baseProduct) { + list.add("第" + index[0] + "行,产品编号不存在!"); + return; + } + //设置设备相关信息 + deviceImportDTO.setDeviceType(baseProduct.getDeviceType()); + baseDeviceTypes.forEach(baseDeviceType -> { + if(baseProduct.getDeviceType().equals(baseDeviceType.getId())){ + deviceImportDTO.setWatchObject(baseDeviceType.getWatchObject()); + } + }); + //若安装位号不为空,检查是否存在 + if(ObjectUtil.isNotEmpty(deviceImportDTO.getTagNumber())){ + List ledgerIds = iBusLedgerService.ledgerIdsByTagNumber(deviceImportDTO.getTagNumber(),deviceImportDTO.getWatchObject()); + if(null==ledgerIds||ledgerIds.size()<1){ + list.add("第" + index[0] + "行,安装位号不存在!"); + return; + } + deviceImportDTO.setLedgerIds(ledgerIds); + } + }); + + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + + List busDeviceList = BusDevice.convertDeviceList(results); + //保存设备信息 + this.saveBatch(busDeviceList); + + List busDeviceLedgers = new ArrayList<>(); + + busDeviceList.forEach(device -> { + busDeviceLedgers.add(new BusDeviceLedger(device.getId(),device.getDeviceType(),device.getWatchObject())); + + }); + if (CollectionUtil.isNotEmpty(busDeviceLedgers)) { + this.busDeviceLedgerService.saveBatch(busDeviceLedgers); + } + } else { + list.add("导入数据不能为空"); + } + return list; + } + public String getDeptIds(Long deptId) { if (ObjectUtil.isNotEmpty(deptId)) { //获取子级单位 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index 0149cc1..743ff7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.device.entity.BusLedger; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -26,4 +27,7 @@ @Param("deptStrs") String deptStrs); Page pageGridList(@Param("scope") DataScope dataScope, Page page, @Param("request") BusLedgerDTO request); + + @Select("SELECT id FROM bus_ledger_all_view WHERE tagNumber = #{tagNumber} and type= #{type} ") + List ledgerIdsByTagNumber(@Param("tagNumber") String tagNumber ,@Param("type") String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java new file mode 100644 index 0000000..fcf777f --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +@Data +public class BusDeviceImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelProperty("设备编号") + private String devCode; + + @ExcelProperty("产品编号") + private Long productId; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("安装日期") + private Date installDate; + + @ExcelProperty("在用情况") + private String valid; + + private String watchObject; + + private Long deviceType; + + private List ledgerIds; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index d272a30..e0afae6 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -61,6 +63,7 @@ @TableField("VALID") private String valid; + @com.alibaba.excel.annotation.format.DateTimeFormat("yyyy-MM-dd") @ExcelProperty(value = "安装时间", order = 12) @ApiModelProperty("安装时间") @TableField("INSTALL_DATE") @@ -138,4 +141,31 @@ @TableField(exist = false) private String position; + public BusDevice() { + } + + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + this.devcode = devcode; + this.deviceType = deviceType; + this.productId = productId; + this.valid = valid; + this.installDate = installDate; + this.watchObject = watchObject; + this.ledgerIds = ledgerIds; + } + + public static List convertDeviceList(List dtoList){ + List busDeviceList = new ArrayList<>(); + dtoList.forEach(deviceImportDTO -> { + busDeviceList.add(new BusDevice(deviceImportDTO.getDevCode(), + deviceImportDTO.getDeviceType(), + deviceImportDTO.getProductId(), + deviceImportDTO.getValid(), + deviceImportDTO.getInstallDate(), + deviceImportDTO.getWatchObject(), + deviceImportDTO.getLedgerIds())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java index 5c8982d..68eefad 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 设备类型管理 服务类 @@ -15,4 +17,6 @@ boolean saveBaseDeviceType(BaseDeviceType baseDeviceType); + List getList(); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index 6ff3639..7be03a3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import java.util.List; @@ -24,4 +25,7 @@ boolean batchDeleteDevice(List ids); + List addDeviceBatch(List results); + + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java index 22a3732..6041b7f 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java @@ -22,4 +22,6 @@ Page pageList(Page page, BusLedgerDTO request, DataScope dataScope); Page pageGridList(Page page, BusLedgerDTO request, DataScope dataScope); + + List ledgerIdsByTagNumber(String tagNumber,String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java index 0e08ee3..861b402 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java @@ -1,11 +1,14 @@ package com.casic.missiles.modular.device.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.device.dao.BaseDeviceTypeMapper; import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.casic.missiles.modular.device.service.IBaseDeviceTypeService; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备类型管理 服务实现类 @@ -25,4 +28,11 @@ baseDeviceType.setTypeCode((typeCodeMax + 1) + ""); return this.baseMapper.insert(baseDeviceType) > 0 ? true : false; } + + @Override + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("IS_USED",1); + return this.list(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 6ec692d..6b539f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -7,15 +8,12 @@ import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dto.BusDeviceDTO; -import com.casic.missiles.modular.device.entity.BusDevice; -import com.casic.missiles.modular.device.entity.BusDeviceLog; -import com.casic.missiles.modular.device.service.IBusDeviceLedgerService; -import com.casic.missiles.modular.device.service.IBusDeviceLogService; -import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; +import com.casic.missiles.modular.device.entity.*; +import com.casic.missiles.modular.device.service.*; import lombok.RequiredArgsConstructor; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -41,6 +39,9 @@ private final IBusDeviceLogService iBusDeviceLogService; private final AbstractDictService abstractDictService; private final AbstractDeptService abstractDeptService; + private final IBaseProductService baseProductService; + private final IBusLedgerService iBusLedgerService; + private final IBaseDeviceTypeService deviceTypeService; @Transactional @Override @@ -50,7 +51,7 @@ this.baseMapper.insert(busDevice); //存储绑定关系 if (ObjectUtil.isNotEmpty(busDevice.getLedgerIds())) { - busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(),busDevice.getWatchObject()); + busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } //添加设备操作日志 iBusDeviceLogService.saveBusDeviceLog(busDevice.getDevcode(), "1", busDevice.getTagNumber()); @@ -65,7 +66,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request, DataScope dataScope) { - Page busDevicePage = this.baseMapper.pageList(page, request,dataScope,getDeptIds(request.getDeptId())); + Page busDevicePage = this.baseMapper.pageList(page, request, dataScope, getDeptIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { busDevice.setWatchObject(abstractDictService.getDictNameByCode("watchObject", busDevice.getWatchObject())); @@ -93,6 +94,63 @@ return true; } + + @Transactional + @Override + public List addDeviceBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List baseDeviceTypes = deviceTypeService.list(); + final Integer[] index = {0}; + results.forEach(deviceImportDTO -> { + index[0]++; + //产品编号校验 + BaseProduct baseProduct = baseProductService.getById(deviceImportDTO.getProductId()); + if (null == baseProduct) { + list.add("第" + index[0] + "行,产品编号不存在!"); + return; + } + //设置设备相关信息 + deviceImportDTO.setDeviceType(baseProduct.getDeviceType()); + baseDeviceTypes.forEach(baseDeviceType -> { + if(baseProduct.getDeviceType().equals(baseDeviceType.getId())){ + deviceImportDTO.setWatchObject(baseDeviceType.getWatchObject()); + } + }); + //若安装位号不为空,检查是否存在 + if(ObjectUtil.isNotEmpty(deviceImportDTO.getTagNumber())){ + List ledgerIds = iBusLedgerService.ledgerIdsByTagNumber(deviceImportDTO.getTagNumber(),deviceImportDTO.getWatchObject()); + if(null==ledgerIds||ledgerIds.size()<1){ + list.add("第" + index[0] + "行,安装位号不存在!"); + return; + } + deviceImportDTO.setLedgerIds(ledgerIds); + } + }); + + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + + List busDeviceList = BusDevice.convertDeviceList(results); + //保存设备信息 + this.saveBatch(busDeviceList); + + List busDeviceLedgers = new ArrayList<>(); + + busDeviceList.forEach(device -> { + busDeviceLedgers.add(new BusDeviceLedger(device.getId(),device.getDeviceType(),device.getWatchObject())); + + }); + if (CollectionUtil.isNotEmpty(busDeviceLedgers)) { + this.busDeviceLedgerService.saveBatch(busDeviceLedgers); + } + } else { + list.add("导入数据不能为空"); + } + return list; + } + public String getDeptIds(Long deptId) { if (ObjectUtil.isNotEmpty(deptId)) { //获取子级单位 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerServiceImpl.java index d7b574b..666bc37 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDeptService; @@ -55,6 +56,14 @@ return pageGridList; } + + + public List ledgerIdsByTagNumber(String tagNumber,String type) { + + return this.baseMapper.ledgerIdsByTagNumber(tagNumber,type); + + } + public String getDeptIds(Long deptId) { if (ObjectUtil.isNotEmpty(deptId)) { //获取子级单位 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 275a1ee..75afeda 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -13,18 +14,23 @@ import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** *

@@ -52,7 +58,7 @@ public ReturnDTO listPage(@RequestBody BusDeviceDTO request) { DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page,request,dataScope))); + return ReturnUtil.success(super.packForBT(iBusDeviceService.listPage(page, request, dataScope))); } @ApiOperation("新增") @@ -83,13 +89,52 @@ return ReturnUtil.success(iBusDeviceService.batchDeleteDevice(idsDTO.getIds())); } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + //设置表头与字段映射,可通过反射获取 + Map mapper = new HashMap<>(); + //判断唯一 + mapper.put("设备编号", "devcode"); + mapper.put("产品编号", "productId"); + mapper.put("安装位号", "tagNumber"); + mapper.put("在用情况", "valid"); + mapper.put("安装日期", "installDate"); + try { + results = this.importExcel(BusDeviceImportDTO.class, file, null, null); + List list = iBusDeviceService.addDeviceBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入设备失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("设备编号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); + } + + @ApiOperation("导出列表") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) - public void batchExport(@RequestBody BusDeviceDTO request,HttpServletResponse response) throws IOException { + public void batchExport(@RequestBody BusDeviceDTO request, HttpServletResponse response) throws IOException { Page page = PageFactory.defaultPage(); page.setSize(Integer.MAX_VALUE); - Page devicePage = iBusDeviceService.listPage(page,request,iCommonPermissionService.getAuthService().getLoginUserDataScope()); + Page devicePage = iBusDeviceService.listPage(page, request, iCommonPermissionService.getAuthService().getLoginUserDataScope()); try { iBaseExportService.exportExcel(response, BusDevice.class, devicePage.getRecords(), ExportEnum.DEVICE_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index 0149cc1..743ff7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.device.entity.BusLedger; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -26,4 +27,7 @@ @Param("deptStrs") String deptStrs); Page pageGridList(@Param("scope") DataScope dataScope, Page page, @Param("request") BusLedgerDTO request); + + @Select("SELECT id FROM bus_ledger_all_view WHERE tagNumber = #{tagNumber} and type= #{type} ") + List ledgerIdsByTagNumber(@Param("tagNumber") String tagNumber ,@Param("type") String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java new file mode 100644 index 0000000..fcf777f --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +@Data +public class BusDeviceImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelProperty("设备编号") + private String devCode; + + @ExcelProperty("产品编号") + private Long productId; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("安装日期") + private Date installDate; + + @ExcelProperty("在用情况") + private String valid; + + private String watchObject; + + private Long deviceType; + + private List ledgerIds; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index d272a30..e0afae6 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -61,6 +63,7 @@ @TableField("VALID") private String valid; + @com.alibaba.excel.annotation.format.DateTimeFormat("yyyy-MM-dd") @ExcelProperty(value = "安装时间", order = 12) @ApiModelProperty("安装时间") @TableField("INSTALL_DATE") @@ -138,4 +141,31 @@ @TableField(exist = false) private String position; + public BusDevice() { + } + + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + this.devcode = devcode; + this.deviceType = deviceType; + this.productId = productId; + this.valid = valid; + this.installDate = installDate; + this.watchObject = watchObject; + this.ledgerIds = ledgerIds; + } + + public static List convertDeviceList(List dtoList){ + List busDeviceList = new ArrayList<>(); + dtoList.forEach(deviceImportDTO -> { + busDeviceList.add(new BusDevice(deviceImportDTO.getDevCode(), + deviceImportDTO.getDeviceType(), + deviceImportDTO.getProductId(), + deviceImportDTO.getValid(), + deviceImportDTO.getInstallDate(), + deviceImportDTO.getWatchObject(), + deviceImportDTO.getLedgerIds())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java index 5c8982d..68eefad 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBaseDeviceTypeService.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 设备类型管理 服务类 @@ -15,4 +17,6 @@ boolean saveBaseDeviceType(BaseDeviceType baseDeviceType); + List getList(); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index 6ff3639..7be03a3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.BusDeviceDTO; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.entity.BusDevice; import java.util.List; @@ -24,4 +25,7 @@ boolean batchDeleteDevice(List ids); + List addDeviceBatch(List results); + + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java index 22a3732..6041b7f 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerService.java @@ -22,4 +22,6 @@ Page pageList(Page page, BusLedgerDTO request, DataScope dataScope); Page pageGridList(Page page, BusLedgerDTO request, DataScope dataScope); + + List ledgerIdsByTagNumber(String tagNumber,String type); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java index 0e08ee3..861b402 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BaseDeviceTypeServiceImpl.java @@ -1,11 +1,14 @@ package com.casic.missiles.modular.device.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.device.dao.BaseDeviceTypeMapper; import com.casic.missiles.modular.device.entity.BaseDeviceType; import com.casic.missiles.modular.device.service.IBaseDeviceTypeService; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备类型管理 服务实现类 @@ -25,4 +28,11 @@ baseDeviceType.setTypeCode((typeCodeMax + 1) + ""); return this.baseMapper.insert(baseDeviceType) > 0 ? true : false; } + + @Override + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("IS_USED",1); + return this.list(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 6ec692d..6b539f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -7,15 +8,12 @@ import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dto.BusDeviceDTO; -import com.casic.missiles.modular.device.entity.BusDevice; -import com.casic.missiles.modular.device.entity.BusDeviceLog; -import com.casic.missiles.modular.device.service.IBusDeviceLedgerService; -import com.casic.missiles.modular.device.service.IBusDeviceLogService; -import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; +import com.casic.missiles.modular.device.entity.*; +import com.casic.missiles.modular.device.service.*; import lombok.RequiredArgsConstructor; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -41,6 +39,9 @@ private final IBusDeviceLogService iBusDeviceLogService; private final AbstractDictService abstractDictService; private final AbstractDeptService abstractDeptService; + private final IBaseProductService baseProductService; + private final IBusLedgerService iBusLedgerService; + private final IBaseDeviceTypeService deviceTypeService; @Transactional @Override @@ -50,7 +51,7 @@ this.baseMapper.insert(busDevice); //存储绑定关系 if (ObjectUtil.isNotEmpty(busDevice.getLedgerIds())) { - busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(),busDevice.getWatchObject()); + busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } //添加设备操作日志 iBusDeviceLogService.saveBusDeviceLog(busDevice.getDevcode(), "1", busDevice.getTagNumber()); @@ -65,7 +66,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request, DataScope dataScope) { - Page busDevicePage = this.baseMapper.pageList(page, request,dataScope,getDeptIds(request.getDeptId())); + Page busDevicePage = this.baseMapper.pageList(page, request, dataScope, getDeptIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { busDevice.setWatchObject(abstractDictService.getDictNameByCode("watchObject", busDevice.getWatchObject())); @@ -93,6 +94,63 @@ return true; } + + @Transactional + @Override + public List addDeviceBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List baseDeviceTypes = deviceTypeService.list(); + final Integer[] index = {0}; + results.forEach(deviceImportDTO -> { + index[0]++; + //产品编号校验 + BaseProduct baseProduct = baseProductService.getById(deviceImportDTO.getProductId()); + if (null == baseProduct) { + list.add("第" + index[0] + "行,产品编号不存在!"); + return; + } + //设置设备相关信息 + deviceImportDTO.setDeviceType(baseProduct.getDeviceType()); + baseDeviceTypes.forEach(baseDeviceType -> { + if(baseProduct.getDeviceType().equals(baseDeviceType.getId())){ + deviceImportDTO.setWatchObject(baseDeviceType.getWatchObject()); + } + }); + //若安装位号不为空,检查是否存在 + if(ObjectUtil.isNotEmpty(deviceImportDTO.getTagNumber())){ + List ledgerIds = iBusLedgerService.ledgerIdsByTagNumber(deviceImportDTO.getTagNumber(),deviceImportDTO.getWatchObject()); + if(null==ledgerIds||ledgerIds.size()<1){ + list.add("第" + index[0] + "行,安装位号不存在!"); + return; + } + deviceImportDTO.setLedgerIds(ledgerIds); + } + }); + + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + + List busDeviceList = BusDevice.convertDeviceList(results); + //保存设备信息 + this.saveBatch(busDeviceList); + + List busDeviceLedgers = new ArrayList<>(); + + busDeviceList.forEach(device -> { + busDeviceLedgers.add(new BusDeviceLedger(device.getId(),device.getDeviceType(),device.getWatchObject())); + + }); + if (CollectionUtil.isNotEmpty(busDeviceLedgers)) { + this.busDeviceLedgerService.saveBatch(busDeviceLedgers); + } + } else { + list.add("导入数据不能为空"); + } + return list; + } + public String getDeptIds(Long deptId) { if (ObjectUtil.isNotEmpty(deptId)) { //获取子级单位 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerServiceImpl.java index d7b574b..666bc37 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDeptService; @@ -55,6 +56,14 @@ return pageGridList; } + + + public List ledgerIdsByTagNumber(String tagNumber,String type) { + + return this.baseMapper.ledgerIdsByTagNumber(tagNumber,type); + + } + public String getDeptIds(Long deptId) { if (ObjectUtil.isNotEmpty(deptId)) { //获取子级单位 diff --git a/casic-web/src/main/resources/config/temp/device_template.xlsx b/casic-web/src/main/resources/config/temp/device_template.xlsx new file mode 100644 index 0000000..5423294 --- /dev/null +++ b/casic-web/src/main/resources/config/temp/device_template.xlsx Binary files differ