From 21887ddd12bdba4e2b00456c94a3cb8e1568c000 Mon Sep 17 00:00:00 2001
From: ZengTao <2773468879@qq.com>
Date: 星期一, 12 五月 2025 18:21:52 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10105/r/YiWuProject

---
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelMergeStrategy.java                    |  118 +++++++++++++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/DailyProductionData.java           |   98 ++++++++++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelUtil.java                             |   19 ++
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/LargenScreenMapper.xml                             |  161 +++++++++++++++++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelMerge.java                            |   27 +++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/mapper/LargenScreenMapper.java            |    3 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/impl/LargenScreenServiceImpl.java |   44 ++++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/controller/LargenScreenController.java    |   14 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/LargenScreenService.java          |    5 
 9 files changed, 488 insertions(+), 1 deletions(-)

diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/controller/LargenScreenController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/controller/LargenScreenController.java
index c4d4b17..9ab3d43 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/controller/LargenScreenController.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/controller/LargenScreenController.java
@@ -1,6 +1,7 @@
 package com.mes.largenscreen.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mes.largenscreen.entity.DailyProductionData;
 import com.mes.largenscreen.entity.DailyProductionVO;
 import com.mes.largenscreen.entity.DateRequest;
 import com.mes.largenscreen.service.LargenScreenService;
@@ -14,6 +15,7 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * @Author : zhoush
@@ -34,5 +36,17 @@
         return Result.build(200, "鏌ヨ鎴愬姛", largenScreenService.queryDailyProduction(query));
     }
 
