From 65ca50935315a89e219b7c974caf95dc28895ffc Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: Thu, 16 Oct 2025 08:37:56 +0800
Subject: [PATCH] 修改
---
hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java | 243 +++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 216 insertions(+), 27 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..bb3fb9c 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,25 +4,38 @@
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;
import com.gkhy.hazmat.common.utils.StringUtils;
import com.gkhy.hazmat.system.domain.*;
+import com.gkhy.hazmat.system.domain.dto.HazmatUseStatisticDTO;
+import com.gkhy.hazmat.system.domain.vo.HzCompanyMessage;
import com.gkhy.hazmat.system.domain.vo.HzEntryRecordVO;
import com.gkhy.hazmat.system.domain.vo.HzHazmatUseVO;
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;
@@ -40,7 +53,7 @@
private HzWarningMapper warningMapper;
@Override
- public List<HzEntryRecordVO> entryStatic() {
+ public List<HzEntryRecordVO> entryStatic(Long companyId) {
SysUser currentUser= SecurityUtils.getLoginUser().getUser();
Date currentDate=new Date();
DateTime endTime = DateUtil.endOfDay(currentDate);
@@ -57,7 +70,8 @@
dayEntryRecordList.add(entryRecordVO);
startTime=DateUtil.offsetDay(startTime,1);
}
- List<HzEntryRecordVO> entryRecordVOList= entryRecordMapper.entryCountStatic(startDate, endDate,currentUser.getCompanyId());
+ //todo
+ List<HzEntryRecordVO> entryRecordVOList= entryRecordMapper.entryCountStatic(startDate, endDate,currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode()) ? companyId:currentUser.getCompanyId());
if(!entryRecordVOList.isEmpty()) {
Map<String, HzEntryRecordVO> resMap = entryRecordVOList.stream().collect(Collectors.toMap(item -> item.getMonth()+"_"+item.getDay(), item -> item));
for (HzEntryRecordVO er : dayEntryRecordList) {
@@ -72,7 +86,7 @@
}
@Override
- public List<HzEntryRecordVO> useEverydayStatic() {
+ public List<HzEntryRecordVO> useEverydayStatic(Long companyId) {
SysUser currentUser= SecurityUtils.getLoginUser().getUser();
checkUserAllowed(currentUser);
Date currentDate=new Date();
@@ -89,9 +103,14 @@
dayEntryRecordList.add(entryRecordVO);
startTime=DateUtil.offsetDay(startTime,1);
}
- //设置分表id
- IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
- List<HzEntryRecordVO> entryRecordVOList= hazmatMapper.useCountEverydayStatic(startDate, endDate,currentUser.getCompanyId());
+ if (currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())){
+ IdTableNameHandler.setCurrentId(companyId);
+ }else {
+ //设置分表id
+ //todo
+ IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+ }
+ List<HzEntryRecordVO> entryRecordVOList= hazmatMapper.useCountEverydayStatic(startDate, endDate,currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode()) ? companyId:currentUser.getCompanyId());
IdTableNameHandler.removeCurrentId();
if(!entryRecordVOList.isEmpty()) {
Map<String, HzEntryRecordVO> resMap = entryRecordVOList.stream().collect(Collectors.toMap(item -> item.getDay(), item -> item));
@@ -106,7 +125,7 @@
}
@Override
- public List<HzHazmatUseVO> maxUseStatic() {
+ public List<HzHazmatUseVO> maxUseStatic(Long companyId) {
SysUser currentUser= SecurityUtils.getLoginUser().getUser();
checkUserAllowed(currentUser);
@@ -115,9 +134,14 @@
DateTime startTime = DateUtil.beginOfDay(DateUtil.offsetDay(currentDate, -6));
String startDate= DateUtil.format(startTime, DatePattern.NORM_DATETIME_FORMAT);
String endDate=DateUtil.format(endTime,DatePattern.NORM_DATETIME_FORMAT);
- //设置分表id
- IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
- List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.maxUseCountStatic(startDate, endDate,currentUser.getCompanyId());
+ if (currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())){
+ IdTableNameHandler.setCurrentId(companyId);
+ }else {
+ //设置分表id
+ //todo
+ IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+ }
+ List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.maxUseCountStatic(startDate, endDate,currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode()) ? companyId:currentUser.getCompanyId());
IdTableNameHandler.removeCurrentId();
if(!hazmatUseVOList.isEmpty()) {
List<Long> basicIds = hazmatUseVOList.stream().map(HzHazmatUseVO::getBasicId).collect(Collectors.toList());
@@ -134,10 +158,15 @@
}
@Override
- public HzHomeDataVO homeDataStatistic() {
+ public HzHomeDataVO homeDataStatistic(Long companyid) {
SysUser currentUser=SecurityUtils.getLoginUser().getUser();
checkUserAllowed(currentUser);
- Long companyId=currentUser.getCompanyId();
+ Long companyId= null;
+ if (currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())){
+ companyId = companyid;
+ }else {
+ companyId = currentUser.getCompanyId();
+ }
Integer warehouseCount= Math.toIntExact(warehouseMapper.selectCount(Wrappers.<HzWarehouse>lambdaQuery()
.eq(true, HzWarehouse::getDelFlag, 0)
.eq(companyId!=null,HzWarehouse::getCompanyId,companyId)));
@@ -145,7 +174,8 @@
stateList.add(HazmatStatusEnum.USED.getCode());
stateList.add(HazmatStatusEnum.DISCARD.getCode());
//设置分表id
- IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+ //todo
+ IdTableNameHandler.setCurrentId(companyId);
Integer hazmatCount= Math.toIntExact(hazmatMapper.selectCount(Wrappers.<HzHazmat>lambdaQuery()
.notIn(true, HzHazmat::getState, stateList)
.eq(companyId!=null,HzHazmat::getCompanyId,companyId)));
@@ -167,33 +197,44 @@
@Override
- public CommonPage useStatic(String startTime, String endTime) {
+ public CommonPage useStatic(HazmatUseStatisticDTO useStatisticDTO) {
SysUser currentUser= SecurityUtils.getLoginUser().getUser();
checkUserAllowed(currentUser);
String startDate="";
String endDate="";
- if(StringUtils.isBlank(startTime)&&StringUtils.isBlank(endTime)){
+ if(StringUtils.isBlank(useStatisticDTO.getStartTime())&&StringUtils.isBlank(useStatisticDTO.getEndTime())){
Date currentDate=new Date();
startDate= DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(currentDate), -6)), 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)), -6)), 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)), 6)), DatePattern.NORM_DATETIME_FORMAT);
+ } else if (StringUtils.isBlank(useStatisticDTO.getStartTime())&&StringUtils.isNotBlank(useStatisticDTO.getEndTime())) {
+ startDate= DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(new Date(useStatisticDTO.getEndTime())), -6)), DatePattern.NORM_DATETIME_FORMAT);
+ endDate=useStatisticDTO.getEndTime();
+ }else if (StringUtils.isNotBlank(useStatisticDTO.getStartTime())&&StringUtils.isBlank(useStatisticDTO.getEndTime())){
+ startDate=useStatisticDTO.getStartTime();
+ endDate=DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(new Date(useStatisticDTO.getEndTime())), 6)), DatePattern.NORM_DATETIME_FORMAT);
}else{
- startDate=startTime;
- endDate=endTime;
- if(DateUtil.between(new Date(endDate),new Date(startTime), DateUnit.DAY)>90){
+ startDate=useStatisticDTO.getStartTime();
+ endDate=useStatisticDTO.getEndTime();
+ if(DateUtil.between(DateUtil.parse(startDate),DateUtil.parse(useStatisticDTO.getStartTime()), DateUnit.DAY)>90){
throw new ApiException("只能查询90天以内数据");
}
}
- //设置分表id
- IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+ if (currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())){
+ IdTableNameHandler.setCurrentId(useStatisticDTO.getCompanyId());
+
+ }else {
+ //设置分表id
+ //todo
+ IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+ }
PageUtils.startPage();
- List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.useCountStatic(startDate, endDate,currentUser.getCompanyId());
+ if (!currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())){
+ useStatisticDTO.setCompanyId(currentUser.getCompanyId());
+ }
+ useStatisticDTO.setStartTime(startDate);
+ useStatisticDTO.setEndTime(endDate);
+ List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.useCountStatic(useStatisticDTO);
IdTableNameHandler.removeCurrentId();
if(!hazmatUseVOList.isEmpty()) {
List<Long> basicIds = hazmatUseVOList.stream().map(HzHazmatUseVO::getBasicId).collect(Collectors.toList());
@@ -210,6 +251,154 @@
return CommonPage.restPage(hazmatUseVOList);
}
+ @Override
+ public void importBaiscUse(HttpServletResponse response, HazmatUseStatisticDTO useStatisticDTO) throws IOException {
+ SysUser currentUser= SecurityUtils.getLoginUser().getUser();
+ checkUserAllowed(currentUser);
+ OutputStream outputStream = response.getOutputStream();
+ try {
+ String startDate="";
+ String endDate="";
+ if(StringUtils.isBlank(useStatisticDTO.getStartTime())&&StringUtils.isBlank(useStatisticDTO.getEndTime())){
+ 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(useStatisticDTO.getStartTime())&&StringUtils.isNotBlank(useStatisticDTO.getEndTime())) {
+ startDate= DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(new Date(useStatisticDTO.getEndTime())), -29)), DatePattern.NORM_DATETIME_FORMAT);
+ endDate=useStatisticDTO.getEndTime();
+ }else if (StringUtils.isNotBlank(useStatisticDTO.getStartTime())&&StringUtils.isBlank(useStatisticDTO.getEndTime())){
+ startDate=useStatisticDTO.getStartTime();
+ endDate=DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(new Date(useStatisticDTO.getEndTime())), 29)), DatePattern.NORM_DATETIME_FORMAT);
+ }else{
+ startDate=useStatisticDTO.getStartTime();
+ endDate=useStatisticDTO.getEndTime();
+ if(DateUtil.between(DateUtil.parse(startDate),DateUtil.parse(useStatisticDTO.getStartTime()), DateUnit.DAY)>90){
+ throw new ApiException("只能查询90天以内数据");
+ }
+ }
+ //设置分表id
+ IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+// PageUtils.startPage();
+
+ useStatisticDTO.setStartTime(startDate);
+ useStatisticDTO.setEndTime(endDate);
+ useStatisticDTO.setCompanyId(currentUser.getCompanyId());
+ List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.useCountStatic(useStatisticDTO);
+ 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);
+ }
+
+
+
+ }
+
+
+ @Override
+ public List<HzEntryRecordVO> dayUseStatistic(Long companyId) {
+ SysUser currentUser = SecurityUtils.getLoginUser().getUser();
+ checkUserAllowed(currentUser);
+ Date currentDate = new Date();
+
+ // 设置当天的8点作为开始时间,20点作为结束时间
+ DateTime beginOfDay = DateUtil.beginOfDay(currentDate); // 当天零点
+
+ // 从零点偏移8小时得到8点,偏移20小时得到20点
+ DateTime startTime = DateUtil.offsetHour(beginOfDay, 8); // 08:00:00
+ DateTime endTime = DateUtil.offsetHour(beginOfDay, 21); // 20:00:00
+
+ String startDate = DateUtil.format(startTime, DatePattern.NORM_DATETIME_FORMAT);
+ String endDate = DateUtil.format(endTime, DatePattern.NORM_DATETIME_FORMAT);
+
+ // 设置分表ID逻辑
+ if (currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())) {
+ IdTableNameHandler.setCurrentId(companyId);
+ } else {
+ IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+ }
+
+ // 生成每小时的统计列表,初始count为0
+ List<HzEntryRecordVO> hourEntryList = new ArrayList<>();
+ DateTime currentHour = startTime;
+ Integer i = hazmatMapper.countTotal(currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode()) ? companyId:currentUser.getCompanyId());
+ while (currentHour.isBefore(endTime)) { // 从8点开始到20点前,共12个小时
+ String hour = DateUtil.format(currentHour, "HH"); // 两位小时格式,如08,09,...,19
+ HzEntryRecordVO entryRecordVO = new HzEntryRecordVO();
+ entryRecordVO.setHour(hour);
+ entryRecordVO.setCount(0);
+ entryRecordVO.setTotalCount(i);
+ hourEntryList.add(entryRecordVO);
+ currentHour = DateUtil.offsetHour(currentHour, 1); // 增加一小时
+ }
+ // 查询数据库,按小时统计使用量
+ List<HzEntryRecordVO> entryRecordVOList = hazmatMapper.useCountHourlyStatic(startDate, endDate, currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode()) ? companyId:currentUser.getCompanyId()
+ );
+ hourEntryList.get(0).setTotalCount(i);
+ IdTableNameHandler.removeCurrentId();
+ // 将查询结果合并到初始化的每小时列表中
+ if (!entryRecordVOList.isEmpty()) {
+ Map<String, HzEntryRecordVO> resMap = entryRecordVOList.stream()
+ .collect(Collectors.toMap(HzEntryRecordVO::getHour, item -> item));
+ for (HzEntryRecordVO hourEntry : hourEntryList) {
+ HzEntryRecordVO matched = resMap.get(hourEntry.getHour());
+ if (matched != null) {
+ hourEntry.setCount(matched.getCount());
+ }
+ }
+ }
+ return hourEntryList;
+ }
+
+ @Override
+ public List<HzCompanyMessage> companyMessage(Long type) {
+ return hazmatMapper.companyMessage(type);
+ }
+
+
+ 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