Răsfoiți Sursa

停机相关导出

wukai 4 luni în urmă
părinte
comite
e86f59a2dc

+ 413 - 0
jjt-biz/src/main/java/com/jjt/biz/controller/ApiStopExportController.java

@@ -0,0 +1,413 @@
+package com.jjt.biz.controller;
+
+import com.jjt.biz.domain.TwinDevice;
+import com.jjt.biz.service.ITwinDeviceService;
+import com.jjt.biz.vo.StopDetailVO;
+import com.jjt.calc.domain.TwinCalcStop;
+import com.jjt.calc.service.ITwinCalcStopService;
+import com.jjt.common.constant.CacheConstants;
+import com.jjt.common.core.controller.BaseController;
+import com.jjt.common.core.redis.RedisCache;
+import com.jjt.common.utils.DateUtils;
+import com.jjt.common.utils.StringUtils;
+import com.jjt.utils.Tools;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.net.URLEncoder;
+import java.text.ParseException;
+import java.time.*;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
+/**
+ * Excel导出控制类
+ *
+ * @author ruoyi
+ */
+@Api("数据接口")
+@RestController
+@Slf4j
+public class ApiStopExportController extends BaseController {
+    @Resource
+    private ITwinCalcStopService stopService;
+    @Resource
+    private ITwinDeviceService deviceService;
+    @Resource
+    private RedisCache redisCache;
+
+    @ApiOperation("导出停机数据")
+    @GetMapping("/api/export/stops")
+    @CrossOrigin(origins = "*")
+    public void stopsExport(String start, String end, HttpServletResponse response) throws ParseException {
+        Date sTime = DateUtils.parseDate(start, DateUtils.YYYY_MM_DD_HH_MM_SS);
+        Date eTime = DateUtils.parseDate(end, DateUtils.YYYY_MM_DD_HH_MM_SS);
+        List<TwinCalcStop> list = stopService.selectTwinCalcStopListByDate(sTime, eTime);
+        Map<Integer, List<TwinCalcStop>> stopDeviceGroup = list.stream().collect(Collectors.groupingBy(TwinCalcStop::getStopType, LinkedHashMap::new, Collectors.toList()));
+        //1停经片停机,2-CCD停机(相机号+断纱/故障),3-人工停机,4-断电停机,5-设备故障停机,6-落布米数达到停机,7-盘头剩余圈数达到停机
+        String[] stopStr = {"停经片停机", "CCD停机(相机号+断纱/故障)", "人工停机", "断电停机", "设备故障停机", "落布米数达到停机", "盘头剩余圈数达到停机"};
+        //停机次数
+        Integer[] stopNum = new Integer[7];
+        int totalNum = 0;
+        //停机时间
+        Long[] stopTime = new Long[7];
+        Arrays.fill(stopTime, 0L);
+        AtomicReference<Long> totalTime = new AtomicReference<>(0L);
+        Map<Long, TwinDevice> deviceMap = deviceService.deviceMap();
+        for (Map.Entry<Integer, List<TwinCalcStop>> entry : stopDeviceGroup.entrySet()) {
+            Integer stopType = entry.getKey();
+            int pos = stopType - 1;
+            List<TwinCalcStop> stops = entry.getValue();
+            stopNum[pos] = stops.size();
+            totalNum += stops.size();
+            stops.forEach(stop -> {
+                long t = (stop.getEndTime().getTime() - stop.getStartTime().getTime()) / 1000;
+                stopTime[pos] += t;
+                totalTime.updateAndGet(v -> v + t);
+            });
+        }
+        try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("tpl/stops.xlsx"); Workbook wb = new XSSFWorkbook(inputStream); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) {
+            CreationHelper creationHelper = wb.getCreationHelper();
+            CellStyle percentStyle = wb.createCellStyle();
+            percentStyle.setDataFormat(creationHelper.createDataFormat().getFormat("0.00%"));
+            CellStyle timeStyle = wb.createCellStyle();
+            timeStyle.setDataFormat(creationHelper.createDataFormat().getFormat(DateUtils.YYYY_MM_DD_HH_MM_SS));
+            CellStyle rightStyle = wb.createCellStyle();
+            rightStyle.setAlignment(HorizontalAlignment.RIGHT);
+            Sheet sheetAt = wb.getSheetAt(0);
+            Row title = sheetAt.getRow(0);
+            Cell cell = title.getCell(0);
+            cell.setCellValue("停机原因分析(" + start + "至" + end + ")");
+            for (int i = 0; i < stopStr.length; i++) {
+                Row row = sheetAt.createRow(i + 2);
+                Cell[] cells = new Cell[5];
+                for (int j = 0; j < cells.length; j++) {
+                    cells[j] = row.createCell(j);
+                }
+                cells[0].setCellValue(stopStr[i]);
+                cells[1].setCellValue(stopNum[i]);
+                cells[2].setCellValue(Tools.convertHMS(stopTime[i]));
+                cells[2].setCellStyle(rightStyle);
+                float percentNum = BigDecimal.valueOf(stopNum[i]).divide(BigDecimal.valueOf(totalNum), 4, RoundingMode.HALF_UP).floatValue();
+                float percentTimes = BigDecimal.valueOf(stopTime[i]).divide(BigDecimal.valueOf(totalTime.get()), 4, RoundingMode.HALF_UP).floatValue();
+                cells[3].setCellValue(percentNum);
+                cells[3].setCellStyle(percentStyle);
+                cells[4].setCellValue(percentTimes);
+                cells[4].setCellStyle(percentStyle);
+            }
+
+            Sheet sheet = wb.getSheetAt(1);
+            AtomicInteger rowNum = new AtomicInteger(1);
+            list.forEach(stop -> {
+                Row row = sheet.createRow(rowNum.get());
+                Cell[] cells = new Cell[5];
+                for (int j = 0; j < cells.length; j++) {
+                    cells[j] = row.createCell(j);
+                }
+
+                cells[0].setCellValue(deviceMap.get(stop.getDeviceId()).getDeviceName());
+                cells[1].setCellValue(stopStr[stop.getStopType() - 1]);
+                cells[2].setCellValue(stop.getStartTime());
+                cells[2].setCellStyle(timeStyle);
+                cells[3].setCellValue(stop.getEndTime());
+                cells[3].setCellStyle(timeStyle);
+                Duration duration = Duration.between(stop.getStartTime().toInstant(), stop.getEndTime().toInstant());
+                cells[4].setCellValue(Tools.convertHMS(duration.getSeconds()));
+                cells[4].setCellStyle(rightStyle);
+                rowNum.getAndIncrement();
+            });
+
+            // 清空response
+            response.reset();
+            // 设置response的Header
+            response.setCharacterEncoding("UTF-8");
+            //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
+            //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
+            // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
+            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("停机分析" + DateUtils.dateTimeNow() + ".xlsx", "UTF-8"));
+            response.setContentType("application/octet-stream");
+            wb.write(outputStream);
+            outputStream.flush();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @ApiOperation("导出当前停机明细")
+    @GetMapping("/api/export/stop")
+    @CrossOrigin(origins = "*")
+    public void stopExport(HttpServletResponse response) throws ParseException {
+        String[] stopStr = {"", "停经片停机", "断纱停机", "人工停机", "断电停机", "设备故障停机", "落布米数达到停机", "叫料停机"};
+        TwinDevice searchDevice = new TwinDevice();
+        searchDevice.setOnline("1");
+        List<TwinDevice> deviceList = deviceService.selectTwinDeviceList(searchDevice);
+        Object d = redisCache.getCacheObject(CacheConstants.STOP_DETAIL);
+        if (d != null) {
+            List<StopDetailVO> stopList = (List<StopDetailVO>) d;
+            stopList.sort(Comparator.comparing(StopDetailVO::getDeviceId));
+            int[] nums = new int[7];
+            String[] devices = new String[7];
+            try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("tpl/stopDetail.xlsx"); Workbook wb = new XSSFWorkbook(inputStream); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) {
+                CellStyle p2 = wb.createCellStyle();
+                p2.setDataFormat(wb.createDataFormat().getFormat("0.00"));
+                Sheet sheet2 = wb.getSheetAt(1);
+                int rowNum = 2;
+                for (StopDetailVO vo : stopList) {
+                    if (!vo.getHasData()) {
+                        combo(6, nums, devices, vo.getDeviceId());
+                        continue;
+                    }
+//                    if (vo.getSpeed() > 0) {
+//                        combo(0, nums, devices, vo.getDeviceId());
+//                        if (vo.getStop() != 0) {
+//                            combo(8, nums, devices, vo.getDeviceId());
+//                        }
+//                    }
+                    if (vo.getSpeed() > 0f || vo.getStop() == 0) {
+                        combo(0, nums, devices, vo.getDeviceId());
+                    } else {
+                        switch (vo.getStop()) {
+                            case 0:
+//                            combo(9, nums, devices, vo.getDeviceId());
+//                            if (vo.getSpeed() == 0f) {
+//                                combo(7, nums, devices, vo.getDeviceId());
+//                            }
+                                break;
+                            case 1:
+                                combo(1, nums, devices, vo.getDeviceId());
+                                break;
+                            case 2:
+                                combo(2, nums, devices, vo.getDeviceId());
+                                break;
+                            case 6:
+                                combo(3, nums, devices, vo.getDeviceId());
+                                break;
+                            case 7:
+                                combo(4, nums, devices, vo.getDeviceId());
+                                break;
+                            default:
+                                combo(5, nums, devices, vo.getDeviceId());
+                        }
+                    }
+
+
+                    Row row = sheet2.createRow(rowNum++);
+                    Cell[] cells = new Cell[4];
+                    for (int j = 0; j < cells.length; j++) {
+                        cells[j] = row.createCell(j);
+                    }
+                    cells[0].setCellValue(vo.getDeviceId());
+                    cells[1].setCellValue(vo.getSpeed());
+                    cells[1].setCellStyle(p2);
+                    cells[2].setCellValue(vo.getStop());
+                    cells[3].setCellValue(stopStr[vo.getStop()]);
+                }
+                Sheet sheet1 = wb.getSheetAt(0);
+                Cell cell = sheet1.getRow(2).getCell(2);
+                cell.setCellValue(deviceList.size());
+
+                cell = sheet1.getRow(3).getCell(2);
+                cell.setCellValue(nums[0]);
+                cell = sheet1.getRow(3).getCell(4);
+                cell.setCellValue(devices[0]);
+
+                cell = sheet1.getRow(4).getCell(2);
+                cell.setCellValue(nums[1]);
+                cell = sheet1.getRow(4).getCell(4);
+                cell.setCellValue(devices[1]);
+
+                cell = sheet1.getRow(5).getCell(2);
+                cell.setCellValue(nums[2]);
+                cell = sheet1.getRow(5).getCell(4);
+                cell.setCellValue(devices[2]);
+
+                cell = sheet1.getRow(6).getCell(2);
+                cell.setCellValue(nums[3]);
+                cell = sheet1.getRow(6).getCell(4);
+                cell.setCellValue(devices[3]);
+
+                cell = sheet1.getRow(7).getCell(2);
+                cell.setCellValue(nums[4]);
+                cell = sheet1.getRow(7).getCell(4);
+                cell.setCellValue(devices[4]);
+
+                cell = sheet1.getRow(8).getCell(2);
+                cell.setCellValue(nums[5]);
+                cell = sheet1.getRow(8).getCell(4);
+                cell.setCellValue(devices[5]);
+
+                cell = sheet1.getRow(9).getCell(2);
+                cell.setCellValue(nums[6]);
+                cell = sheet1.getRow(9).getCell(4);
+                cell.setCellValue(devices[6]);
+
+//                cell = sheet1.getRow(14).getCell(2);
+//                cell.setCellValue(nums[7]);
+//                cell = sheet1.getRow(14).getCell(4);
+//                cell.setCellValue(devices[7]);
+//
+//                cell = sheet1.getRow(15).getCell(2);
+//                cell.setCellValue(nums[8]);
+//                cell = sheet1.getRow(15).getCell(4);
+//                cell.setCellValue(devices[8]);
+//
+//                cell = sheet1.getRow(16).getCell(2);
+//                cell.setCellValue(nums[9]);
+//                cell = sheet1.getRow(16).getCell(4);
+//                cell.setCellValue(devices[9]);
+                // 清空response
+                response.reset();
+                // 设置response的Header
+                response.setCharacterEncoding("UTF-8");
+                //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
+                //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
+                // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
+                response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("停机明细" + DateUtils.dateTimeNow() + ".xlsx", "UTF-8"));
+                response.setContentType("application/octet-stream");
+                wb.write(outputStream);
+                outputStream.flush();
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 组装设备ID
+     */
+    private void combo(int i, int[] nums, String[] devices, long id) {
+        nums[i]++;
+        if (StringUtils.isNotEmpty(devices[i])) {
+            devices[i] += ",";
+        } else {
+            devices[i] = "";
+        }
+        devices[i] += id;
+    }
+
+    @ApiOperation("停机分类并发导出")
+    @GetMapping("/api/export/stops/type/{type}")
+    @CrossOrigin(origins = "*")
+    public void stopsTypeExport(@PathVariable Integer type, String start, String end, Integer st, Integer et, HttpServletResponse response) {
+        LocalDate s = LocalDate.parse(start);
+        LocalDate e = LocalDate.parse(end);
+        List<TwinCalcStop> list = new ArrayList<>();
+        do {
+            LocalDateTime ldtS = LocalDateTime.of(s, LocalTime.MIN).plusHours(st);
+            LocalDateTime ldtE = LocalDateTime.of(s, LocalTime.MIN).plusHours(et);
+            Date date = Date.from(ldtS.toLocalDate().atStartOfDay(ZoneOffset.of("+8")).toInstant());
+            Date sTime = Date.from(ldtS.atZone(ZoneId.systemDefault()).toInstant());
+            Date eTime = Date.from(ldtE.atZone(ZoneId.systemDefault()).toInstant());
+            List<TwinCalcStop> stopList = stopService.selectTwinCalcStopListByDate(sTime, eTime);
+            stopList.forEach(stop -> {
+                stop.setDataDate(date);
+            });
+            list.addAll(stopList);
+            s = s.plusDays(1);
+        } while (!s.isAfter(e));
+
+        List<TwinCalcStop> stopList = list.stream().filter(stop -> stop.getStopType().equals(type)).collect(Collectors.toList());
+        Map<Long, TwinDevice> deviceMap = deviceService.deviceMap();
+        Map<Date, List<TwinCalcStop>> stopDateGroup = stopList.stream().collect(Collectors.groupingBy(TwinCalcStop::getDataDate, LinkedHashMap::new, Collectors.toList()));
+        //1停经片停机,2-CCD停机(相机号+断纱/故障),3-人工停机,4-断电停机,5-设备故障停机,6-落布米数达到停机,7-盘头剩余圈数达到停机
+        String[] stopStr = {"断纱", "断纱", "人工停机", "断电停机", "设备故障停机", "下卷", "叫料"};
+
+        try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("tpl/stopsType.xlsx"); Workbook wb = new XSSFWorkbook(inputStream); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) {
+            CreationHelper creationHelper = wb.getCreationHelper();
+            CellStyle percentStyle = wb.createCellStyle();
+            percentStyle.setDataFormat(creationHelper.createDataFormat().getFormat("0.00%"));
+            CellStyle timeStyle = wb.createCellStyle();
+            timeStyle.setDataFormat(creationHelper.createDataFormat().getFormat(DateUtils.YYYY_MM_DD_HH_MM_SS));
+            CellStyle dateStyle = wb.createCellStyle();
+            dateStyle.setDataFormat(creationHelper.createDataFormat().getFormat(DateUtils.YYYY_MM_DD));
+            CellStyle p2 = wb.createCellStyle();
+            p2.setDataFormat(wb.createDataFormat().getFormat("0.00"));
+            Sheet sheetAt = wb.getSheetAt(0);
+            int rowNum = 1;
+            AtomicInteger rs = new AtomicInteger(1);
+            for (Map.Entry<Date, List<TwinCalcStop>> entry : stopDateGroup.entrySet()) {
+                List<TwinCalcStop> stops = entry.getValue();
+                Row row = sheetAt.createRow(rowNum);
+                Cell[] cells = new Cell[7];
+                for (int j = 0; j < cells.length; j++) {
+                    cells[j] = row.createCell(j);
+                }
+                cells[0].setCellValue(entry.getKey());
+                cells[0].setCellStyle(dateStyle);
+                cells[1].setCellValue(st + "-" + et);
+                Map<Long, List<TwinCalcStop>> stopDeviceGroup = stops.stream().collect(Collectors.groupingBy(TwinCalcStop::getDeviceId, LinkedHashMap::new, Collectors.toList()));
+                cells[2].setCellValue(stopDeviceGroup.size());
+                int num = stops.size();
+                cells[3].setCellValue(num);
+                //0.最小,1.最大,2.总时间
+                final long[] time = {999999L, 0, 0};
+                Sheet sheet = wb.getSheetAt(1);
+                stops.forEach(stop -> {
+                    long t = (stop.getEndTime().getTime() - stop.getStartTime().getTime()) / 1000;
+                    if (t < time[0]) {
+                        time[0] = t;
+                    }
+                    if (t > time[1]) {
+                        time[1] = t;
+                    }
+                    time[2] += t;
+
+                    Row r1 = sheet.createRow(rs.get());
+                    Cell[] cs = new Cell[6];
+                    for (int j = 0; j < cs.length; j++) {
+                        cs[j] = r1.createCell(j);
+                    }
+                    cs[0].setCellValue(entry.getKey());
+                    cs[0].setCellStyle(dateStyle);
+                    cs[1].setCellValue(st + "-" + et);
+                    cs[2].setCellValue(deviceMap.get(stop.getDeviceId()).getDeviceName());
+                    cs[3].setCellValue(stopStr[stop.getStopType() - 1]);
+                    cs[4].setCellValue(stop.getStartTime());
+                    cs[4].setCellStyle(timeStyle);
+                    cs[5].setCellValue(stop.getEndTime());
+                    cs[5].setCellStyle(timeStyle);
+                    rs.getAndIncrement();
+                });
+
+                cells[4].setCellValue(time[1]);
+                cells[5].setCellValue(time[0]);
+                float avg = BigDecimal.valueOf(time[2]).divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP).floatValue();
+                cells[6].setCellValue(avg);
+                cells[6].setCellStyle(p2);
+                rowNum++;
+            }
+
+            // 清空response
+            response.reset();
+            // 设置response的Header
+            response.setCharacterEncoding("UTF-8");
+            //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
+            //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
+            // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
+            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("并发" + stopStr[type - 1] + "分析" + DateUtils.dateTimeNow() + ".xlsx", "UTF-8"));
+            response.setContentType("application/octet-stream");
+            wb.write(outputStream);
+            outputStream.flush();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+}

