From b5414c7bf1f07c8e55b36df70decadd63f3c4fd6 Mon Sep 17 00:00:00 2001 From: yuezhihang Date: Sat, 4 Sep 2021 16:43:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=81=E6=95=B0=E6=8D=AE=20=E8=AF=BB?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ImportExcelController.java | 41 ++++ .../ImportExcelDatas/dao/ImportExcelDao.java | 15 ++ .../ImportExcelDatas/entity/ImportDto.java | 25 ++ .../service/ImportExcelService.java | 14 ++ .../service/impl/ImportExcelServiceImpl.java | 230 ++++++++++++++++++ 5 files changed, 325 insertions(+) create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/controller/ImportExcelController.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/dao/ImportExcelDao.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/entity/ImportDto.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/service/ImportExcelService.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/service/impl/ImportExcelServiceImpl.java diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/controller/ImportExcelController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/controller/ImportExcelController.java new file mode 100644 index 00000000..84f3bdf3 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/controller/ImportExcelController.java @@ -0,0 +1,41 @@ +package com.adc.da.slrs.ImportExcelDatas.controller; + +import com.adc.da.base.web.BaseController; +import com.adc.da.http.ResponseMessage; +import com.adc.da.slrs.ImportExcelDatas.entity.ImportDto; +import com.adc.da.slrs.ImportExcelDatas.service.ImportExcelService; +import com.adc.da.slrs.ImportExcelDatas.service.impl.ImportExcelServiceImpl; +import com.adc.da.slrs.sarPersonalCenter.entity.SarUserStar; +import com.adc.da.slrs.sarPersonalCenter.entity.SarUserStarEO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; + +@RestController +@Api(description = "|SarStandPutTime|") +@RequestMapping("/ImportExcel") +public class ImportExcelController extends BaseController { + + @Autowired + private ImportExcelService importExcelService; + + @ApiOperation("批量删除用户收藏") + @PostMapping("/import") + public ResponseMessage deleteList(MultipartFile file,MultipartFile file2) { + Map> mapMap=importExcelService.getExcelData(file,file2); + ResponseMessage responseMessage=new ResponseMessage(); + responseMessage.setMessage(mapMap.toString()); + responseMessage.isOk(); + return responseMessage; + } + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/dao/ImportExcelDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/dao/ImportExcelDao.java new file mode 100644 index 00000000..29293c7e --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/dao/ImportExcelDao.java @@ -0,0 +1,15 @@ +package com.adc.da.slrs.ImportExcelDatas.dao; + +import com.adc.da.slrs.ImportExcelDatas.entity.ImportDto; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; + +public interface ImportExcelDao extends BaseMapper { + + Map>> getExcelData(MultipartFile file); + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/entity/ImportDto.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/entity/ImportDto.java new file mode 100644 index 00000000..ebf4f268 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/entity/ImportDto.java @@ -0,0 +1,25 @@ +package com.adc.da.slrs.ImportExcelDatas.entity; + +import com.adc.da.base.entity.BaseEntity; +import lombok.Data; + +@Data +public class ImportDto extends BaseEntity { + +// 标准号 + private String standId; +// 标准名称 + private String standName; +// 英文名称 + private String standNameEN; +// 发布时间 + private String publishTime; +// 实施时间 + private String implementedTime; +// 标准状态 + private String standStatus; +// 代替标准号 + private String replaceId; +// 附件路径 + private String path; +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/service/ImportExcelService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/service/ImportExcelService.java new file mode 100644 index 00000000..008be67f --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/service/ImportExcelService.java @@ -0,0 +1,14 @@ +package com.adc.da.slrs.ImportExcelDatas.service; + +import com.adc.da.slrs.ImportExcelDatas.entity.ImportDto; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; + +public interface ImportExcelService extends IService { + + Map> getExcelData(MultipartFile file,MultipartFile file2); + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/service/impl/ImportExcelServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/service/impl/ImportExcelServiceImpl.java new file mode 100644 index 00000000..449298f9 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/service/impl/ImportExcelServiceImpl.java @@ -0,0 +1,230 @@ +package com.adc.da.slrs.ImportExcelDatas.service.impl; + +import com.adc.da.slrs.ImportExcelDatas.dao.ImportExcelDao; +import com.adc.da.slrs.ImportExcelDatas.entity.ImportDto; +import com.adc.da.slrs.ImportExcelDatas.service.ImportExcelService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; +import java.util.*; + +@Service +public class ImportExcelServiceImpl extends ServiceImpl implements ImportExcelService { + + + private final static String GN = "GB,GB/T,QC/T,GJB,JB,JT,HG,YV,SY,SH,GA,HJ,QB,JG,NB,JC,YS/T,FZ/T,TB/T,JJG,SJ/T,T/TBPS" + + ",NB/T,CJ/T,YS/T,SJ/T,BB/T,SN/T,SB/T,MH/T,DB11,SZDB/Z,HKG,T/ZSA,CSAE,T/CAS,T/CADA,T/CHTS,T/ITS,T/BJQC"; + private final static String QB = "Q/QCBFC,Q/FT,Q/FL,Q/QCFLC,Q/BQB,Q/SGT," + + "Q-AMSN,QB-NE,Q-IOUM,Q房/AYJ,KNT"; + private final static String DATE = "-2008,—2008,-2009,—2009,-2010,—2010,-2011,—2011,-2012,—2012,-2013,—2013," + + "- 2008,— 2008,- 2009,— 2009,- 2010,— 2010,- 2011,— 2011,- 2012,— 2012,- 2013,— 2013" + + ",-2014,—2014,-2015,—2015,-2016,—2016,-2017,—2017,-2018,—2018,-2019,—2019,-2020,—2020,-2021,—2021" + + ",- 2014,— 2014,- 2015,— 2015,- 2016,— 2016,- 2017,— 2017,- 2018,— 2018,- 2019,— 2019,- 2020,— 2020,- 2021,— 2021"; + + + // file 为主 file2 为附件 + @Override + public Map> getExcelData(MultipartFile file, MultipartFile file2) { + + if (file == null || file.getSize() == 0) { + log.error("文件上传错误,重新上传"); + } + String filename = file.getOriginalFilename(); + if (!(filename.endsWith(".xls") || filename.endsWith(".xlsx"))) { + log.error("文件上传格式错误,请重新上传"); + } + + if (file2 == null || file2.getSize() == 0) { + log.error("文件上传错误,重新上传"); + } + String filename2 = file2.getOriginalFilename(); + if (!(filename2.endsWith(".xls") || filename2.endsWith(".xlsx"))) { + log.error("文件上传格式错误,请重新上传"); + } + + List datas = new ArrayList<>(); + List fujian = new ArrayList<>(); + try { + if (filename.endsWith(".xls")) { + datas = isXls(file); + } else { + datas = isXlsx(file); + } + + if (filename2.endsWith(".xls")) { + fujian = isXls(file2); + } else { + fujian = isXlsx(file2); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + Map> res = new HashMap<>(); +// 国内标准 + List GNS = new ArrayList<>(Arrays.asList(GN.split(","))); +// 企业标准 + List QBS = new ArrayList<>(Arrays.asList(QB.split(","))); + //处理数据 + List InCountry = new ArrayList<>(); + List OutCountry = new ArrayList<>(); + List QiBiao = new ArrayList<>(); + List error = new ArrayList<>(); + //中间的Map 判断标准号属于哪种类型 + Map middle = new HashMap<>(); + datas.forEach(items -> { + //判断是否是正确的数据 + String[] as = items.split(","); + if (!inDate(as[0])) { + ImportDto importDto = getImportDto(as); + error.add(importDto); + middle.put(as[0].trim(), "error-"+error.size()); + } else { + //数据二次拆解 针对标准进行拆解 + String[] step2 = as[0].trim().split(" "); +// 是否国内? 企标 ? 海外 + if (isCheck(GNS, step2[0].trim())) { + ImportDto importDto = getImportDto(as); + InCountry.add(importDto); + middle.put(as[0].trim(), "GNBZ-"+InCountry.size()); + } else if (isCheck(QBS, step2[0].trim())) { + ImportDto importDto = getImportDto(as); + QiBiao.add(importDto); + middle.put(as[0].trim(), "QYBZ-"+QiBiao.size()); + } else { + ImportDto importDto = getImportDto(as); + OutCountry.add(importDto); + middle.put(as[0].trim(), "HWBZ-"+OutCountry.size()); + } + } + }); + res.put("error", error); + res.put("GNBZ", InCountry); + res.put("QYBZ", QiBiao); + res.put("HWBZ", OutCountry); + + fujian.forEach(items2 ->{ + String[] fj=items2.split(","); + if (fj.length>2) { + if (null != middle.get(null != fj[2] ? fj[2].trim() : "")) { + //对应数据位置 + String[] location = middle.get(fj[2].trim()).split("-"); + res.get(location[0]).get(Integer.parseInt(location[1])-1).setPath(fj[3]); + } + } + } ); + + + return res; + } + + private boolean inDate(String as) { + List dates = new ArrayList<>(Arrays.asList(DATE.split(","))); + if (null != as && !"".equals(as)) { + for (String s : dates) { + if (s.equals(as.trim())) { + return true; + } else if (as.trim().contains(s)) { + return true; + } + } + } + return false; + } + + + private boolean isCheck(List QB, String item) { + for (String s : QB) { + if (s.equals(item)) { + return true; + } else if (item.contains(s) && item.startsWith(s)) { + return true; + } + } + return false; + } + + + //赋值方法 + private ImportDto getImportDto(String[] as) { + ImportDto importDto = new ImportDto(); + if (as.length == 7) { + importDto.setStandId(null != as[0] ? as[0].trim() : ""); + importDto.setStandName(null != as[1] ? as[1].trim() : ""); + importDto.setStandNameEN(null != as[2] ? as[2].trim() : ""); + importDto.setPublishTime(null != as[3] ? as[3].trim() : ""); + importDto.setImplementedTime(null != as[4] ? as[4].trim() : ""); + importDto.setStandStatus(null != as[5] ? as[5].trim() : ""); + importDto.setReplaceId(null != as[6] ? as[6].trim() : ""); + } else if (as.length == 6) { + importDto.setStandId(null != as[0] ? as[0].trim() : ""); + importDto.setStandName(null != as[1] ? as[1].trim() : ""); + importDto.setStandNameEN(null != as[2] ? as[2].trim() : ""); + importDto.setPublishTime(null != as[3] ? as[3].trim() : ""); + importDto.setImplementedTime(null != as[4] ? as[4].trim() : ""); + importDto.setStandStatus(null != as[5] ? as[5].trim() : ""); + importDto.setReplaceId(""); + } + return importDto; + } + + + private List isXls(MultipartFile multipartFile) { + List strings = new ArrayList<>(); + try { + InputStream inputStream = multipartFile.getInputStream(); + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); +// 读取有多少页 + int sheetNum = workbook.getNumberOfSheets(); +// 遍历sheet页 + for (int i = 0; i < sheetNum; i++) { + HSSFSheet sheet = workbook.getSheetAt(i); +// 获取有多少行 + int lastNum = sheet.getLastRowNum(); + for (int j = 1; j <= lastNum; j++) { + HSSFRow row = sheet.getRow(j); + if (null != row) { + strings.add(row.getCell(0).getStringCellValue()); + } + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return strings; + } + + private List isXlsx(MultipartFile multipartFile) { + List strings = new ArrayList<>(); + try { + InputStream inputStream = multipartFile.getInputStream(); + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); +// 读取有多少页 + int sheetNum = workbook.getNumberOfSheets(); +// 遍历sheet页 + for (int i = 0; i <= sheetNum; i++) { + XSSFSheet sheet = workbook.getSheetAt(i); +// 获取有多少行 + int lastNum = sheet.getLastRowNum(); + for (int j = 1; j <= lastNum; j++) { + XSSFRow row = sheet.getRow(j); + if (null != row) { + strings.add(row.getCell(0).getStringCellValue()); + } + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return strings; + } + + +}