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 ++++++++++++++++++++++++++++++++ hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicUseExcelData.java | 41 +++++++++++++ hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzStatisticService.java | 4 + hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzStatisticController.java | 15 +++++ 4 files changed, 157 insertions(+), 1 deletions(-) diff --git a/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzStatisticController.java b/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzStatisticController.java index fd867a5..de8b68e 100644 --- a/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzStatisticController.java +++ b/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzStatisticController.java @@ -12,6 +12,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + /** * <p> * 统计前端控制器 @@ -65,4 +68,16 @@ return CommonResult.success(statisticService.useStatic(startTime,endTime)); } + @ApiOperation(value = "危化品使用记录导出") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"), + @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"), + @ApiImplicitParam(paramType = "query", name = "startTime", dataType = "string", required = false, value = "开始时间,格式xxxx-xx-xx 00:00:00"), + @ApiImplicitParam(paramType = "query", name = "endTime", dataType = "string", required = false, value = "结束时间,格式xxxx-xx-xx 23:59:59") + }) + @GetMapping("/importBaiscUse") + public void ImportBasicUse(HttpServletResponse response, String startTime, String endTime) throws IOException { + statisticService.importBaiscUse(response,startTime,endTime); + } + } diff --git a/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicUseExcelData.java b/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicUseExcelData.java new file mode 100644 index 0000000..c759d41 --- /dev/null +++ b/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicUseExcelData.java @@ -0,0 +1,41 @@ +package com.gkhy.hazmat.common.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; + +@Getter +@Setter +public class HazmatBasicUseExcelData { + @ExcelProperty("序号") + private Integer index; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("CAS") + private String cas; + + @ExcelProperty("试剂类型") + private String productType; + + @ExcelProperty("危险性质") + private String productCharacter; + + @ExcelProperty("供应商") + private String supplier; + + @ExcelProperty("规格") + private String productFormat; + + @ExcelProperty("最小包装类型") + private String minPackage; + + @ExcelProperty("用量") + private Integer count; + + +} diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzStatisticService.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzStatisticService.java index b967829..d63c27c 100644 --- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzStatisticService.java +++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzStatisticService.java @@ -6,6 +6,8 @@ import com.gkhy.hazmat.system.domain.vo.HzHazmatUseVO; import com.gkhy.hazmat.system.domain.vo.HzHomeDataVO; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; /** @@ -43,4 +45,6 @@ * @return */ CommonPage useStatic(String startTime, String endTime); + + void importBaiscUse(HttpServletResponse response, String startTime, String endTime) throws IOException; } 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