+ 11 - 1
jjt-biz/src/main/java/com/jjt/biz/service/ITwinDeviceService.java

@@ -1,8 +1,10 @@
 package com.jjt.biz.service;
 
-import java.util.List;
 import com.jjt.biz.domain.TwinDevice;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 设备管理Service接口
  *
@@ -57,6 +59,7 @@ public interface ITwinDeviceService {
      * @return 结果
      */
     public int deleteTwinDeviceByDeviceId(Long deviceId);
+
     /**
      * 通过设备编号查询设备
      *
@@ -64,4 +67,11 @@ public interface ITwinDeviceService {
      * @return 设备信息
      */
     TwinDevice selectTwinDeviceByCode(String code);
+
+    /**
+     * 获取deviceMap
+     *
+     * @return map
+     */
+    Map<Long, TwinDevice> deviceMap();
 }

+ 27 - 4
jjt-biz/src/main/java/com/jjt/biz/service/impl/TwinDeviceServiceImpl.java

@@ -1,11 +1,16 @@
 package com.jjt.biz.service.impl;
 
-import java.util.List;
-import org.springframework.stereotype.Service;
-import com.jjt.biz.mapper.TwinDeviceMapper;
 import com.jjt.biz.domain.TwinDevice;
+import com.jjt.biz.mapper.TwinDeviceMapper;
 import com.jjt.biz.service.ITwinDeviceService;
