Browse Source

增加mis日报数据导入功能

chenminghua 2 years ago
parent
commit
1456a0ad12

+ 0 - 6
pom.xml

@@ -374,12 +374,6 @@
 		<!--http请求-->
 
 		<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi</artifactId>
-			<version>5.0.0</version>
-		</dependency>
-
-		<dependency>
 			<groupId>net.sourceforge.jexcelapi</groupId>
 			<artifactId>jxl</artifactId>
 			<version>2.6.12</version>

+ 65 - 0
src/main/java/com/gyee/frame/controller/report/MisReportController.java

@@ -0,0 +1,65 @@
+package com.gyee.frame.controller.report;
+
+
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.service.report.MisDailyDateService;
+import com.gyee.frame.util.DateUtils;
+import com.gyee.frame.util.excel.MisDailyData;
+import com.gyee.frame.util.excel.MisDailyUtil;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * mis日报数据导入
+ */
+@CrossOrigin
+@RestController
+@RequestMapping("/misreport")
+@Api(value = "mis报表数据",tags =  "mis报表数据")
+public class MisReportController {
+
+    @Resource
+    private MisDailyDateService misDailyDateService;
+
+    /**
+     * 导入数据
+     * @param file
+     * @return
+     */
+    @PostMapping("/import/data")
+    @ResponseBody
+    public AjaxResult importData(MultipartFile file) {
+        if (file.isEmpty()) {
+            return AjaxResult.error("导入文件为空!");
+        }
+
+        try {
+            List<MisDailyData> list = MisDailyUtil.importStream(file.getOriginalFilename(), file.getInputStream());
+            misDailyDateService.insert(list);
+            return AjaxResult.success();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return AjaxResult.error("导入文件为空!");
+        }
+    }
+
+    /**
+     * 计算数据
+     * @return
+     */
+    @GetMapping("/caldata")
+    public AjaxResult getData(String st, String et){
+        Date sDate = DateUtils.parseStrtoDate(st, DateUtils.YYYY_MM_DD);
+        Date eDate = DateUtils.parseStrtoDate(et, DateUtils.YYYY_MM_DD);
+
+        List<Object> list = misDailyDateService.getCalData(sDate, eDate);
+        return AjaxResult.successData(200, list);
+    }
+
+}

+ 0 - 96
src/main/java/com/gyee/frame/mapper/auto/EarlywarningmainMapper.java.1

