diff --git a/src/main/java/com/dsic/gj_erp/controller/jhgk/DmXbjhController.java b/src/main/java/com/dsic/gj_erp/controller/jhgk/DmXbjhController.java index 723fe05..9ba2a18 100644 --- a/src/main/java/com/dsic/gj_erp/controller/jhgk/DmXbjhController.java +++ b/src/main/java/com/dsic/gj_erp/controller/jhgk/DmXbjhController.java @@ -1,6 +1,9 @@ package com.dsic.gj_erp.controller.jhgk; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dsic.gj_erp.bean.ResultBean; import com.dsic.gj_erp.bean.jhgk.DmXbjh; @@ -11,7 +14,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -44,6 +50,16 @@ public class DmXbjhController { return new ResultBean(dmXbjhs); } + @GetMapping("getVersion") + public ResultBean getVersion(String nf){ + return new ResultBean<>(dmXbjhService.getVersion(nf)); + } + + @GetMapping("getByVersion") + public ResultBean getByVersion(String nf,String version){ + return new ResultBean<>(dmXbjhService.getByVersion(nf,version)); + } + @ApiOperation(value = "批量保存") @PostMapping(value = "/save") public ResultBean save(@RequestBody JSONObject dmXbjhs) { @@ -57,5 +73,6 @@ public class DmXbjhController { dmXbjhService.tj(dmXbjhs); return new ResultBean(); } + } diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/DmXbjhService.java b/src/main/java/com/dsic/gj_erp/service/jhgk/DmXbjhService.java index a8f1a8e..ed9caac 100644 --- a/src/main/java/com/dsic/gj_erp/service/jhgk/DmXbjhService.java +++ b/src/main/java/com/dsic/gj_erp/service/jhgk/DmXbjhService.java @@ -6,6 +6,8 @@ import com.dsic.gj_erp.bean.jhgk.DmXbjh; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -25,4 +27,8 @@ public interface DmXbjhService extends IService { void save(JSONObject dmXbjhs); void tj(List dmXbjhs); + + List> getVersion(String nf); + + Map> getByVersion(String startTime, String _version); } diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmXbjhServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmXbjhServiceImpl.java index 239b9c0..51621c5 100644 --- a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmXbjhServiceImpl.java +++ b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmXbjhServiceImpl.java @@ -3,7 +3,6 @@ package com.dsic.gj_erp.service.jhgk.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; @@ -48,6 +47,7 @@ public class DmXbjhServiceImpl extends ServiceImpl impleme @Override public Map> getList(JSONObject json) { + QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotEmpty(json.getString("dcCh"))) { queryWrapper.eq("dc_ch", json.getString("dcCh")); @@ -55,6 +55,7 @@ public class DmXbjhServiceImpl extends ServiceImpl impleme if (StringUtils.isNotEmpty(json.getString("Zt"))) { queryWrapper.eq("zt", json.getString("Zt")); } + if (StringUtils.isNotEmpty(json.getString("nf"))) { String nf = json.getString("nf"); String startTime = nf.split("~")[0]; @@ -77,6 +78,64 @@ public class DmXbjhServiceImpl extends ServiceImpl impleme return collect; } + public Map> getByVersion(String startTime,String _version){ + List> version = this.getVersion(startTime); + if (ObjectUtil.isNotEmpty(version)&&!version.get(version.size()-1).get("version").equals(_version)) { + List dmXbjhs = new ArrayList<>(); + for (HashMap map : version) { + if (map.get("version").equals(_version)) { + String fileName = (String) map.get("fileName"); + File file = FileUtil.file(xbjhPath, fileName); + if (file.exists()) { + JSONObject jsonObject = this.readFile(file); + for (String key : jsonObject.keySet()) { + JSONArray jsonArray = jsonObject.getJSONArray(key); + for (Object object : jsonArray) { + DmXbjh dmXbjh = modelMapper.map(object, DmXbjh.class); + dmXbjh.setDcCh(key); + dmXbjhs.add(dmXbjh); + } + } + } + } + } + Map> map = dmXbjhs.stream() + .collect(Collectors.groupingBy(DmXbjh::getDcCh)); + + //对map的value进行排序,并返回降序以后的map集合 + LinkedHashMap> collect = map.entrySet().stream().sorted((entry1, entry2) -> { + Double zl1 = entry1.getValue().stream().filter(l -> ObjectUtil.isNotEmpty(l.getZl())).mapToDouble(DmXbjh::getZl).sum(); + Double zl2 = entry2.getValue().stream().filter(l -> ObjectUtil.isNotEmpty(l.getZl())).mapToDouble(DmXbjh::getZl).sum(); + //降序排序 + return zl2.compareTo(zl1); + }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); + return collect; + } + return null; + } + + public List> getVersion(String nf){ + if (nf==null){ + return null; + } + File[] files = FileUtil.ls(xbjhPath); + List> versions = new ArrayList<>(); + for (File file : files) { + String name = FileUtil.getPrefix(file.getName()); + String[] s = name.split("_"); + if (nf.equals(s[0])){ + HashMap map = new HashMap<>(); + map.put("fileName", file.getName()); + map.put("version", s[1]); + versions.add(map); + } + } + return versions; + } + + public JSONObject readFile(File file){ + return ExcelUtil.readDmXbjh(file); + } @Override @Transactional diff --git a/src/main/java/com/dsic/gj_erp/util/ExcelUtil.java b/src/main/java/com/dsic/gj_erp/util/ExcelUtil.java index 2daccf4..5d69893 100644 --- a/src/main/java/com/dsic/gj_erp/util/ExcelUtil.java +++ b/src/main/java/com/dsic/gj_erp/util/ExcelUtil.java @@ -1,5 +1,6 @@ package com.dsic.gj_erp.util; +import cn.hutool.core.io.FileUtil; import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; @@ -9,6 +10,7 @@ import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.multipart.MultipartFile; +import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; @@ -187,49 +189,66 @@ public class ExcelUtil { public static JSONObject readDmXbjh(MultipartFile file) { try { Workbook workbook=isWorkBook(file); - // 获取第一张表 - Sheet sheet = workbook.getSheetAt(0); - Row monthRow=sheet.getRow(2); - Map monthMap=new HashMap<>(); - for (int index = 0; index < monthRow.getPhysicalNumberOfCells(); index++){ - Cell cell = monthRow.getCell(index); - // 转换为字符串类型 - cell.setCellType(CellType.STRING); - monthMap.put(index,cell.toString()); + return read(workbook); + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + + public static JSONObject readDmXbjh(File file) { + try { + Workbook workbook=isWorkBook(file); + return read(workbook); + } catch (Exception e) { + return null; + } + } + + private static JSONObject read(Workbook workbook){ + // 获取第一张表 + Sheet sheet = workbook.getSheetAt(0); + Row monthRow=sheet.getRow(2); + Map monthMap=new HashMap<>(); + for (int index = 0; index < monthRow.getPhysicalNumberOfCells(); index++){ + Cell cell = monthRow.getCell(index); + // 转换为字符串类型 + cell.setCellType(CellType.STRING); + monthMap.put(index,cell.toString()); + } + // String year=""; + // List> mapList=new ArrayList<>(); + // List dmXbjhs=new ArrayList<>(); + JSONObject jsonObject=new JSONObject(); + for (int i = 3; i < sheet.getPhysicalNumberOfRows(); i++) { + Row row = sheet.getRow(i); + String dcch=row.getCell(0).toString(); + if (dcch.contains("待接")||dcch.contains("已接")||dcch.contains("合计")){ + break; } - // String year=""; - // List> mapList=new ArrayList<>(); - // List dmXbjhs=new ArrayList<>(); - JSONObject jsonObject=new JSONObject(); - for (int i = 3; i < sheet.getPhysicalNumberOfRows(); i++) { - Row row = sheet.getRow(i); - String dcch=row.getCell(0).toString(); - if (dcch.contains("待接")||dcch.contains("已接")||dcch.contains("合计")){ - break; - } // Map map=new HashMap<>(); // map.put("dcCh",dcch); - List mapList=new ArrayList<>(); - for (int index = 1; index < row.getPhysicalNumberOfCells(); index++) { - Cell cell = row.getCell(index); - cell.setCellType(CellType.STRING); + List mapList=new ArrayList<>(); + for (int index = 1; index < row.getPhysicalNumberOfCells(); index++) { + Cell cell = row.getCell(index); + cell.setCellType(CellType.STRING); - String month=monthMap.get(index); - if (month.contains("计")){ - continue; - } - String cl=cell+""; - String year=getMergedRegionValue(sheet,1,index).toString(); - // DmXbjh dmXbjh=new DmXbjh(); - Map map=new HashMap(); - map.put("zt","0"); - map.put("nf",year.replace("年","")); - map.put("yf",String.format("%02d", Integer.parseInt(month.replace("月","")))); - if (StringUtils.isNotEmpty(cl)){ - map.put("zl",Double.parseDouble(cl)); - }else { - map.put("zl",0.0); - } + String month=monthMap.get(index); + if (month.contains("计")){ + continue; + } + String cl=cell+""; + String year=getMergedRegionValue(sheet,1,index).toString(); + // DmXbjh dmXbjh=new DmXbjh(); + Map map=new HashMap(); + map.put("zt","0"); + map.put("nf",year.replace("年","")); + map.put("yf",String.format("%02d", Integer.parseInt(month.replace("月","")))); + if (StringUtils.isNotEmpty(cl)){ + map.put("zl",Double.parseDouble(cl)); + }else { + map.put("zl",0.0); + } // dmXbjh.setZt("0"); // dmXbjh.setNf(year.replace("年","")); // dmXbjh.setYf(String.format("%02d", Integer.parseInt(month.replace("月","")))); @@ -241,20 +260,14 @@ public class ExcelUtil { // dmXbjh.setDcCh(dcch); - // dmXbjhs.add(dmXbjh); - mapList.add(map); + // dmXbjhs.add(dmXbjh); + mapList.add(map); // map.put("cl"+year.replace("年","")+String.format("%02d", Integer.parseInt(month.replace("月",""))),cl); - } -// mapList.add(map); - jsonObject.put(dcch,mapList); } - return jsonObject; -// return mapList; - // return dmXbjhs; - } catch (Exception e) { - e.printStackTrace(); - return null; +// mapList.add(map); + jsonObject.put(dcch,mapList); } + return jsonObject; } public static String date(String strDate){ @@ -300,6 +313,20 @@ public class ExcelUtil { } return workbook; } + + public static Workbook isWorkBook(File file) throws IOException { + Workbook workbook;// = new XSSFWorkbook(inputStream); + // 截取路径名 . 后面的后缀名,判断是xls还是xlsx + // 如果这个判断不对,就把equals换成 equalsIgnoreCase() + Pattern pattern = Pattern.compile(".*\\.xls"); + Matcher matcher = pattern.matcher(FileUtil.getSuffix(file.getName())); + if (matcher.matches()){ + workbook = new HSSFWorkbook(FileUtil.getInputStream(file)); + }else{ + workbook = new XSSFWorkbook(FileUtil.getInputStream(file)); + } + return workbook; + } /** * 获取合并单元格的值 * @param sheet