+    @ApiOperation("鎸夌収鏉′欢缁熻姣忔棩鐢熶骇鎯呭喌瀵煎嚭")
+    @PostMapping("/exportDailyProduction")
+    public void exportDailyProduction(@RequestBody @Validated DateRequest query) {
+        largenScreenService.exportDailyProduction(query);
+    }
+
+    @ApiOperation("鎸夌収鏉′欢缁熻鐢熶骇鎯呭喌")
+    @PostMapping("/queryProduction")
+    public Result<List<DailyProductionData>> queryProduction(@RequestBody @Validated DateRequest query) {
+        return Result.build(200, "鏌ヨ鎴愬姛", largenScreenService.queryProduction(query));
+    }
+
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/DailyProductionData.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/DailyProductionData.java
new file mode 100644
index 0000000..89e8ab7
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/DailyProductionData.java
@@ -0,0 +1,98 @@
+package com.mes.largenscreen.entity;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.mes.utils.excel.ExcelMerge;
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2025/3/12 14:30
+ * @Description:
+ */
+@Data
+public class DailyProductionData {
+
+    @ExcelProperty(value = "鏃ユ湡")
+    @ExcelMerge(merge = true)
+    private String productDate;
+
+    @ExcelProperty(value = {"鍒囧壊", "寮�濮嬫椂闂�"})
+    @ExcelMerge(merge = true)
+    private String edgBeginTime;
+    @ExcelProperty(value = {"鍒囧壊", "缁撴潫鏃堕棿"})
+    @ExcelMerge(merge = true)
+    private String edgEndTime;
+    @ExcelProperty(value = {"鍒囧壊", "鎬昏�楁椂"})
+    @ExcelMerge(merge = true)
+    private String edgTimeTotal;
+    @ExcelProperty(value = {"鍒囧壊", "绌洪棽鏃堕暱"})
+    @ExcelMerge(merge = true)
+    private String edgTimeFree;
+    @ExcelProperty(value = {"鍒囧壊", "宸ヤ綔鏃堕暱"})
+    @ExcelMerge(merge = true)
+    private String edgTimeDiff;
+    @ExcelProperty(value = {"鍒囧壊", "鎬荤墖鏁�"})
+    @ExcelMerge(merge = true)
+    private String countOut;
+    @ExcelProperty(value = {"鍒囧壊", "鎬婚潰绉�(m^2)"})
+    @ExcelMerge(merge = true)
+    private String totalAreaOut;
+
+
+    @ExcelProperty(value = {"閽㈠寲", "寮�濮嬫椂闂�"})
+    @ExcelMerge(merge = true)
+    private String bigBeginTime;
+    @ExcelProperty(value = {"閽㈠寲", "缁撴潫鏃堕棿"})
+    @ExcelMerge(merge = true)
+    private String bigEndTime;
+    @ExcelProperty(value = {"閽㈠寲", "鎬昏�楁椂"})
+    @ExcelMerge(merge = true)
+    private String bigTimeTotal;
+    @ExcelMerge(merge = true)
+    @ExcelProperty(value = {"閽㈠寲", "绌洪棽鏃堕暱"})
+    private String bigTimeFree;
+    @ExcelProperty(value = {"閽㈠寲", "宸ヤ綔鏃堕暱"})
+    @ExcelMerge(merge = true)
+    private String bigTimeDiff;
+    @ExcelProperty(value = {"閽㈠寲", "鎬荤倝鏁�"})
+    @ExcelMerge(merge = true)
+    private String temperingLayoutCount;
+    @ExcelProperty(value = {"閽㈠寲", "鎬荤墖鏁�"})
+    @ExcelMerge(merge = true)
+    private String temperingGlassCount;
+    @ExcelProperty(value = {"閽㈠寲", "鎬婚潰绉�(m^2)"})
+    @ExcelMerge(merge = true)
+    private String temperingArea;
+
+
+    @ExcelProperty(value = {"涓┖", "寮�濮嬫椂闂�"})
+    @ExcelMerge(merge = true)
+    private String hollowBeginTime;
+    @ExcelProperty(value = {"涓┖", "缁撴潫鏃堕棿"})
+    @ExcelMerge(merge = true)
+    private String hollowEndTime;
+    @ExcelProperty(value = {"涓┖", "鎬昏�楁椂"})
+    @ExcelMerge(merge = true)
+    private String hollowTimeTotal;
+    @ExcelProperty(value = {"涓┖", "绌洪棽鏃堕暱"})
+    @ExcelMerge(merge = true)
+    private String hollowTimeFree;
+    @ExcelProperty(value = {"涓┖", "宸ヤ綔鏃堕暱"})
+    @ExcelMerge(merge = true)
+    private String hollowTimeDiff;
+    @ExcelProperty(value = {"涓┖", "鎬荤墖鏁�"})
+    @ExcelMerge(merge = true)
+    private String hollowGlassCount;
+    @ExcelProperty(value = {"涓┖", "鎬婚潰绉�(m^2)"})
+    @ExcelMerge(merge = true)
+    private String hollowArea;
+
+    @ExcelProperty(value = {"宸ョ▼淇℃伅", "宸ョ▼鍙�"})
+    private String engineerId;
+    @ExcelProperty(value = {"宸ョ▼淇℃伅", "鎬荤墖閲�"})
+    private String glassTotal;
+    @ExcelProperty(value = {"宸ョ▼淇℃伅", "鎬婚潰绉�(m^2)"})
+    private String glassTotalArea;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/mapper/LargenScreenMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/mapper/LargenScreenMapper.java
index 529b5fd..482f59c 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/mapper/LargenScreenMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/mapper/LargenScreenMapper.java
@@ -1,5 +1,6 @@
 package com.mes.largenscreen.mapper;
 
+import com.mes.largenscreen.entity.DailyProductionData;
 import com.mes.largenscreen.entity.DailyProductionVO;
 
 import java.util.List;
@@ -13,4 +14,6 @@
 public interface LargenScreenMapper {
 
     List<DailyProductionVO> queryDailyProduction(String beginDate, String endDate);
+
+    List<DailyProductionData> exportDailyProduction(String beginDate, String endDate);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/LargenScreenService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/LargenScreenService.java
index f3a419f..7951023 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/LargenScreenService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/LargenScreenService.java
@@ -1,9 +1,9 @@
 package com.mes.largenscreen.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mes.largenscreen.entity.DailyProductionData;
 import com.mes.largenscreen.entity.DailyProductionVO;
 import com.mes.largenscreen.entity.DateRequest;
-import com.mes.largenscreen.entity.PieChartVO;
 
 import java.util.List;
 
@@ -18,4 +18,7 @@
 
     List<DailyProductionVO> querySameDayProduction(DateRequest query);
 
+    void exportDailyProduction(DateRequest query);
+
+    List<DailyProductionData> queryProduction(DateRequest query);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/impl/LargenScreenServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/impl/LargenScreenServiceImpl.java
index 1e0505a..27572cc 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/impl/LargenScreenServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/impl/LargenScreenServiceImpl.java
@@ -1,15 +1,22 @@
 package com.mes.largenscreen.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mes.largenscreen.entity.DailyProductionData;
 import com.mes.largenscreen.entity.DailyProductionVO;
 import com.mes.largenscreen.entity.DateRequest;
 import com.mes.largenscreen.mapper.LargenScreenMapper;
 import com.mes.largenscreen.service.LargenScreenService;
 import com.mes.tools.PageUtil;
+import com.mes.utils.excel.ExcelMergeStrategy;
+import com.mes.utils.excel.ExcelUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
@@ -25,6 +32,8 @@
 
     @Resource
     private LargenScreenMapper largenScreenMapper;
+    @Resource
+    private HttpServletResponse response;
 
     @Override
     public Page<DailyProductionVO> queryDailyProduction(DateRequest query) {
@@ -50,5 +59,40 @@
         return list;
     }
 
+    @Override
+    public void exportDailyProduction(DateRequest query) {
+        try {
+            if (StringUtils.isEmpty(query.getBeginDate())) {
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                Calendar calendar = Calendar.getInstance();
+                calendar.add(Calendar.DAY_OF_MONTH, -6);
+                query.setBeginDate(sdf.format(calendar.getTime()));
+                query.setEndDate(sdf.format(new Date()));
+            }
+            ExcelUtil.setExcelResponseProp(response, "渚涘簲鍟嗗垪琛�-鍚堝苟");
+            List<DailyProductionData> providerList = largenScreenMapper.exportDailyProduction(query.getBeginDate(), query.getEndDate());
+            EasyExcel.write(response.getOutputStream())
+                    .head(DailyProductionData.class)
+                    .registerWriteHandler(new ExcelMergeStrategy(DailyProductionData.class))
+                    .excelType(ExcelTypeEnum.XLSX).sheet().doWrite(providerList);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public List<DailyProductionData> queryProduction(DateRequest query) {
+        if (StringUtils.isEmpty(query.getBeginDate())) {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            Calendar calendar = Calendar.getInstance();
+            calendar.add(Calendar.DAY_OF_MONTH, -6);
+            query.setBeginDate(sdf.format(calendar.getTime()));
+            query.setEndDate(sdf.format(new Date()));
+        }
+        return largenScreenMapper.exportDailyProduction(query.getBeginDate(), query.getEndDate());
+
+
+    }
+
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelMerge.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelMerge.java
new file mode 100644
index 0000000..4776f27
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelMerge.java
@@ -0,0 +1,27 @@
+package com.mes.utils.excel;
+
+import java.lang.annotation.*;
+
+/**
+ * @Author : zhoush
+ * @Date: 2025/5/12 16:51
+ * @Description:
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface ExcelMerge {
+    /**
+     * 鏄惁鍚堝苟鍗曞厓鏍�
+     *
+     * @return true || false
+     */
+    boolean merge() default true;
+
+    /**
+     * 鏄惁涓轰富閿紙鍗宠瀛楁鐩稿悓鐨勮鍚堝苟锛�
+     *
+     * @return true || false
+     */
+    boolean isPrimaryKey() default false;
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelMergeStrategy.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelMergeStrategy.java
new file mode 100644
index 0000000..dab4d9f
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelMergeStrategy.java
@@ -0,0 +1,118 @@
+package com.mes.utils.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.write.handler.RowWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author : zhoush
+ * @Date: 2025/5/12 16:55
+ * @Description:
+ */
+public class ExcelMergeStrategy implements RowWriteHandler {
+
+    /**
+     * 涓婚敭涓嬫爣
+     */
+    private Integer primaryKeyIndex;
+
+    /**
+     * 闇�瑕佸悎骞剁殑鍒楃殑涓嬫爣闆嗗悎
+     */
+    private final List<Integer> mergeColumnIndexList = new ArrayList<>();
+
+    /**
+     * 鏁版嵁绫诲瀷
+     */
+    private final Class<?> elementType;
+
+    public ExcelMergeStrategy(Class<?> elementType) {
+        this.elementType = elementType;
+    }
+
+    @Override
+    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
+        // 鍒ゆ柇鏄惁涓烘爣棰�
+        if (isHead) {
+            return;
+        }
+        // 鑾峰彇褰撳墠宸ヤ綔琛�
+        Sheet sheet = writeSheetHolder.getSheet();
+        // 鍒濆鍖栦富閿笅鏍囧拰闇�瑕佸悎骞跺瓧娈电殑涓嬫爣
+        if (primaryKeyIndex == null) {
+            this.initPrimaryIndexAndMergeIndex(writeSheetHolder);
+        }
+        // 鍒ゆ柇鏄惁闇�瑕佸拰涓婁竴琛岃繘琛屽悎骞�
+        // 涓嶈兘鍜屾爣棰樺悎骞讹紝鍙兘鏁版嵁琛屼箣闂村悎骞�
+        if (row.getRowNum() <= 1) {
+            return;
+        }
+        // 鑾峰彇涓婁竴琛屾暟鎹�
+        Row lastRow = sheet.getRow(row.getRowNum() - 1);
+        // 灏嗘湰琛屽拰涓婁竴琛屾槸鍚屼竴绫诲瀷鐨勬暟鎹紙閫氳繃涓婚敭瀛楁杩涜鍒ゆ柇锛夛紝鍒欓渶瑕佸悎骞�
+        if (lastRow.getCell(primaryKeyIndex).getStringCellValue().equalsIgnoreCase(row.getCell(primaryKeyIndex).getStringCellValue())) {
+            for (Integer mergeIndex : mergeColumnIndexList) {
+                CellRangeAddress cellRangeAddress = new CellRangeAddress(row.getRowNum() - 1, row.getRowNum(), mergeIndex, mergeIndex);
+                sheet.addMergedRegionUnsafe(cellRangeAddress);
+            }
+        }
+    }
+
+    /**
+     * 鍒濆鍖栦富閿笅鏍囧拰闇�瑕佸悎骞跺瓧娈电殑涓嬫爣
+     *
+     * @param writeSheetHolder WriteSheetHolder
+     */
+    private void initPrimaryIndexAndMergeIndex(WriteSheetHolder writeSheetHolder) {
+        // 鑾峰彇褰撳墠宸ヤ綔琛�
+        Sheet sheet = writeSheetHolder.getSheet();
+        // 鑾峰彇鏍囬琛�
+        Row titleRow = sheet.getRow(0);
+        // 鑾峰彇鎵�鏈夊睘鎬у瓧娈�
+        Field[] fields = this.elementType.getDeclaredFields();
+        // 閬嶅巻鎵�鏈夊瓧娈�
+        for (Field field : fields) {
+            // 鑾峰彇@ExcelProperty娉ㄨВ锛岀敤浜庤幏鍙栬瀛楁瀵瑰簲鍒楃殑涓嬫爣
+            ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
+            // 鍒ゆ柇鏄惁涓虹┖
+            if (null == excelProperty) {
+                continue;
+            }
+            // 鑾峰彇鑷畾涔夋敞瑙o紝鐢ㄤ簬鍚堝苟鍗曞厓鏍�
+            ExcelMerge excelMerge = field.getAnnotation(ExcelMerge.class);
+            // 鍒ゆ柇鏄惁闇�瑕佸悎骞�
+            if (null == excelMerge) {
+                continue;
+            }
+            for (int i = 0; i < fields.length; i++) {
+                Cell cell = titleRow.getCell(i);
+                if (null == cell) {
+                    continue;
+                }
+                // 灏嗗瓧娈靛拰琛ㄥご鍖归厤涓�
+                if (excelProperty.value()[0].equalsIgnoreCase(cell.getStringCellValue())) {
+                    if (excelMerge.isPrimaryKey()) {
+                        primaryKeyIndex = i;
+                    }
+                    if (excelMerge.merge()) {
+                        mergeColumnIndexList.add(i);
+                    }
+                }
+            }
+        }
+
+        // 娌℃湁鎸囧畾涓婚敭锛屽垯寮傚父
+        if (null == this.primaryKeyIndex) {
+            throw new IllegalStateException("浣跨敤@ExcelMerge娉ㄨВ蹇呴』鎸囧畾涓婚敭");
+        }
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelUtil.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelUtil.java
new file mode 100644
index 0000000..b8559ef
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/ExcelUtil.java
@@ -0,0 +1,19 @@
+package com.mes.utils.excel;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+/**
+ * @Author : zhoush
+ * @Date: 2025/5/12 17:03
+ * @Description:
+ */
+public class ExcelUtil {
+    public static void setExcelResponseProp(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException {
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        String fileName = URLEncoder.encode(rawFileName, "UTF-8").replaceAll("\\+", "%20");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/LargenScreenMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/LargenScreenMapper.xml
index 14a179a..f505063 100644
--- a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/LargenScreenMapper.xml
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/LargenScreenMapper.xml
@@ -136,6 +136,167 @@
                                                      t6.product_date
         order by t.date
     </select>
+    <select id="exportDailyProduction" resultType="com.mes.largenscreen.entity.DailyProductionData">
+        with edg_storage_history_temp as (
+            select t.glass_id_in as glass_id, t.create_time, STR_TO_DATE(t.create_time, '%Y-%m-%d') as product_date
+            from edg_storage_device_task_history t
+            where t.task_type in
+                  (1, 3)
+              and STR_TO_DATE(t.create_time, '%Y-%m-%d') BETWEEN #{beginDate} and #{endDate}
+        )
+           , big_storage_cage_history_temp as (
+            select t.glass_id, t.create_time, STR_TO_DATE(t.create_time, '%Y-%m-%d') as product_date
+            from big_storage_cage_history_task t
+            where t.task_type = 2
+              and STR_TO_DATE(t.create_time, '%Y-%m-%d') BETWEEN #{beginDate} and #{endDate}
+        )
+           , hollow_big_storage_cage_history_temp as (
+            select t.glass_id, t.create_time, STR_TO_DATE(t.create_time, '%Y-%m-%d') as product_date
+            from hollow_big_storage_cage_history_task t
+            where t.task_type = 5
+              and STR_TO_DATE(t.create_time, '%Y-%m-%d') BETWEEN #{beginDate} and #{endDate}
+        )
+           , engineer_temp as (
+            select STR_TO_DATE(create_time, '%Y-%m-%d') as product_date, engineer_id, glass_total, glass_total_area
+            from engineering
+            where STR_TO_DATE(create_time, '%Y-%m-%d') BETWEEN #{beginDate} and #{endDate}
+        )
+           , edg_temp as (
+            select t.product_date,
+                   count(t.glass_id)                             as
+                                                                    count_out,
+                   round(sum(t1.width * t1.height) / 1000000, 1) as total_area_out
+            from edg_storage_history_temp t
+                     inner join glass_info t1 on t.glass_id = t1.glass_id
+            group by product_date
+        )
+           , edg_time_one as (
+            select product_date,
+                   min(create_time)                                          as edg_begin_time,
+                   max(create_time)                                          as edg_end_time,
+                   TIMESTAMPDIFF(MINUTE, min(create_time), max(create_time)) AS edg_time_total
+            from edg_storage_history_temp
+            group by product_date
+        )
+           , edg_time_two as (
+            SELECT t1.product_date,
+                   sum(TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time)) AS edg_time_free
+            FROM (SELECT product_date,
+                         create_time,
+                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
+                  FROM edg_storage_history_temp
+                 ) t1
+                     JOIN
+                 (SELECT create_time,
+                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
+                  FROM edg_storage_history_temp) t2 ON t1.next_timestamp = t2.create_time
+            WHERE TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time) between 6 and 500
+            group by t1.product_date
+        )
+           , big_storage_temp as (
+            select t.product_date,
+                   count(distinct t1.engineer_id, t1.tempering_layout_id) as tempering_layout_count,
+                   count(distinct t1.glass_id)                            as tempering_glass_count,
+                   round(sum(t1.width * t1.height) / 1000000, 1)          as tempering_area
+            from big_storage_cage_history_temp t
+                     inner join glass_info t1
+                                on t.glass_id = t1.glass_id
+            group by t.product_date
+        )
+           , big_storage_time_base as (
+            select distinct product_date, create_time from big_storage_cage_history_temp
+        )
+           , big_storage_time_one as (select product_date,
+                                             min(create_time)                                          as big_begin_time,
+                                             max(create_time)                                          as big_end_time,
+                                             TIMESTAMPDIFF(MINUTE, min(create_time), max(create_time)) AS big_time_total
+                                      from big_storage_time_base
+                                      group by product_date)
+           , big_storage_time_two as (
+            SELECT t1.product_date,
+                   IFNULL(sum(TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time)), 0) AS big_time_free
+            FROM (SELECT product_date,
+                         create_time,
+                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
+                  FROM big_storage_time_base) t1
+                     JOIN
+                 (SELECT create_time,
+                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
+                  FROM big_storage_time_base) t2 ON t1.next_timestamp = t2.create_time
+            WHERE TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time) between 11 and 500
+            group by t1.product_date
+        )
+           , hollow_big_storage_temp as (
+            select t.product_date,
+                   count(distinct t1.glass_id)                   as hollow_glass_count,
+                   round(sum(t1.width * t1.height) / 1000000, 1) as hollow_area
+            from hollow_big_storage_cage_history_temp t
+                     inner join glass_info t1
+                                on t.glass_id = t1.glass_id
+            group by t.product_date
+        )
+           , hollow_big_storage_time_base as (
+            select distinct product_date, create_time from hollow_big_storage_cage_history_temp
+        )
+           , hollow_big_storage_time_one as (select product_date,
+                                                    min(create_time)                                          as hollow_begin_time,
+                                                    max(create_time)                                          as hollow_end_time,
+                                                    TIMESTAMPDIFF(MINUTE, min(create_time), max(create_time)) AS hollow_time_total
+                                             from hollow_big_storage_time_base
+                                             group by product_date)
+           , hollow_big_storage_time_two as (
+            SELECT t1.product_date,
+                   IFNULL(sum(TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time)), 0) AS hollow_time_free
+            FROM (SELECT product_date,
+                         create_time,
+                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
+                  FROM hollow_big_storage_time_base) t1
+                     JOIN
+                 (SELECT create_time,
+                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
+                  FROM hollow_big_storage_time_base) t2 ON t1.next_timestamp = t2.create_time
+            WHERE TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time) between 11 and 500
+            group by t1.product_date
+        )
+           , result as (
+            select t.count_out,
+                   t.total_area_out,
+                   t1.*,
+                   t2.edg_time_free,
+                   t1.edg_time_total - t2.edg_time_free       as edg_time_diff,
+                   t3.tempering_layout_count,
+                   t3.tempering_glass_count,
+                   t3.tempering_area,
+                   t4.big_begin_time,
+                   t4.big_end_time,
+                   t4.big_time_total,
+                   t5.big_time_free,
+                   t4.big_time_total - t5.big_time_free       as big_time_diff,
+                   t6.hollow_glass_count,
+                   t6.hollow_area,
+                   t7.hollow_begin_time,
+                   t7.hollow_end_time,
+                   t7.hollow_time_total,
+                   t8.hollow_time_free,
+                   t7.hollow_time_total - t8.hollow_time_free as hollow_time_diff,
+                   t9.engineer_id,
+                   t9.glass_total,
+                   t9.glass_total_area
+            from edg_temp t
+                     LEFT JOIN edg_time_one t1 on t.product_date = t1.product_date
+                     LEFT JOIN edg_time_two t2 on t.product_date = t2.product_date
+                     LEFT JOIN big_storage_temp t3 on t.product_date = t3.product_date
+                     LEFT JOIN big_storage_time_one t4 on t.product_date = t4.product_date
+                     LEFT JOIN big_storage_time_two t5 on t.product_date = t5.product_date
+                     LEFT JOIN hollow_big_storage_temp t6 on t.product_date = t6.product_date
+                     LEFT JOIN hollow_big_storage_time_one t7 on t.product_date = t7.product_date
+                     LEFT JOIN hollow_big_storage_time_two t8 on t.product_date = t8.product_date
+                     LEFT JOIN engineer_temp t9 on t.product_date = t9.product_date
+        )
+        select *
+        from result
+        order by product_date
+    </select>
 
 
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0