+import com.jjt.common.constant.CacheConstants;
+import com.jjt.common.core.redis.RedisCache;
+import org.springframework.stereotype.Service;
+
 import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 设备管理Service业务层处理
@@ -17,6 +22,8 @@ import javax.annotation.Resource;
 public class TwinDeviceServiceImpl implements ITwinDeviceService {
     @Resource
     private TwinDeviceMapper twinDeviceMapper;
+    @Resource
+    private RedisCache redisCache;
 
     /**
      * 查询设备管理
@@ -48,7 +55,7 @@ public class TwinDeviceServiceImpl implements ITwinDeviceService {
      */
     @Override
     public int insertTwinDevice(TwinDevice twinDevice) {
-            return twinDeviceMapper.insertTwinDevice(twinDevice);
+        return twinDeviceMapper.insertTwinDevice(twinDevice);
     }
 
     /**
@@ -83,6 +90,7 @@ public class TwinDeviceServiceImpl implements ITwinDeviceService {
     public int deleteTwinDeviceByDeviceId(Long deviceId) {
         return twinDeviceMapper.deleteTwinDeviceByDeviceId(deviceId);
     }
+
     /**
      * 通过设备编号查询设备
      *
@@ -94,4 +102,19 @@ public class TwinDeviceServiceImpl implements ITwinDeviceService {
         return twinDeviceMapper.selectTwinDeviceByCode(code);
     }
 
+    /**
+     * 获取deviceMap
+     *
+     * @return map
+     */
+    @Override
+    public Map<Long, TwinDevice> deviceMap() {
+        List<TwinDevice> list = redisCache.getCacheObject(CacheConstants.DEVICE_ALL);
+        if (list == null) {
+            list = selectTwinDeviceList(new TwinDevice());
+            redisCache.setCacheObject(CacheConstants.DEVICE_ALL, list);
+        }
+        return list.stream().collect(Collectors.toMap(TwinDevice::getDeviceId, o -> o));
+    }
+
 }

