From 47eaf795268542576d58e5bcde6daed95c0a1161 Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: 星期二, 04 三月 2025 10:41:12 +0800
Subject: [PATCH] 用量统计页面及导出

---
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java |   98 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 97 insertions(+), 1 deletions(-)

diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java
index 879787f..109ba5f 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java
@@ -4,12 +4,16 @@
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.gkhy.hazmat.common.api.CommonPage;
 import com.gkhy.hazmat.common.config.IdTableNameHandler;
 import com.gkhy.hazmat.common.domain.entity.SysUser;
+import com.gkhy.hazmat.common.enums.HazmatPackageEnum;
 import com.gkhy.hazmat.common.enums.HazmatStatusEnum;
 import com.gkhy.hazmat.common.enums.UserTypeEnum;
+import com.gkhy.hazmat.common.excel.HazmatBasicUseExcelData;
 import com.gkhy.hazmat.common.exception.ApiException;
 import com.gkhy.hazmat.common.utils.PageUtils;
 import com.gkhy.hazmat.common.utils.SecurityUtils;
@@ -20,9 +24,16 @@
 import com.gkhy.hazmat.system.domain.vo.HzHomeDataVO;
 import com.gkhy.hazmat.system.mapper.*;
 import com.gkhy.hazmat.system.service.HzStatisticService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -186,7 +197,7 @@
         }else{
             startDate=startTime;
             endDate=endTime;
-            if(DateUtil.between(new Date(endDate),new Date(startTime), DateUnit.DAY)>90){
+            if(DateUtil.between(DateUtil.parse(startDate),DateUtil.parse(startTime), DateUnit.DAY)>90){
                 throw new ApiException("只能查询90天以内数据");
             }
         }
@@ -210,6 +221,91 @@
         return CommonPage.restPage(hazmatUseVOList);
     }
 
+    @Override
+    public void importBaiscUse(HttpServletResponse response, String startTime, String endTime) throws IOException {
+        SysUser currentUser= SecurityUtils.getLoginUser().getUser();
+        checkUserAllowed(currentUser);
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            String startDate="";
+            String endDate="";
+            if(StringUtils.isBlank(startTime)&&StringUtils.isBlank(endTime)){
+                Date currentDate=new Date();
+                startDate= DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(currentDate), -29)), DatePattern.NORM_DATETIME_FORMAT);
+                endDate=DateUtil.format(DateUtil.endOfDay(currentDate),DatePattern.NORM_DATETIME_FORMAT);
+            } else if (StringUtils.isBlank(startTime)&&StringUtils.isNotBlank(endTime)) {
+                startDate= DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(new Date(endTime)), -29)), DatePattern.NORM_DATETIME_FORMAT);
+                endDate=endTime;
+            }else if (StringUtils.isNotBlank(startTime)&&StringUtils.isBlank(endTime)){
+                startDate=startTime;
+                endDate=DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(new Date(endTime)), 29)), DatePattern.NORM_DATETIME_FORMAT);
+            }else{
+                startDate=startTime;
+                endDate=endTime;
+                if(DateUtil.between(DateUtil.parse(startDate),DateUtil.parse(startTime), DateUnit.DAY)>90){
+                    throw new ApiException("只能查询90天以内数据");
+                }
+            }
+            //设置分表id
+            IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+            PageUtils.startPage();
+            List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.useCountStatic(startDate, endDate,currentUser.getCompanyId());
+            IdTableNameHandler.removeCurrentId();
+            List<HazmatBasicUseExcelData> hazmatBasicUseExcelDatas = new ArrayList<>();
+            if(!hazmatUseVOList.isEmpty()) {
+                List<Long> basicIds = hazmatUseVOList.stream().map(HzHazmatUseVO::getBasicId).collect(Collectors.toList());
+                List<HzHazmatBasic> hzHazmatBasicList = hazmatBasicMapper.selectHazmatBasicListByIds(basicIds);
+                Map<Long, HzHazmatBasic> hazmatBasicMap = hzHazmatBasicList.stream().collect(Collectors.toMap(HzHazmatBasic::getId, item -> item));
+                Integer index=1;
+                for (HzHazmatUseVO hu : hazmatUseVOList) {
+                    HazmatBasicUseExcelData hazmatBasicUseExcelData = new HazmatBasicUseExcelData();
+                    hazmatBasicUseExcelData.setCount(hu.getCount());
+                    HzHazmatBasic hazmatBasic = hazmatBasicMap.get(hu.getBasicId());
+                    if (hazmatBasic != null) {
+                        BeanUtils.copyProperties(hazmatBasic,hazmatBasicUseExcelData);
+                        hazmatBasicUseExcelData.setIndex(index);
+                        hazmatBasicUseExcelData.setProductType(hazmatBasic.getHazmatType());
+                        hazmatBasicUseExcelData.setProductCharacter(hazmatBasic.getHazmatCharacter());
+                        hazmatBasicUseExcelData.setProductFormat(hazmatBasic.getHazmatFormat());
+                        hazmatBasicUseExcelData.setMinPackage(HazmatPackageEnum.getInfoByCode(hazmatBasic.getMinPackage()));
+                    }
+                    index++;
+                    hazmatBasicUseExcelDatas.add(hazmatBasicUseExcelData);
+                }
+            }
+            Date date = new Date();
+            long time = date.getTime();
+            String fileName = "危化品用量统计_"+time;
+            this.setExcelResponseProp(response,fileName);
+
+            //使用 EasyExcel 导出数据
+            EasyExcel.write(response.getOutputStream(), HazmatBasicUseExcelData.class)
+                    .excelType(ExcelTypeEnum.XLSX)
+                    .sheet("危化品使用记录统计表") // 设置 Sheet 名称
+                    .doWrite(hazmatBasicUseExcelDatas); // 写入数据
+
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }finally {
+            outputStream.flush();
+            outputStream.close();
+        }
+
+
+
+    }
+
+    private void setExcelResponseProp(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException {
+        //设置内容类型
+        response.setContentType("application/vnd.vnd.ms-excel");
+        //设置编码格式
+        response.setCharacterEncoding("utf-8");
+        //设置导出文件名称(避免乱码)
+        String fileName = URLEncoder.encode(rawFileName.concat(".xlsx"), "UTF-8");
+        // 设置响应头
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName);
+    }
+
     public void checkUserAllowed(SysUser user) {
         if (user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())) {
             throw new ApiException("管理员不能操作");

--
Gitblit v1.9.2