@@ -1,96 +0,0 @@
-package com.gyee.frame.mapper.auto;
-
-import com.gyee.frame.model.auto.Earlywarningmain;
-import com.gyee.frame.model.auto.EarlywarningmainExample;
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-
-public interface EarlywarningmainMapper {
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    long countByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int deleteByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int deleteByPrimaryKey(Short id);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int insert(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int insertSelective(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    List<Earlywarningmain> selectByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    Earlywarningmain selectByPrimaryKey(Short id);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByExampleSelective(@Param("record") Earlywarningmain record, @Param("example") EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByExample(@Param("record") Earlywarningmain record, @Param("example") EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByPrimaryKeySelective(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByPrimaryKey(Earlywarningmain record);
-}

+ 0 - 96
src/main/java/com/gyee/frame/mapper/auto/EarlywarningmainMapper.java.2

@@ -1,96 +0,0 @@
-package com.gyee.frame.mapper.auto;
-
-import com.gyee.frame.model.auto.Earlywarningmain;
-import com.gyee.frame.model.auto.EarlywarningmainExample;
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-
-public interface EarlywarningmainMapper {
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    long countByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int deleteByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int deleteByPrimaryKey(Short id);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int insert(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int insertSelective(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    List<Earlywarningmain> selectByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    Earlywarningmain selectByPrimaryKey(Short id);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByExampleSelective(@Param("record") Earlywarningmain record, @Param("example") EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByExample(@Param("record") Earlywarningmain record, @Param("example") EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByPrimaryKeySelective(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByPrimaryKey(Earlywarningmain record);
-}

+ 96 - 0
src/main/java/com/gyee/frame/mapper/auto/MisdailydataMapper.java

@@ -0,0 +1,96 @@
+package com.gyee.frame.mapper.auto;
+
+import com.gyee.frame.model.auto.Misdailydata;
+import com.gyee.frame.model.auto.MisdailydataExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface MisdailydataMapper {
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    long countByExample(MisdailydataExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    int deleteByExample(MisdailydataExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    int deleteByPrimaryKey(String id);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    int insert(Misdailydata record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    int insertSelective(Misdailydata record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    List<Misdailydata> selectByExample(MisdailydataExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    Misdailydata selectByPrimaryKey(String id);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    int updateByExampleSelective(@Param("record") Misdailydata record, @Param("example") MisdailydataExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    int updateByExample(@Param("record") Misdailydata record, @Param("example") MisdailydataExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    int updateByPrimaryKeySelective(Misdailydata record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table MISDAILYDATA
+     *
+     * @mbg.generated
+     */
+    int updateByPrimaryKey(Misdailydata record);
+}

File diff suppressed because it is too large
+ 3215 - 0
src/main/java/com/gyee/frame/model/auto/Misdailydata.java


File diff suppressed because it is too large
+ 6163 - 0
src/main/java/com/gyee/frame/model/auto/MisdailydataExample.java


+ 140 - 0
src/main/java/com/gyee/frame/service/report/MisDailyDateService.java

@@ -0,0 +1,140 @@
+package com.gyee.frame.service.report;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.frame.mapper.auto.MisdailydataMapper;
+import com.gyee.frame.model.auto.Misdailydata;
+import com.gyee.frame.model.auto.MisdailydataExample;
+import com.gyee.frame.util.DateUtils;
+import com.gyee.frame.util.SnowflakeIdWorker;
+import com.gyee.frame.util.excel.MisDailyData;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class MisDailyDateService {
+
+    @Resource
+    private MisdailydataMapper misdailydataMapper;
+
+    /**
+     * 保存数据
+     *
+     * @param list
+     */
+    @Transactional
+    public void insert(List<MisDailyData> list) {
+        if (list == null || list.size() == 0)
+            return;
+
+        list.stream().forEach(a -> {
+            String str = JSONObject.toJSONString(a);
+            Misdailydata data = JSON.parseObject(str, Misdailydata.class);
+            data.setId(SnowflakeIdWorker.getUUID());
+            boolean flag = selectItem(data);
+            if (!flag)
+                misdailydataMapper.insert(data);
+        });
+    }
+
+
+    /**
+     * 查询是否存在
+     * @param data
+     * @return
+     */
+    public boolean selectItem(Misdailydata data){
+        MisdailydataExample example = new MisdailydataExample();
+        example.createCriteria().andImportdateEqualTo(data.getImportdate())
+                .andUnitNoEqualTo((short) data.getUnitNo());
+
+        List<Misdailydata> list = misdailydataMapper.selectByExample(example);
+        if (list.size() > 0)
+            return true;
+        else
+            return false;
+    }
+
+
+    /**
+     * 计算数据   风速、同期电量等
+     * @param st
+     * @param et
+     */
+    public List<Object> getCalData(Date st, Date et){
+        //当前数据
+        MisdailydataExample example = new MisdailydataExample();
+        example.createCriteria().andImportdateBetween(st, et);
+        example.setOrderByClause(" IMPORTDATE ASC");
+        List<Misdailydata> listC = misdailydataMapper.selectByExample(example);
+
+        //同期数据
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(st);
+        cal.add(Calendar.YEAR, -1);
+        Date sDate = cal.getTime();
+        cal.clear();
+        cal.setTime(et);
+        cal.add(Calendar.YEAR, -1);
+        Date eDate = cal.getTime();
+
+        MisdailydataExample example2 = new MisdailydataExample();
+        example2.createCriteria().andImportdateBetween(sDate, eDate);
+        example2.setOrderByClause(" IMPORTDATE ASC");
+        List<Misdailydata> listT = misdailydataMapper.selectByExample(example2);
+        Map<String, List<Misdailydata>> collect2 = listT.stream().filter(a -> !a.getProjectid().equals("HJ"))
+                .collect(Collectors.groupingBy(Misdailydata::getName, Collectors.toList()));
+
+        //计算数据
+        List<Object> list = new ArrayList<>();
+        if (listC.size() > 0){
+            Map<String, List<Misdailydata>> collect = listC.stream().filter(a -> !a.getProjectid().equals("HJ"))
+                    .collect(Collectors.groupingBy(Misdailydata::getName, Collectors.toList()));
+            collect.forEach((k, v) -> {
+                Map<String, Object> mp = new HashMap<>();
+                double pjfs = v.stream().mapToDouble(Misdailydata::getPjfsJzR).average().getAsDouble();
+                double fdl = v.stream().mapToDouble(Misdailydata::getFdlJzR).sum();
+                double yfdl = v.stream().mapToDouble(Misdailydata::getYfdlJzR).sum();
+                double fdlscada = v.stream().mapToDouble(Misdailydata::getFdlJzRScada).sum();
+                double swdl = v.stream().mapToDouble(Misdailydata::getSwdlJzRT).sum();
+                double zhcydl = v.stream().mapToDouble(Misdailydata::getZhcydlJzR).sum();
+                double zhcydlscada = v.stream().mapToDouble(Misdailydata::getZhcydlJzRScada).sum();
+                mp.put("name", k);
+                mp.put("fs1", pjfs);
+                mp.put("fdl1", fdl);
+                mp.put("ylj1", yfdl);
+                mp.put("fdlscada1", fdlscada);
+                mp.put("swdl1", swdl);
+                mp.put("zhcydl1", zhcydl);
+                mp.put("zhcydlscada1", zhcydlscada);
+
+                List<Misdailydata> ls = collect2.get(k);
+                double pjfs2 = ls.stream().mapToDouble(Misdailydata::getPjfsJzR).average().getAsDouble();
+                double fdl2 = ls.stream().mapToDouble(Misdailydata::getFdlJzR).sum();
+                double yfdl2 = ls.stream().mapToDouble(Misdailydata::getYfdlJzR).sum();
+                double fdlscada2 = ls.stream().mapToDouble(Misdailydata::getFdlJzRScada).sum();
+                double swdl2 = ls.stream().mapToDouble(Misdailydata::getSwdlJzRT).sum();
+                double zhcydl2 = ls.stream().mapToDouble(Misdailydata::getZhcydlJzR).sum();
+                double zhcydlscada2 = ls.stream().mapToDouble(Misdailydata::getZhcydlJzRScada).sum();
+                mp.put("fs2", pjfs2);
+                mp.put("fdl2", fdl2);
+                mp.put("ylj2", yfdl2);
+                mp.put("fdlscada2", fdlscada2);
+                mp.put("swdl2", swdl2);
+                mp.put("zhcydl2", zhcydl2);
+                mp.put("zhcydlscada2", zhcydlscada2);
+
+                list.add(mp);
+            });
+        }
+
+        return list;
+    }
+
+    public static void main(String[] args){
+    }
+}

File diff suppressed because it is too large
+ 1197 - 0
src/main/java/com/gyee/frame/util/excel/MisDailyData.java


+ 143 - 0
src/main/java/com/gyee/frame/util/excel/MisDailyUtil.java

@@ -0,0 +1,143 @@
+package com.gyee.frame.util.excel;
+
+
+import com.gyee.frame.util.DateUtils;
+import com.gyee.frame.util.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.*;
+import java.util.*;
+
+@Slf4j
+public class MisDailyUtil {
+
+    static String name = "C:\\Users\\HP\\Desktop\\2022年数据\\2022年8月国电电力MIS每日数据.xlsx";
+
+
+    /**
+     *
+     * @param is 导入的数据流
+     * @return
+     * @throws Exception
+     */
+    public static List<MisDailyData> importStream(String fileName, InputStream is) throws Exception {
+        if (StringUtils.isEmpty(fileName) || is == null)
+            return null;
+
+        String year = fileName.substring(0, 4);
+        String month = fileName.substring(5,fileName.indexOf("月"));
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(DateUtils.parseStrtoDate(year + "-" + month + "-01", DateUtils.YYYY_MM_DD));
+        int dayMaximum = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
+
+        List<MisDailyData> list = new ArrayList<>();
+        Workbook wb = null;
+
+        //校验文件类型
+        if (checkFile(fileName) == 1) {
+            wb = new XSSFWorkbook(is);
+        } else if (checkFile(fileName) == 2) {
+            wb = new HSSFWorkbook(is);
+        } else {
+            log.error("解析的文件类型错误!");
+            return null;
+        }
+        Iterator<Sheet> sheets = wb.sheetIterator();
+        while(sheets.hasNext()){
+            Sheet sheet = sheets.next();
+
+            //如果sheet不是日报内容则过滤
+            String name = sheet.getSheetName();
+            if (StringUtils.isEmpty(name) || !name.contains("日"))
+                continue;
+            String day = name.substring(0, name.indexOf("日"));
+
+            for (int i = 8; i <= sheet.getLastRowNum(); i++){
+                Row row = sheet.getRow(i);
+                if (row == null)
+                    continue;
+                if (i > 25)
+                    break;
+
+                MisDailyData data;
+                //单元格格式不统一,特殊处理
+                if (i == 9 || i == 12 || i == 14){
+                    data = new MisDailyData(row, sheet.getRow(i + 1));
+                }else{
+                    data = new MisDailyData(row, null);
+                }
+
+                if (i == 10 || i == 13 || i == 15)
+                    continue;
+
+                //比如6/31没有这天,系统会转成7/1,需要过滤掉
+                if (Integer.valueOf(day) > dayMaximum)
+                    continue;
+
+                data.setimportdate(DateUtils.parseStrtoDate(year + "-" + month + "-" + day, DateUtils.YYYY_MM_DD));
+                Map<Integer, String> map = projectMap();
+                data.setProjectId(map.containsKey(data.getunitNo()) ? map.get(data.getunitNo()) : "");
+                list.add(data);
+            }
+        }
+
+        return list;
+    }
+
+
+    /**
+     * 判断File文件的类型
+     *
+     * @param fileName 传入的文件
+     * @return 1-XLS文件,2-XLSX文件,3-文件类型错误
+     */
+    private static int checkFile(String fileName) {
+        if (fileName.endsWith(".xlsx")) {
+            return 1;
+        }
+        if (fileName.endsWith(".xls")) {
+            return 2;
+        }
+
+        return 3;
+    }
+
+
+    private static Map<Integer, String> projectMap(){
+        Map<Integer, String> map = new HashMap<>();
+        map.put(206, "MHS01_GC");
+        map.put(310, "XS02_GC");
+        map.put(311, "MHS02_GC");
+        map.put(312, "SBQ04_GC");
+        map.put(313, "SBQ03_GC");
+        map.put(434, "QS03_GC");
+        map.put(207, "NSS01_GC");
+        map.put(208, "NSS02_GC");
+        map.put(238, "NSS03_GC");
+        map.put(239, "QS01_GC");
+        map.put(245, "QS02_GC");
+        map.put(263, "SBQ01_GC");
+        map.put(286, "SBQ02_GC");
+        map.put(291, "XS01_GC");
+        map.put(0, "HJ");
+
+        return map;
+    }
+
+    public static void main(String[] args) throws Exception {
+        File file = new File(name);
+        String fileName = file.getName();
+
+        InputStream is = new FileInputStream(file);
+
+        List<MisDailyData> list = importStream(fileName, is);
+
+        for (MisDailyData d : list)
+            System.out.println(d.toString());
+    }
+}

File diff suppressed because it is too large
+ 1728 - 0
src/main/resources/mybatis/auto/MisdailydataMapper.xml