| | |
| | | package com.sandu.ximon.admin.service; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.io.FileUtil; |
| | | import cn.hutool.core.util.RandomUtil; |
| | | import com.alibaba.excel.EasyExcel; |
| | | import com.alibaba.excel.ExcelWriter; |
| | | import com.alibaba.excel.write.metadata.WriteSheet; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.sandu.common.domain.CommonPage; |
| | | import com.sandu.common.execption.BusinessException; |
| | | import com.sandu.common.file.FileUploadDto; |
| | | import com.sandu.common.file.config.FileProperties; |
| | | import com.sandu.common.file.impl.AliOssFileServiceImpl; |
| | | import com.sandu.common.object.BaseConditionVO; |
| | | import com.sandu.common.service.impl.BaseServiceImpl; |
| | | import com.sandu.common.util.ResUtils; |
| | | import com.sandu.common.util.SpringContextHolder; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5LightHeartbeatReportInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5LightDataEnum; |
| | | import com.sandu.ximon.admin.security.SecurityUtils; |
| | | import com.sandu.ximon.admin.utils.RedisUtils; |
| | | import com.sandu.ximon.dao.bo.LightReportDataBo; |
| | | import com.sandu.ximon.dao.domain.Light; |
| | | import com.sandu.ximon.dao.domain.LightReportData; |
| | | import com.sandu.ximon.dao.domain.Pole; |
| | | import com.sandu.ximon.dao.domain.PoleBinding; |
| | | import com.sandu.ximon.dao.enums.OrderByEnums; |
| | | import com.sandu.ximon.dao.mapper.LightReportDataMapper; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.SneakyThrows; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.core.io.ClassPathResource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.servlet.ServletOutputStream; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.File; |
| | | import java.sql.Wrapper; |
| | | import java.time.LocalDate; |
| | | import java.io.FileInputStream; |
| | | import java.io.IOException; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author chenjiantian |
| | |
| | | |
| | | private final FileProperties properties; |
| | | private final AliOssFileServiceImpl fileService; |
| | | private final LightReportDataMapper lightReportDataMapper; |
| | | |
| | | /** |
| | | * 保存上报的灯心跳数据 |
| | |
| | | * @return 是否成功 |
| | | */ |
| | | public boolean saveReportData(String deviceName, A5LightHeartbeatReportInnerFrame.HeartBeatDataPackage heartBeatDataPackage) { |
| | | LightReportData lightReportData = RedisUtils.getBean().get(A5LightDataEnum.LIGHT_HEART_BEAT.getCode() + deviceName, LightReportData.class); |
| | | // LightReportData lightReportData = RedisUtils.getBean().get(A5LightDataEnum.LIGHT_HEART_BEAT.getCode() + deviceName, LightReportData.class); |
| | | |
| | | |
| | | String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")); |
| | | LightReportData lightReportData = new LightReportData(); |
| | | |
| | | if (lightReportData == null) { |
| | | lightReportData = new LightReportData(); |
| | | lightReportData.setCreateTime(LocalDateTime.now()); |
| | | lightReportData.setCreateTime(format); |
| | | } |
| | | lightReportData.setCreateTime(format); |
| | | BeanUtils.copyProperties(heartBeatDataPackage, lightReportData); |
| | | lightReportData.setDeviceCode(deviceName); |
| | | lightReportData.setUpdateTime(LocalDateTime.now()); |
| | | |
| | | lightReportData.setUpdateTime(format); |
| | | //单灯数据保存到缓存里 |
| | | RedisUtils.getBean().set(A5LightDataEnum.LIGHT_HEART_BEAT.getCode() + deviceName, lightReportData); |
| | | |
| | |
| | | * @param keyword 关键词 |
| | | * @param deviceCode 设备码 |
| | | */ |
| | | public CommonPage listReportData(int pageNo, int pageSize, String keyword, String deviceCode) { |
| | | public CommonPage listReportData(int pageNo, int pageSize, String keyword, String deviceCode, Integer order, Integer seq) { |
| | | |
| | | List<LightReportDataBo> lightReportDataBos = new ArrayList<>(pageSize); |
| | | |
| | | CommonPage<String> stringCommonPage = SpringContextHolder.getBean(LightService.class).listDeviceCode(pageNo, pageSize,keyword, deviceCode); |
| | | //排序字段 |
| | | String orderByResult = "t1.create_time"; |
| | | //正序、倒叙 |
| | | String orderBySeq = OrderByEnums.ASC.getCode(); |
| | | if (order != null) { |
| | | switch (order) { |
| | | case 1: |
| | | orderByResult = OrderByEnums.LIGHT_DATA_CREATE_TIME.getCode(); |
| | | break; |
| | | default: |
| | | } |
| | | } |
| | | if (seq != null) { |
| | | switch (seq) { |
| | | case 1: |
| | | orderBySeq = " ASC"; |
| | | break; |
| | | case 2: |
| | | orderBySeq = " DESC"; |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | //排序方式 |
| | | String orderBy = orderByResult + " " + orderBySeq; |
| | | CommonPage<String> stringCommonPage = SpringContextHolder.getBean(LightService.class).listDeviceCode(pageNo, pageSize, keyword, deviceCode, orderBy); |
| | | List<String> macList = stringCommonPage.getList(); |
| | | if (CollUtil.isEmpty(macList)) { |
| | | return new CommonPage(); |
| | |
| | | CommonPage commonPage = CommonPage.restPage(lightReportDataBos); |
| | | commonPage.setTotal(stringCommonPage.getTotal()); |
| | | commonPage.setTotalPage(stringCommonPage.getTotalPage()); |
| | | commonPage.setPageNum(pageNo); |
| | | |
| | | return commonPage; |
| | | } |
| | | |
| | | @SneakyThrows |
| | | public String exportList(int pageNo, int pageSize, String keyword, String deviceCode) { |
| | | public void exportList(HttpServletRequest request, HttpServletResponse response, String deviceCode) { |
| | | |
| | | if (SecurityUtils.getClientId() != null) { |
| | | PoleBinding one = SpringContextHolder.getBean(PoleBindingService.class).getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, deviceCode) |
| | |
| | | } |
| | | } |
| | | |
| | | PageHelper.startPage(pageNo, pageSize); |
| | | List<LightReportDataBo> list = baseMapper.listReportData(keyword, deviceCode); |
| | | List<LightReportDataBo> list = lightReportDataMapper.listReportData(null, deviceCode); |
| | | |
| | | File file = new File("./" + RandomUtil.randomString(12) + ".xlsx"); |
| | | // File file = new File(properties.getUploadRootPath() + "export" + File.separator + RandomUtil.randomString(12) + ".xlsx"); |
| | | // ClassPathResource cpr = new ClassPathResource("public/exportOrder.xlsx"); |
| | | // FileUtil.mkParentDirs(file); |
| | | // |
| | | // ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(cpr.getInputStream()).build(); |
| | | // WriteSheet writeSheet = EasyExcel.writerSheet().build(); |
| | | // excelWriter.fill(list, writeSheet); |
| | | // excelWriter.finish(); |
| | | |
| | | EasyExcel.write(file, LightReportDataBo.class).sheet("模版").doWrite(list); |
| | | |
| | | FileUploadDto fileUploadDto = fileService.uploadFile(file); |
| | | // String url = file.getPath().replace(properties.getUploadRootPath(), ""); |
| | | String url = fileUploadDto.getFileUrl(); |
| | | file.delete(); |
| | | return url; |
| | | |
| | | // return list; |
| | | //文件流化返回给前端 |
| | | findfile(request, response, file); |
| | | //删除文件 |
| | | // file.delete(); |
| | | } |
| | | |
| | | public List<LightReportDataBo> reportDataList(List<String> deviceCodeList, DateTime startDate, DateTime endDate) { |
| | | return baseMapper.reportDataList(deviceCodeList, startDate, endDate); |
| | | /** |
| | | * 文件流化 |
| | | * |
| | | * @param request |
| | | * @param response |
| | | * @param file |
| | | * @throws IOException |
| | | */ |
| | | public void findfile(HttpServletRequest request, HttpServletResponse response, File file) throws IOException { |
| | | ServletOutputStream out = null; |
| | | FileInputStream ips = null; |
| | | try { |
| | | //获取到文字 数据库里对应的附件名字加上老的文件名字:filename 截取到后面的文件类型 例:txt 组成一个新的文件名字:newFileName |
| | | //生成3个随机数,用来生成新的文件名字 |
| | | String newFileName = "单灯数据" + RandomUtil.randomString(3) + ".xlsx"; |
| | | if (!file.exists()) { |
| | | //如果文件不存在就跳出 |
| | | return; |
| | | } |
| | | ips = new FileInputStream(file); |
| | | response.setContentType("application/json;charset=utf-8"); |
| | | //为文件重新设置名字,采用数据库内存储的文件名称 |
| | | response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(newFileName.getBytes("UTF-8"), "ISO8859-1") + "\""); |
| | | out = response.getOutputStream(); |
| | | //读取文件流 |
| | | int len = 0; |
| | | byte[] buffer = new byte[1024 * 10]; |
| | | while ((len = ips.read(buffer)) != -1) { |
| | | out.write(buffer, 0, len); |
| | | } |
| | | out.flush(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | out.close(); |
| | | ips.close(); |
| | | file.delete(); |
| | | } catch (IOException e) { |
| | | System.out.println("关闭流出现异常"); |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 根据macCode获取灯的数据 |
| | | */ |
| | | public List<LightReportData> getReportDataList(BaseConditionVO conditionVO, String macCode) { |
| | | if (macCode.isEmpty()) { |
| | | throw new BusinessException("mac不能为空"); |
| | | } |
| | | |
| | | Light light = SpringContextHolder.getBean(LightService.class) |
| | | .getOne(Wrappers.lambdaQuery(Light.class).eq(Light::getDeviceCode, macCode)); |
| | | if (light == null) { |
| | | throw new BusinessException("系统中不存在该单灯"); |
| | | } |
| | | PageHelper.startPage(conditionVO.getPageNo(), conditionVO.getPageSize()); |
| | | List<LightReportData> list = list(Wrappers.lambdaQuery(LightReportData.class).eq(LightReportData::getDeviceCode, macCode)); |
| | | list.forEach( |
| | | lightReportData -> { |
| | | lightReportData.setCreateTime(lightReportData.getCreateTime1().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| | | lightReportData.setUpdateTime(lightReportData.getUpdateTime1().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| | | } |
| | | ); |
| | | return list; |
| | | } |
| | | } |