+ 2 - 2
jjt-biz/src/main/java/com/jjt/calc/service/impl/TwinCalcStopServiceImpl.java

@@ -285,8 +285,8 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
     public List<TwinCalcStop> selectTwinCalcStopListByDate(Date sTime, Date eTime) {
         TwinCalcStop stop = new TwinCalcStop();
         Map<String, Object> params = new HashMap<>(16);
-        params.put("sTime", sTime);
-        params.put("eTime", eTime);
+        params.put("sTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,sTime));
+        params.put("eTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, eTime));
         stop.setParams(params);
         return selectTwinCalcStopList(stop);
     }

+ 6 - 0
jjt-biz/src/main/resources/mapper/calc/TwinCalcStopMapper.xml

@@ -39,6 +39,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updatedBy != null  and updatedBy != ''"> and UPDATED_BY = #{updatedBy}</if>
             <if test="updatedTime != null "> and UPDATED_TIME = #{updatedTime}</if>
             <if test="remark != null  and remark != ''"> and REMARK = #{remark}</if>
+            <if test="params.sTime != null and params.eTime != null">
+                and DATEADD(hour, HOUR, DATA_DATE) between #{params.sTime} and #{params.eTime}
+            </if>
+            <if test="params.st != null and params.et != null">
+                and (data_date &lt;= #{params.eTime} and hour>=7) and (end_time>=#{params.sTime} and hour &lt; 7)
+            </if>
         </where>
     </select>
 

+ 5 - 0
jjt-common/src/main/java/com/jjt/common/constant/CacheConstants.java

@@ -90,4 +90,9 @@ public class CacheConstants {
      * 首页配方统计缓存
      */
     public static final String INDEX_FORMULA_TOTAL = TWIN + "indexFormulaTotal";
+
+    /**
+     * 设备缓存
+     */
+    public static final String DEVICE_ALL = TWIN + "deviceAll";
 }