From da2c594ade5d69621dd11a13bb758477e2dc079e Mon Sep 17 00:00:00 2001 From: “djh” <“3298565835@qq.com”> Date: 星期三, 07 五月 2025 15:57:51 +0800 Subject: [PATCH] 危化品新版修改 --- hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java | 215 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 197 insertions(+), 18 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..7353f7b 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,37 @@ 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.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 +52,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 +69,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 +85,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 +102,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 +124,7 @@ } @Override - public List<HzHazmatUseVO> maxUseStatic() { + public List<HzHazmatUseVO> maxUseStatic(Long companyId) { SysUser currentUser= SecurityUtils.getLoginUser().getUser(); checkUserAllowed(currentUser); @@ -115,9 +133,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 +157,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 +173,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,7 +196,7 @@ @Override - public CommonPage useStatic(String startTime, String endTime) { + public CommonPage useStatic(String startTime, String endTime,Long companyId) { SysUser currentUser= SecurityUtils.getLoginUser().getUser(); checkUserAllowed(currentUser); @@ -186,14 +215,20 @@ }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天以内数据"); } } - //设置分表id - IdTableNameHandler.setCurrentId(currentUser.getCompanyId()); + if (currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())){ + IdTableNameHandler.setCurrentId(companyId); + + }else { + //设置分表id + //todo + IdTableNameHandler.setCurrentId(currentUser.getCompanyId()); + } PageUtils.startPage(); - List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.useCountStatic(startDate, endDate,currentUser.getCompanyId()); + List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.useCountStatic(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()); @@ -210,6 +245,150 @@ 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); + } + + + + } + + + @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