From 9013a9201cb49e5777d39a4d08fd6255731fb36d Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期二, 09 十二月 2025 15:23:39 +0800
Subject: [PATCH] 粮情报表提交

---
 fzzy-igdss-view/src/main/java/com/fzzy/igds/GrainReport.view.xml        | 1334 +++++++++++++++++++++++++++++++++++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainDataReport.java   |  269 +++++++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java   |   31 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainDataBuilder.java |  462 ++++++++++++
 fzzy-igdss-view/src/main/java/com/fzzy/igds/GrainReportPR.java          |  131 +++
 5 files changed, 2,223 insertions(+), 4 deletions(-)

diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainDataReport.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainDataReport.java
new file mode 100644
index 0000000..3e6d99d
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainDataReport.java
@@ -0,0 +1,269 @@
+package com.fzzy.igds.data;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Description 绮儏鐨勬姤琛ㄦ暟鎹紝灏嗘瘡涓�灞傜殑鏁版嵁浣跨敤涓�涓璞″睍绀哄嚭鏉�
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class GrainDataReport extends GrainData {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	//绮鍝佺
+	private String foodVariety;
+
+	@Excel(name = "瀹為檯鍌ㄩ噺", sort = 11)
+	//瀹為檯鍌ㄩ噺,鍗曚綅锛氬惃
+	private Double storageReal;
+
+	//浠撳簱绫诲瀷
+	private String depotTypeName;
+
+	//浠撳簱绫诲瀷
+	private String depotType;
+
+	//淇濈鍛�
+	private String storeKeeperName;
+
+	//姘村垎
+	private String perWet = "--";
+
+	//鏉傝川
+	private String perImpurity = "--";
+
+	//鏈�楂樺眰鏁�
+	private int maxZ;
+	
+	// --- 浠ヤ笅鏄墍鏈夊眰淇℃伅---//
+	//鎵�鍦ㄥ眰
+	private int z1;
+	//灞傛渶浣庢俯
+	private String tempMin1 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax1 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve1 = "--";
+	//鎵�鍦ㄥ眰
+	private int z2;
+	//灞傛渶浣庢俯
+	private String tempMin2 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax2 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve2 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z3;
+	//灞傛渶浣庢俯
+	private String tempMin3 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax3 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve3 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z4;
+	//灞傛渶浣庢俯
+	private String tempMin4 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax4 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve4 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z5;
+	//灞傛渶浣庢俯
+	private String tempMin5 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax5 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve5 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z6;
+	//灞傛渶浣庢俯
+	private String tempMin6 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax6 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve6 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z7;
+	//灞傛渶浣庢俯
+	private String tempMin7 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax7 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve7 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z8;
+	//灞傛渶浣庢俯"
+	private String tempMin8 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax8 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve8 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z9;
+	//灞傛渶浣庢俯
+	private String tempMin9 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax9 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve9 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z10;
+	//灞傛渶浣庢俯
+	private String tempMin10 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax10 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve10 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z11;
+	//灞傛渶浣庢俯
+	private String tempMin11 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax11 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve11 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z12;
+	//灞傛渶浣庢俯
+	private String tempMin12 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax12 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve12 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z13;
+	//灞傛渶浣庢俯
+	private String tempMin13 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax13 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve13 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z14;
+	//灞傛渶浣庢俯
+	private String tempMin14 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax14 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve14 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z15;
+	//灞傛渶浣庢俯
+	private String tempMin15 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax15 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve15 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z16;
+	//灞傛渶浣庢俯
+	private String tempMin16 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax16 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve16 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z17;
+	//灞傛渶浣庢俯
+	private String tempMin17 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax17 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve17 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z18;
+	//灞傛渶浣庢俯
+	private String tempMin18 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax18 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve18 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z19;
+	//灞傛渶浣庢俯
+	private String tempMin19 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax19 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve19 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z20;
+	//灞傛渶浣庢俯
+	private String tempMin20 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax20 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve20 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z21;
+	//灞傛渶浣庢俯
+	private String tempMin21 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax21 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve21 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z22;
+	//灞傛渶浣庢俯
+	private String tempMin22 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax22 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve22 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z23;
+	//灞傛渶浣庢俯
+	private String tempMin23 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax23 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve23 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z24;
+	//灞傛渶浣庢俯
+	private String tempMin24 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax24 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve24 = "--";
+
+	//鎵�鍦ㄥ眰
+	private int z25;
+	//灞傛渶浣庢俯
+	private String tempMin25 = "--";
+	//灞傛渶楂樻俯
+	private String tempMax25 = "--";
+	//灞傚钩鍧囨俯
+	private String tempAve25 = "--";
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java
index 24520e5..a1a2d4c 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java
@@ -1,8 +1,11 @@
 package com.fzzy.igds.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fzzy.igds.data.GrainParam;
+import com.fzzy.igds.data.InoutParam;
 import com.fzzy.igds.domain.Grain;
+import com.fzzy.igds.domain.InoutRecord;
 import com.fzzy.igds.mapper.GrainMapper;
 import com.fzzy.igds.utils.ContextUtil;
 import com.fzzy.igds.utils.DateUtil;
@@ -10,7 +13,10 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description
@@ -59,7 +65,32 @@
         return grainMapper.selectList(queryWrapper);
     }
 
+    /**
+     * 鍒嗛〉鏌ヨ鏁版嵁
+     * @param page
+     * @param param
+     */
+    public void pageData(Page<Grain> page, Map<String, Object> param) {
 
+        QueryWrapper<Grain> queryWrapper = new QueryWrapper<>();
 
+        queryWrapper.eq("company_id", ContextUtil.getCompanyId());
+        queryWrapper.eq("dept_id", ContextUtil.subDeptId(null));
+
+        String ids = (String) param.get("ids");
+        if (StringUtils.isNotBlank(ids)) {
+            queryWrapper.in("depot_id", ids);
+        }
+        Date date = (Date) param.get(("start"));
+        if (null != date) {
+            queryWrapper.ge("receive_date", DateUtil.getCurZero(date));
+        }
+        date = (Date) param.get(("end"));
+        if (null != date) {
+            queryWrapper.le("receive_date", DateUtil.getNextZero(date));
+        }
+        queryWrapper.orderByDesc("batch_id");
+        grainMapper.selectPage(page, queryWrapper);
+    }
 
 }
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainDataBuilder.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainDataBuilder.java
index 51003af..42a1d5f 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainDataBuilder.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainDataBuilder.java
@@ -3,10 +3,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.fzzy.igds.constant.Constant;
 import com.fzzy.igds.constant.DepotType;
-import com.fzzy.igds.data.GrainData;
-import com.fzzy.igds.data.GrainLay;
-import com.fzzy.igds.data.GrainPoint;
-import com.fzzy.igds.data.GrainRow;
+import com.fzzy.igds.data.*;
 import com.fzzy.igds.domain.DepotConf;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -19,6 +16,27 @@
  */
 @Slf4j
 public class GrainDataBuilder {
+
+    /**
+     * @param report
+     * @param conf   娉ㄦ剰褰撳墠鍙傛暟鍙槸涓轰簡鑾峰彇鍏跺叏灞�閰嶇疆鍙傛暟锛屼笉鑰冭檻鏄惁涓庡綋鍓嶇伯鎯呬俊鎭槸鍚﹀尮閰�
+     * @return
+     */
+    public static GrainDataReport updateReport(GrainDataReport report, DepotConf conf) {
+        // 鏍规嵁浠撳簱绫诲瀷涓嶅悓杩涜涓嶅悓璋冩暣
+        if (DepotType.TYPE_02.getCode().equals(report.getDepotType())) {// 娴呭渾浠�
+            buildLays2(report, conf);
+        } else if (DepotType.TYPE_03.getCode().equals(report.getDepotType())) {
+            buildLays2(report, conf);
+        } else if (DepotType.TYPE_04.getCode().equals(report.getDepotType())) {
+            buildLays2(report, conf);
+        } else {
+            buildLays(report);
+        }
+
+        report.setPoints(null);
+        return report;
+    }
 
     /**
      * 鏍规嵁鍗曚釜绮儏鐨勬暟鎹俊鎭紝鍖呮嫭閲囬泦鐐瑰拰灞備俊鎭�
@@ -633,4 +651,440 @@
 
         return temp + "";
     }
+
+    /**
+     * 绛掍粨鎶ヨ〃鏁版嵁灏佽
+     *
+     * @param result
+     * @param depotConf
+     */
+    private static void buildLays2(GrainDataReport result, DepotConf depotConf) {
+
+        String points = result.getPoints();
+        String cableRule = result.getCable();
+        String cableCir = result.getCableCir();
+        // 鑾峰彇甯冪嚎瑙勫垯
+        if (StringUtils.isEmpty(cableRule) || StringUtils.isEmpty(cableCir)) {
+            return;
+        }
+        if (StringUtils.isEmpty(points)) {
+            return;
+        }
+
+        // 姣忎竴鍦堝垪鏁�
+        String[] cableRuleAtt = result.getCable().split("-");
+        // 姣忎竴鍦堝眰鏁�
+        String[] cableCirAtt = result.getCableCir().split("-");
+
+        if (cableRuleAtt.length != cableCirAtt.length) {
+            return;
+        }
+
+        // 鑾峰彇鏈�澶х殑灞傞厤缃�--榛樿姣忎竴鍦堥兘涓�鏍�
+        int layMax = Integer.valueOf(cableCirAtt[0]);
+        for (int i = 0; i < cableCirAtt.length; i++) {
+            if (Integer.valueOf(cableCirAtt[i]) >= layMax) layMax = Integer.valueOf(cableCirAtt[i]);
+        }
+        result.setMaxZ(layMax);
+        List<GrainLay> listLays = new ArrayList<>();// 灞傛暟鎹�
+        List<GrainPoint> listPoints = new ArrayList<>();
+        // 鏍规嵁灞傛洿鏂板眰鍒楄〃淇℃伅
+        updateListLaysCir(listLays, cableRuleAtt, cableCirAtt, layMax);
+
+        String[] attr = points.split(",");
+
+        GrainPoint point;
+        Double tempT;
+        GrainLay lay;
+        int x = 0, y = 0, z = 1, fz = 0;// x=鎵�鍦ㄥ湀锛屼粠0寮�濮嬶紱y浠h〃鐢电紗鏍瑰彿浠�0寮�濮嬶紝z=浠h〃鎵�鍦ㄥ眰浠�1寮�濮�
+        List<Integer> listErrorTag = new ArrayList<>();// 鏁呴殰鎴栬�呴敊璇殑鐐�
+        List<Integer> listHighTag = new ArrayList<>();// 楂樻俯鐐�
+
+        int layNum = layMax;// 褰撳墠鍦堢殑灞傛暟
+        int rowNum = 1;// 褰撳墠鍦堢殑鏍规暟
+        int index = 0;// 褰撳墠娓╁害鐐圭殑浣嶇疆
+        int startRow = 0;//褰撳墠绮儏鐢电紗鏍瑰彿
+        for (int i = 0; i < cableRuleAtt.length; i++) {
+            x = i;
+            rowNum = Integer.valueOf(cableRuleAtt[i]);// 鏍规暟
+            for (int k = 0; k < rowNum; k++) {
+                y = k;
+                for (int j = 0; j < layNum; j++) {
+                    z = j;
+                    fz = j + 1;
+                    tempT = Double.valueOf(attr[index]);
+                    index++;
+
+                    point = new GrainPoint(tempT, x, startRow, z, fz);
+
+                    // 缁熻姣忓眰鏁版嵁 --鍒濆鍖栨暟鎹�
+                    lay = listLays.get(z);
+                    point.setTemp(tempT);
+                    listPoints.add(point);
+
+                    if (tempT <= Constant.ERROR_TEMP) {
+                        if (tempT != Constant.ADD_TEMP) {
+                            lay.setSumNum(lay.getSumNum() - 1);
+                        }
+                    } else {
+                        //鍒ゆ柇鏄惁楂樻俯浼樺寲
+                        if (null != depotConf && Constant.YN_Y.equals(depotConf.getGrainAuto())) {
+
+                            lay.setSumTemp(lay.getSumTemp() + tempT);
+                            // 灞傛渶楂樻渶浣�
+                            if (tempT > lay.getTempMax()) {
+                                lay.setTempMax(tempT);
+                            }
+                            if (tempT < lay.getTempMin()) {
+                                lay.setTempMin(tempT);
+                            }
+
+                        } else {
+                            lay.setSumTemp(lay.getSumTemp() + tempT);
+                            // 灞傛渶楂樻渶浣�
+                            if (tempT > lay.getTempMax()) {
+                                lay.setTempMax(tempT);
+                            }
+                            if (tempT < lay.getTempMin()) {
+                                lay.setTempMin(tempT);
+                            }
+                        }
+                    }
+                    if (tempT == Constant.ERROR_TEMP || tempT == Constant.FAULT_TEMP) {
+                        listErrorTag.add(listPoints.size() - 1);
+                    }
+                }
+
+                startRow++;
+            }
+
+        }
+
+        Double maxTemp = -50.0; //姣旇緝鏈�楂樻俯
+        // 璋冩暣灞備俊鎭�
+        for (GrainLay detail : listLays) {
+            if (0 != detail.getSumNum()) {
+                detail.setTempAve(detail.getSumTemp() / detail.getSumNum());
+                detail.setTempAve(NumberUtil.keepPrecision(detail.getTempAve(),
+                        1));
+            }
+
+            if (0 != detail.getSumInNum()) {
+                detail.setTempAveIn(detail.getSumInTemp()
+                        / detail.getSumInNum());
+                detail.setTempAveIn(NumberUtil.keepPrecision(
+                        detail.getTempAveIn(), 1));
+            }
+
+            if (0 != detail.getSumOutNum()) {
+                detail.setTempAveOut(detail.getSumOutTemp()
+                        / detail.getSumOutNum());
+                detail.setTempAveOut(NumberUtil.keepPrecision(
+                        detail.getTempAveOut(), 1));
+            }
+            //杩囨护鎺夋瘮杈冪殑鏈�澶ф渶灏忕殑鍊�50鍜�-50
+            if (detail.getTempMax() == -50) {
+                detail.setTempMax(0.0);
+            }
+            if (detail.getTempMin() == 50) {
+                detail.setTempMin(0.0);
+            }
+            if (listHighTag.size() > 0) {
+                if (detail.getTempMax() > maxTemp) {
+                    maxTemp = detail.getTempMax();
+                }
+            }
+            // 灏嗗眰鏁版嵁杞崲涓鸿鏁版嵁
+            updateReportLayInfo(result, detail);
+        }
+    }
+
+    private static void buildLays(GrainDataReport report) {
+        String points = report.getPoints();
+        String cable = report.getCable();
+        // 鑾峰彇甯冪嚎瑙勫垯
+        if (StringUtils.isEmpty(cable)) {
+            return;
+        }
+        if (StringUtils.isEmpty(points)) {
+            return;
+        }
+
+        String[] attr = cable.split("-");
+        int cableZ = Integer.valueOf(attr[0]);
+        int cableY = Integer.valueOf(attr[1]);
+        int cableX = Integer.valueOf(attr[2]);
+        report.setMaxZ(cableZ);
+        List<GrainPoint> listPoints = new ArrayList<GrainPoint>();
+        List<GrainLay> listLays = initDetail(cableX, cableY, cableZ);
+
+        attr = points.split(",");
+
+        GrainPoint point;
+        Double tempT;
+        GrainLay lay;
+        List<Integer> listErrorTag = new ArrayList<>();// 鏁呴殰鎴栬�呴敊璇殑鐐�
+        Double sumAll = 0.0;
+
+        Double sumAllTemp = 0.0;
+
+        int sumAllNum = 0;
+        int x = 0, y = 0, z = 0, fz = 0;
+        for (int i = 0; i < attr.length; i++) {
+            z = i % cableZ;
+            fz = z + 1;
+            x = i / (cableZ * cableY);
+            y = x * (cableZ * cableY);
+            y = (i - y) / cableZ;
+
+            // 鍊掕浆X杞�
+            x = cableX - 1 - x;
+
+            tempT = Double.valueOf(attr[i]);
+            point = new GrainPoint(tempT, x, y, z, fz);
+
+            // 缁熻姣忓眰鏁版嵁 --鍒濆鍖栨暟鎹�
+            lay = listLays.get(z);
+
+            if (tempT <= Constant.ERROR_TEMP) {
+                listErrorTag.add(i);
+
+                lay.setSumNum(lay.getSumNum() - 1);
+
+                if (x == (cableX - 1) || y == (cableY - 1) || x == 0 || y == 0) {
+                    lay.setSumOutNum(lay.getSumOutNum() - 1);
+                } else {
+                    lay.setSumInNum(lay.getSumInNum() - 1);
+                }
+            } else {
+                sumAllTemp += tempT;
+
+                if (tempT > report.getTempMax()) {
+                    report.setTempMax(tempT);
+                }
+
+                // 灞傝鍒楄ˉ鍏�
+                lay.setSumTemp(lay.getSumTemp() + tempT);
+
+                if (x == (cableX - 1) || y == (cableY - 1) || x == 0 || y == 0) {
+                    lay.setSumOutTemp(lay.getSumOutTemp() + tempT);
+                } else {
+                    lay.setSumInTemp(lay.getSumInTemp() + tempT);
+                }
+
+                // 灞傛渶楂樻渶浣�
+                if (tempT > lay.getTempMax()) {
+                    lay.setTempMax(tempT);
+                }
+                if (tempT < lay.getTempMin()) {
+                    lay.setTempMin(tempT);
+                }
+
+                // log.info("----娓╁害鐐�={}",tempT);
+                sumAll += tempT;
+                sumAllNum = sumAllNum + 1;
+                point.setTemp(tempT);
+            }
+
+            listPoints.add(point);
+        }
+
+        // 璋冩暣灞備俊鎭�
+        for (GrainLay detail : listLays) {
+            if (0 != detail.getSumNum()) {
+                detail.setTempAve(detail.getSumTemp() / detail.getSumNum());
+                detail.setTempAve(NumberUtil.keepPrecision(detail.getTempAve(),
+                        1));
+            }
+
+            if (0 != detail.getSumInNum()) {
+                detail.setTempAveIn(detail.getSumInTemp()
+                        / detail.getSumInNum());
+                detail.setTempAveIn(NumberUtil.keepPrecision(
+                        detail.getTempAveIn(), 1));
+            }
+
+            if (0 != detail.getSumOutNum()) {
+                detail.setTempAveOut(detail.getSumOutTemp()
+                        / detail.getSumOutNum());
+                detail.setTempAveOut(NumberUtil.keepPrecision(
+                        detail.getTempAveOut(), 1));
+            }
+
+            // 灏嗗眰鏁版嵁杞崲涓鸿鏁版嵁
+            updateReportLayInfo(report, detail);
+        }
+    }
+
+    private static void updateReportLayInfo(GrainDataReport report, GrainLay lay) {
+
+        if (1 == lay.getFz()) {// 绗�1灞�
+            report.setZ1(lay.getFz());
+            report.setTempAve1(lay.getTempAve() + "");
+            report.setTempMax1(lay.getTempMax() + "");
+            report.setTempMin1(lay.getTempMin() + "");
+        }
+        if (2 == lay.getFz()) {// 绗�2灞�
+            report.setZ2(lay.getFz());
+            report.setTempAve2(lay.getTempAve() + "");
+            report.setTempMax2(lay.getTempMax() + "");
+            report.setTempMin2(lay.getTempMin() + "");
+        }
+
+        if (3 == lay.getFz()) {// 绗�3灞�
+            report.setZ3(lay.getFz());
+            report.setTempAve3(lay.getTempAve() + "");
+            report.setTempMax3(lay.getTempMax() + "");
+            report.setTempMin3(lay.getTempMin() + "");
+        }
+
+        if (4 == lay.getFz()) {// 绗�4灞�
+            report.setZ4(lay.getFz());
+            report.setTempAve4(lay.getTempAve() + "");
+            report.setTempMax4(lay.getTempMax() + "");
+            report.setTempMin4(lay.getTempMin() + "");
+        }
+
+        if (5 == lay.getFz()) {// 绗�5灞�
+            report.setZ5(lay.getFz());
+            report.setTempAve5(lay.getTempAve() + "");
+            report.setTempMax5(lay.getTempMax() + "");
+            report.setTempMin5(lay.getTempMin() + "");
+        }
+        if (6 == lay.getFz()) {// 绗�6灞�
+            report.setZ6(lay.getFz());
+            report.setTempAve6(lay.getTempAve() + "");
+            report.setTempMax6(lay.getTempMax() + "");
+            report.setTempMin6(lay.getTempMin() + "");
+        }
+        if (7 == lay.getFz()) {// 绗�7灞�
+            report.setZ7(lay.getFz());
+            report.setTempAve7(lay.getTempAve() + "");
+            report.setTempMax7(lay.getTempMax() + "");
+            report.setTempMin7(lay.getTempMin() + "");
+        }
+        if (8 == lay.getFz()) {// 绗�8灞�
+            report.setZ8(lay.getFz());
+            report.setTempAve8(lay.getTempAve() + "");
+            report.setTempMax8(lay.getTempMax() + "");
+            report.setTempMin8(lay.getTempMin() + "");
+        }
+        if (9 == lay.getFz()) {// 绗�9灞�
+            report.setZ9(lay.getFz());
+            report.setTempAve9(lay.getTempAve() + "");
+            report.setTempMax9(lay.getTempMax() + "");
+            report.setTempMin9(lay.getTempMin() + "");
+        }
+        if (10 == lay.getFz()) {// 绗�10灞�
+            report.setZ10(lay.getFz());
+            report.setTempAve10(lay.getTempAve() + "");
+            report.setTempMax10(lay.getTempMax() + "");
+            report.setTempMin10(lay.getTempMin() + "");
+        }
+        if (11 == lay.getFz()) {// 绗�11灞�
+            report.setZ11(lay.getFz());
+            report.setTempAve11(lay.getTempAve() + "");
+            report.setTempMax11(lay.getTempMax() + "");
+            report.setTempMin11(lay.getTempMin() + "");
+        }
+        if (12 == lay.getFz()) {// 绗�12灞�
+            report.setZ12(lay.getFz());
+            report.setTempAve12(lay.getTempAve() + "");
+            report.setTempMax12(lay.getTempMax() + "");
+            report.setTempMin12(lay.getTempMin() + "");
+        }
+        if (13 == lay.getFz()) {// 绗�13灞�
+            report.setZ13(lay.getFz());
+            report.setTempAve13(lay.getTempAve() + "");
+            report.setTempMax13(lay.getTempMax() + "");
+            report.setTempMin13(lay.getTempMin() + "");
+        }
+        if (14 == lay.getFz()) {// 绗�14灞�
+            report.setZ14(lay.getFz());
+            report.setTempAve14(lay.getTempAve() + "");
+            report.setTempMax14(lay.getTempMax() + "");
+            report.setTempMin14(lay.getTempMin() + "");
+        }
+        if (15 == lay.getFz()) {// 绗�15灞�
+            report.setZ15(lay.getFz());
+            report.setTempAve15(lay.getTempAve() + "");
+            report.setTempMax15(lay.getTempMax() + "");
+            report.setTempMin15(lay.getTempMin() + "");
+        }
+        if (16 == lay.getFz()) {// 绗�16灞�
+            report.setZ16(lay.getFz());
+            report.setTempAve16(lay.getTempAve() + "");
+            report.setTempMax16(lay.getTempMax() + "");
+            report.setTempMin16(lay.getTempMin() + "");
+        }
+        if (17 == lay.getFz()) {// 绗�17灞�
+            report.setZ17(lay.getFz());
+            report.setTempAve17(lay.getTempAve() + "");
+            report.setTempMax17(lay.getTempMax() + "");
+            report.setTempMin17(lay.getTempMin() + "");
+        }
+        if (18 == lay.getFz()) {// 绗�18灞�
+            report.setZ18(lay.getFz());
+            report.setTempAve18(lay.getTempAve() + "");
+            report.setTempMax18(lay.getTempMax() + "");
+            report.setTempMin18(lay.getTempMin() + "");
+        }
+        if (19 == lay.getFz()) {// 绗�19灞�
+            report.setZ19(lay.getFz());
+            report.setTempAve19(lay.getTempAve() + "");
+            report.setTempMax19(lay.getTempMax() + "");
+            report.setTempMin19(lay.getTempMin() + "");
+        }
+        if (20 == lay.getFz()) {// 绗�20灞�
+            report.setZ20(lay.getFz());
+            report.setTempAve20(lay.getTempAve() + "");
+            report.setTempMax20(lay.getTempMax() + "");
+            report.setTempMin20(lay.getTempMin() + "");
+        }
+        if (21 == lay.getFz()) {// 绗�21灞�
+            report.setZ21(lay.getFz());
+            report.setTempAve21(lay.getTempAve() + "");
+            report.setTempMax21(lay.getTempMax() + "");
+            report.setTempMin21(lay.getTempMin() + "");
+        }
+        if (22 == lay.getFz()) {// 绗�22灞�
+            report.setZ22(lay.getFz());
+            report.setTempAve22(lay.getTempAve() + "");
+            report.setTempMax22(lay.getTempMax() + "");
+            report.setTempMin22(lay.getTempMin() + "");
+        }
+        if (23 == lay.getFz()) {// 绗�23灞�
+            report.setZ23(lay.getFz());
+            report.setTempAve23(lay.getTempAve() + "");
+            report.setTempMax23(lay.getTempMax() + "");
+            report.setTempMin23(lay.getTempMin() + "");
+        }
+        if (24 == lay.getFz()) {// 绗�24灞�
+            report.setZ24(lay.getFz());
+            report.setTempAve24(lay.getTempAve() + "");
+            report.setTempMax24(lay.getTempMax() + "");
+            report.setTempMin24(lay.getTempMin() + "");
+        }
+        if (25 == lay.getFz()) {// 绗�25灞�
+            report.setZ25(lay.getFz());
+            report.setTempAve25(lay.getTempAve() + "");
+            report.setTempMax25(lay.getTempMax() + "");
+            report.setTempMin25(lay.getTempMin() + "");
+        }
+    }
+
+    private static List<GrainLay> initDetail(int cableX, int cableY, int cableZ) {
+        List<GrainLay> result = new ArrayList<>();
+        GrainLay lay;
+        for (int i = 1; i <= cableZ; i++) {
+            lay = new GrainLay(i, i - 1);
+            lay.setSumNum(cableY * cableX);
+            lay.setSumInNum((cableY - 2) * (cableX - 2));
+            lay.setSumOutNum(2 * cableY + 2 * cableX - 4);
+            lay.setTempMin(50.0);
+            lay.setTempMax(-50.0);
+            result.add(lay);
+        }
+        return result;
+    }
 }
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/GrainReport.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/GrainReport.view.xml
new file mode 100644
index 0000000..4338d2d
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/GrainReport.view.xml
@@ -0,0 +1,1334 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+  <Arguments/>
+  <Context/>
+  <Model>
+    <DataType name="dtGrainDataReport">
+      <Property name="creationType">com.fzzy.igds.data.GrainDataReport</Property>
+      <PropertyDef name="batchId">
+        <Property></Property>
+        <Property name="label">鎵规缂栧彿</Property>
+      </PropertyDef>
+      <PropertyDef name="companyId">
+        <Property></Property>
+        <Property name="label">缁勭粐缂栫爜</Property>
+      </PropertyDef>
+      <PropertyDef name="depotId">
+        <Property></Property>
+        <Property name="label">浠撳簱</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;depotPR#getAllCache&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin">
+        <Property name="dataType">Double</Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax">
+        <Property name="dataType">Double</Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve">
+        <Property name="dataType">Double</Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="humidityIn">
+        <Property name="dataType">Double</Property>
+        <Property name="label">浠撴箍</Property>
+      </PropertyDef>
+      <PropertyDef name="tempIn">
+        <Property name="dataType">Double</Property>
+        <Property name="label">浠撴俯</Property>
+      </PropertyDef>
+      <PropertyDef name="humidityOut">
+        <Property name="dataType">Double</Property>
+        <Property name="label">姘旀箍</Property>
+      </PropertyDef>
+      <PropertyDef name="tempOut">
+        <Property name="dataType">Double</Property>
+        <Property name="label">姘旀俯</Property>
+      </PropertyDef>
+      <PropertyDef name="cable">
+        <Property></Property>
+        <Property name="label">灞傝鍒�</Property>
+      </PropertyDef>
+      <PropertyDef name="weather">
+        <Property></Property>
+        <Property name="label">澶╂皵</Property>
+      </PropertyDef>
+      <PropertyDef name="receiveDate">
+        <Property name="dataType">DateTime</Property>
+        <Property name="label">妫�娴嬫椂闂�</Property>
+      </PropertyDef>
+      <PropertyDef name="checkUser">
+        <Property></Property>
+        <Property name="label">妫�娴嬩汉</Property>
+      </PropertyDef>
+      <PropertyDef name="remark">
+        <Property></Property>
+        <Property name="label">澶囨敞</Property>
+      </PropertyDef>
+      <PropertyDef name="depotType">
+        <Property></Property>
+        <Property name="label">浠撳簱绫诲瀷</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerDepotType&quot;).getResult()}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="foodVariety">
+        <Property></Property>
+        <Property name="label">绮鍝佺</Property>
+      </PropertyDef>
+      <PropertyDef name="storeKeeperName">
+        <Property></Property>
+        <Property name="label">淇濈鍛�</Property>
+      </PropertyDef>
+      <PropertyDef name="z1">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin1">
+        <Property name="dataType">String</Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax1">
+        <Property name="dataType">String</Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve1">
+        <Property name="dataType">String</Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z2">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin2">
+        <Property name="dataType">String</Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax2">
+        <Property name="dataType">String</Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve2">
+        <Property name="dataType">String</Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z3">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin3">
+        <Property name="dataType">String</Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax3">
+        <Property name="dataType">String</Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve3">
+        <Property name="dataType">String</Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z4">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin4">
+        <Property name="dataType">String</Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax4">
+        <Property name="dataType">String</Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve4">
+        <Property name="dataType">String</Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z5">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin5">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax5">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve5">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z6">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin6">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax6">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve6">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z7">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin7">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax7">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve7">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z8">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin8">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax8">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve8">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z9">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin9">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax9">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve9">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z10">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin10">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax10">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve10">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z11">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin11">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax11">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve11">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z12">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin12">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax12">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve12">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z13">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin13">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax13">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve13">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z14">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin14">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax14">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve14">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z15">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin15">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax15">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve15">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z16">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin16">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax16">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve16">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z17">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin17">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax17">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve17">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z18">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin18">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax18">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve18">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z19">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin19">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax19">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve19">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z20">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin20">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax20">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve20">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z21">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin21">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax21">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve21">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z22">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin22">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax22">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve22">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z23">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin23">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax23">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve23">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z24">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin24">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax24">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve24">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="z25">
+        <Property name="dataType">int</Property>
+        <Property name="label">鎵�鍦ㄥ眰</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMin25">
+        <Property></Property>
+        <Property name="label">鏈�浣�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempMax25">
+        <Property></Property>
+        <Property name="label">鏈�楂�</Property>
+      </PropertyDef>
+      <PropertyDef name="tempAve25">
+        <Property></Property>
+        <Property name="label">骞冲潎</Property>
+      </PropertyDef>
+      <PropertyDef name="storageReal">
+        <Property name="dataType">Double</Property>
+        <Property name="label">瀹為檯鍌ㄩ噺</Property>
+        <Property name="displayFormat">#</Property>
+      </PropertyDef>
+      <PropertyDef name="maxZ"/>
+      <PropertyDef name="cableCir">
+        <Property></Property>
+        <Property name="label">绛掍粨灞傞厤缃�</Property>
+      </PropertyDef>
+      <PropertyDef name="oilHeight">
+        <Property></Property>
+        <Property name="label">娌归潰楂樺害</Property>
+      </PropertyDef>
+      <PropertyDef name="points">
+        <Property></Property>
+        <Property name="label">閲囬泦鐐逛俊鎭�</Property>
+      </PropertyDef>
+      <PropertyDef name="sysDate">
+        <Property name="dataType">Date</Property>
+        <Property name="label">绯荤粺鏃堕棿</Property>
+      </PropertyDef>
+      <PropertyDef name="depotHeight">
+        <Property></Property>
+        <Property name="label">寤虹瓚楂樺害</Property>
+      </PropertyDef>
+      <PropertyDef name="storage">
+        <Property name="dataType">Double</Property>
+        <Property name="label">妫�娴嬪偍閲�</Property>
+      </PropertyDef>
+      <PropertyDef name="depotTypeName">
+        <Property></Property>
+        <Property name="label">浠撳簱绫诲瀷</Property>
+      </PropertyDef>
+      <PropertyDef name="perWet">
+        <Property></Property>
+        <Property name="label">姘村垎(%)</Property>
+      </PropertyDef>
+      <PropertyDef name="perImpurity">
+        <Property></Property>
+        <Property name="label">鏉傝川(%)</Property>
+      </PropertyDef>
+    </DataType>
+    <DataType name="dataTypeC">
+      <PropertyDef name="title">
+        <Property name="label"> </Property>
+      </PropertyDef>
+      <PropertyDef name="depotId">
+        <Property></Property>
+        <Property name="label">閫夋嫨浠撳簱锛�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;depotPR#getAllCache&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="start">
+        <Property name="dataType">Date</Property>
+        <Property name="label">妫�娴嬫棩鏈�</Property>
+      </PropertyDef>
+      <PropertyDef name="end">
+        <Property name="dataType">Date</Property>
+        <Property name="label">妫�娴嬫椂闂存埅鑷�</Property>
+      </PropertyDef>
+      <PropertyDef name="createUser">
+        <Property name="label">鍒惰〃浜�</Property>
+      </PropertyDef>
+      <PropertyDef name="timeDesc">
+        <Property name="label">妫�娴嬫椂闂�</Property>
+      </PropertyDef>
+      <PropertyDef name="depotName">
+        <Property name="label">璇存槑锛�</Property>
+      </PropertyDef>
+      <PropertyDef name="createTime">
+        <Property name="label">鍒惰〃鏃堕棿</Property>
+      </PropertyDef>
+      <PropertyDef name="timeDescLabel"/>
+      <PropertyDef name="depotNameLabel"/>
+      <PropertyDef name="time">
+        <Property name="dataType">int</Property>
+        <Property name="displayFormat"># 鐐�</Property>
+        <Property name="label">妫�娴嬫椂闂�</Property>
+      </PropertyDef>
+      <PropertyDef name="ids">
+        <Property></Property>
+        <Property name="label">閫夋嫨浠撳簱锛�</Property>
+      </PropertyDef>
+      <PropertyDef name="names">
+        <Property></Property>
+        <Property name="label">閫夋嫨浠撳簱锛�</Property>
+      </PropertyDef>
+    </DataType>
+  </Model>
+  <View layout="padding:10">
+    <Property name="packages">font-awesome,css-common</Property>
+    <Property name="cache">
+      <Property name="mode">clientSide</Property>
+    </Property>
+    <DataSet id="dsMain">
+      <ClientEvent name="onLoadData">var hearder = view.get(&quot;#dataSetC.data&quot;);&#xD;
+&#xD;
+if(hearder.get(&quot;start&quot;) &amp;&amp; hearder.get(&quot;end&quot;)){&#xD;
+	hearder.set(&quot;timeDesc&quot;,hearder.get('start').formatDate(&quot;Y-m-d&quot;) +&quot; 鎴嚦锛�&quot;+hearder.get('end').formatDate(&quot;Y-m-d&quot;));&#xD;
+}&#xD;
+&#xD;
+&#xD;
+//鏍规嵁鍔犺浇瀹屾垚鐨勬暟鎹繘琛岄〉闈㈣皟鏁�&#xD;
+var list = self.getData();&#xD;
+if(!list) return;&#xD;
+var last = list.getLast();&#xD;
+var maxZ = last.get(&quot;maxZ&quot;);&#xD;
+//鍔ㄦ�侀殣钘忔垨鑰呮樉绀哄垪&#xD;
+for (var i = 5; i &lt; 26; i++) {&#xD;
+    if(i > maxZ){&#xD;
+        view.get(&quot;#lay&quot;+i).set(&quot;visible&quot;,false);&#xD;
+    }else{&#xD;
+        view.get(&quot;#lay&quot;+i).set(&quot;visible&quot;,true);&#xD;
+    }&#xD;
+}&#xD;
+&#xD;
+</ClientEvent>
+      <Property name="dataProvider">grainReportPR#getDataReport</Property>
+      <Property name="dataType">[dtGrainDataReport]</Property>
+      <Property name="pageSize">20</Property>
+      <Property name="loadMode">manual</Property>
+    </DataSet>
+    <DataSet id="dataSetC">
+      <Property name="dataType">dataTypeC</Property>
+      <Property name="dataProvider">grainReportPR#getQuery</Property>
+    </DataSet>
+    <Container>
+      <Property name="className">c-param</Property>
+      <AutoForm>
+        <Property name="cols">*,*,*,90,90</Property>
+        <Property name="dataSet">dataSetC</Property>
+        <Property name="labelSeparator">锛�</Property>
+        <Property name="labelAlign">right</Property>
+        <Property name="labelWidth">110</Property>
+        <AutoFormElement>
+          <Property name="name">start</Property>
+          <Property name="property">start</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">end</Property>
+          <Property name="property">end</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">names</Property>
+          <Property name="property">names</Property>
+          <Property name="trigger">CDDDept</Property>
+          <Editor/>
+        </AutoFormElement>
+        <Button>
+          <ClientEvent name="onClick">var param = view.get(&quot;#dataSetC.data&quot;);&#xD;
+&#xD;
+view.get(&quot;#dsMain&quot;).set(&quot;parameter&quot;,param).flushAsync();</ClientEvent>
+          <Property name="caption">鎼滅储</Property>
+          <Property name="iconClass">fa fa-search</Property>
+          <Property name="exClassName">btn-q1</Property>
+        </Button>
+        <Button>
+          <ClientEvent name="onClick">view.get(&quot;#dataSetC&quot;).flushAsync();</ClientEvent>
+          <Property name="caption">閲嶇疆</Property>
+          <Property name="exClassName">btn-q2</Property>
+          <Property name="iconClass">fa fa-refresh</Property>
+        </Button>
+      </AutoForm>
+    </Container>
+    <Container>
+      <Property name="className">c-data</Property>
+      <AutoForm id="autoForm1" layoutConstraint="top">
+        <Property name="cols">*,*,*,*</Property>
+        <Property name="dataSet">dataSetC</Property>
+        <Property name="labelAlign">right</Property>
+        <Property name="showHint">false</Property>
+        <Property name="labelWidth">120</Property>
+        <AutoFormElement layoutConstraint="colSpan:4">
+          <Property name="name">title</Property>
+          <Property name="property">title</Property>
+          <Property name="showLabel">false</Property>
+          <Property name="editorType">Label</Property>
+          <Property name="style">
+            <Property name="font">bold 30px Georgia, serif;</Property>
+            <Property name="text-align">center</Property>
+          </Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">timeDesc</Property>
+          <Property name="property">timeDesc</Property>
+          <Property name="editorType">Label</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">depotName</Property>
+          <Property name="property">depotName</Property>
+          <Property name="editorType">Label</Property>
+          <Property name="labelAlign">right</Property>
+          <Property name="labelWidth">80</Property>
+          <Property name="showLabel">false</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">createUser</Property>
+          <Property name="property">createUser</Property>
+          <Property name="editorType">Label</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">createTime</Property>
+          <Property name="property">createTime</Property>
+          <Property name="editorType">Label</Property>
+          <Editor/>
+        </AutoFormElement>
+      </AutoForm>
+      <DataGrid id="dataGrid1" layoutConstraint="padding:8">
+        <Property name="dataSet">dsMain</Property>
+        <Property name="readOnly">true</Property>
+        <Property name="headerRowHeight">30</Property>
+        <Property name="fixedColumnCount">3</Property>
+        <Property name="rowHeight">50</Property>
+        <RowNumColumn>
+          <Property name="width">50</Property>
+        </RowNumColumn>
+        <DataColumn name="depotId">
+          <Property name="property">depotId</Property>
+          <Property name="width">110</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn>
+          <Property name="width">110</Property>
+          <Property name="align">center</Property>
+          <Property name="property">batchId</Property>
+          <Editor/>
+        </DataColumn>
+        <DataColumn name="tempIn">
+          <Property name="property">tempIn</Property>
+          <Property name="width">80</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="humidityIn">
+          <Property name="property">humidityIn</Property>
+          <Property name="width">80</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <ColumnGroup>
+          <Property name="caption">鏁翠粨</Property>
+          <DataColumn name="tempMin">
+            <Property name="property">tempMin</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax">
+            <Property name="property">tempMax</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve">
+            <Property name="property">tempAve</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup>
+          <Property name="caption">绗�1灞�</Property>
+          <DataColumn name="tempMin1">
+            <Property name="property">tempMin1</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax1">
+            <Property name="property">tempMax1</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve1">
+            <Property name="property">tempAve1</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup>
+          <Property name="caption">绗�2灞�</Property>
+          <DataColumn name="tempMin2">
+            <Property name="property">tempMin2</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax2">
+            <Property name="property">tempMax2</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve2">
+            <Property name="property">tempAve2</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup>
+          <Property name="caption">绗�3灞�</Property>
+          <DataColumn name="tempMin3">
+            <Property name="property">tempMin3</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax3">
+            <Property name="property">tempMax3</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve3">
+            <Property name="property">tempAve3</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup>
+          <Property name="caption">绗�4灞�</Property>
+          <Property name="visible">true</Property>
+          <DataColumn name="tempMin4">
+            <Property name="property">tempMin4</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax4">
+            <Property name="property">tempMax4</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve4">
+            <Property name="property">tempAve4</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay5">
+          <Property name="caption">绗�5灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin5">
+            <Property name="property">tempMin5</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax5">
+            <Property name="property">tempMax5</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve5">
+            <Property name="property">tempAve5</Property>
+            <Property name="width">80</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay6">
+          <Property name="caption">绗�6灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin6">
+            <Property name="property">tempMin6</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax6">
+            <Property name="property">tempMax6</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve6">
+            <Property name="property">tempAve6</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay7">
+          <Property name="caption">绗�7灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin7">
+            <Property name="property">tempMin7</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax7">
+            <Property name="property">tempMax7</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve7">
+            <Property name="property">tempAve7</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay8">
+          <Property name="caption">绗�8灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin8">
+            <Property name="property">tempMin8</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax8">
+            <Property name="property">tempMax8</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve8">
+            <Property name="property">tempAve8</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay9">
+          <Property name="caption">绗�9灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin9">
+            <Property name="property">tempMin9</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax9">
+            <Property name="property">tempMax9</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve9">
+            <Property name="property">tempAve9</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay10">
+          <Property name="caption">绗�10灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin10">
+            <Property name="property">tempMin10</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax10">
+            <Property name="property">tempMax10</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve10">
+            <Property name="property">tempAve10</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay11">
+          <Property name="caption">绗�11灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin11">
+            <Property name="property">tempMin11</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax11">
+            <Property name="property">tempMax11</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve11">
+            <Property name="property">tempAve11</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay12">
+          <Property name="caption">绗�12灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin12">
+            <Property name="property">tempMin12</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax12">
+            <Property name="property">tempMax12</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve12">
+            <Property name="property">tempAve12</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay13">
+          <Property name="caption">绗�13灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin13">
+            <Property name="property">tempMin13</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax13">
+            <Property name="property">tempMax13</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve13">
+            <Property name="property">tempAve13</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay14">
+          <Property name="caption">绗�14灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin14">
+            <Property name="property">tempMin14</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax14">
+            <Property name="property">tempMax14</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve14">
+            <Property name="property">tempAve14</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay15">
+          <Property name="caption">绗�15灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin15">
+            <Property name="property">tempMin15</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax15">
+            <Property name="property">tempMax15</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve15">
+            <Property name="property">tempAve15</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay16">
+          <Property name="caption">绗�16灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin16">
+            <Property name="property">tempMin16</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax16">
+            <Property name="property">tempMax16</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve16">
+            <Property name="property">tempAve16</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay17">
+          <Property name="caption">绗�17灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin17">
+            <Property name="property">tempMin17</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax17">
+            <Property name="property">tempMax17</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve17">
+            <Property name="property">tempAve17</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay18">
+          <Property name="caption">绗�18灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin18">
+            <Property name="property">tempMin18</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax18">
+            <Property name="property">tempMax18</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve18">
+            <Property name="property">tempAve18</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay19">
+          <Property name="caption">绗�19灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin19">
+            <Property name="property">tempMin19</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax19">
+            <Property name="property">tempMax19</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve19">
+            <Property name="property">tempAve19</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay20">
+          <Property name="caption">绗�20灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin20">
+            <Property name="property">tempMin20</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax20">
+            <Property name="property">tempMax20</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve20">
+            <Property name="property">tempAve20</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay21">
+          <Property name="caption">绗�21灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin21">
+            <Property name="property">tempMin21</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax21">
+            <Property name="property">tempMax21</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve21">
+            <Property name="property">tempAve21</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay22">
+          <Property name="caption">绗�22灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin22">
+            <Property name="property">tempMin22</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax22">
+            <Property name="property">tempMax22</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve22">
+            <Property name="property">tempAve22</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay23">
+          <Property name="caption">绗�23灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin23">
+            <Property name="property">tempMin23</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax23">
+            <Property name="property">tempMax23</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve23">
+            <Property name="property">tempAve23</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay24">
+          <Property name="caption">绗�24灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin24">
+            <Property name="property">tempMin24</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax24">
+            <Property name="property">tempMax24</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve24">
+            <Property name="property">tempAve24</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <ColumnGroup id="lay25">
+          <Property name="caption">绗�25灞�</Property>
+          <Property name="visible">false</Property>
+          <DataColumn name="tempMin25">
+            <Property name="property">tempMin25</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempMax25">
+            <Property name="property">tempMax25</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+          <DataColumn name="tempAve25">
+            <Property name="property">tempAve25</Property>
+            <Property name="width">90</Property>
+            <Property name="align">center</Property>
+          </DataColumn>
+        </ColumnGroup>
+        <DataColumn name="foodVariety">
+          <Property name="property">foodVariety</Property>
+          <Property name="width">90</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="storageReal">
+          <Property name="property">storageReal</Property>
+          <Property name="width">110</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="depotType">
+          <Property name="property">depotType</Property>
+          <Property name="width">100</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="perWet">
+          <Property name="property">perWet</Property>
+          <Property name="width">80</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="perImpurity">
+          <Property name="property">perImpurity</Property>
+          <Property name="width">80</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="storeKeeperName">
+          <Property name="property">storeKeeperName</Property>
+          <Property name="width">100</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+      </DataGrid>
+      <ToolBar layoutConstraint="bottom">
+        <Fill/>
+        <DataPilot layoutConstraint="right">
+          <Property name="itemCodes">pageSize,pages</Property>
+          <Property name="dataSet">dsMain</Property>
+        </DataPilot>
+      </ToolBar>
+    </Container>
+    <ListDropDown id="listHour">
+      <Property name="items">6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22</Property>
+    </ListDropDown>
+    <CustomDropDown id="CDDDept">
+      <Property name="minWidth">400</Property>
+      <Property name="minHeight">600</Property>
+      <Property name="assignmentMap">ids=ids,names=names</Property>
+      <Panel>
+        <Property name="showCaptionBar">false</Property>
+        <Buttons>
+          <Button>
+            <ClientEvent name="onClick">var selection = view.get(&quot;#dgDepotSelect&quot;).get(&quot;selection&quot;);&#xD;
+if(!selection || selection.length == 0){&#xD;
+	$alert(&quot;璇烽�夋嫨浠撳簱&quot;);&#xD;
+	return;&#xD;
+}&#xD;
+&#xD;
+var ids = &quot;&quot;,names=&quot;&quot;;&#xD;
+selection.each(function(item){&#xD;
+	ids += item.get(&quot;id&quot;)+&quot;,&quot;;&#xD;
+	names+=item.get(&quot;name&quot;)+&quot;,&quot;;&#xD;
+});&#xD;
+&#xD;
+view.get(&quot;#CDDDept&quot;).close({ids:ids,names:names});</ClientEvent>
+            <Property name="caption">纭閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check-circle</Property>
+            <Property name="exClassName">btn1</Property>
+            <Property name="width">120</Property>
+          </Button>
+          <Button>
+            <ClientEvent name="onClick">view.get(&quot;#CDDDept&quot;).close({});&#xD;
+view.get(&quot;#dgDepotSelect&quot;).set(&quot;selection&quot;,null);</ClientEvent>
+            <Property name="caption">鍙栨秷鎿嶄綔</Property>
+            <Property name="exClassName">btn3</Property>
+            <Property name="iconClass">fa fa-times-circle</Property>
+            <Property name="width">120</Property>
+          </Button>
+        </Buttons>
+        <Children>
+          <DataSet id="dsDeptSelect">
+            <Property name="dataType">[dtDepot]</Property>
+            <Property name="dataProvider">depotPR#getAllCache</Property>
+          </DataSet>
+          <DataGrid id="dgDepotSelect">
+            <Property name="dataSet">dsDeptSelect</Property>
+            <Property name="selectionMode">multiRows</Property>
+            <RowSelectorColumn>
+              <Property name="caption">閫夋嫨</Property>
+              <Property name="width">50</Property>
+            </RowSelectorColumn>
+            <DataColumn name="name">
+              <Property name="property">name</Property>
+              <Property name="readOnly">true</Property>
+            </DataColumn>
+            <DataColumn name="id">
+              <Property name="property">id</Property>
+              <Property name="readOnly">true</Property>
+            </DataColumn>
+            <DataColumn name="depotType">
+              <Property name="property">depotType</Property>
+              <Property name="readOnly">true</Property>
+            </DataColumn>
+          </DataGrid>
+        </Children>
+        <Tools/>
+      </Panel>
+    </CustomDropDown>
+  </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/GrainReportPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/GrainReportPR.java
new file mode 100644
index 0000000..e562322
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/GrainReportPR.java
@@ -0,0 +1,131 @@
+package com.fzzy.igds;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.bstek.dorado.data.provider.Page;
+import com.fzzy.igds.constant.DepotType;
+import com.fzzy.igds.constant.FoodVariety;
+import com.fzzy.igds.data.GrainDataReport;
+import com.fzzy.igds.domain.DepotConf;
+import com.fzzy.igds.domain.Grain;
+import com.fzzy.igds.service.DepotConfService;
+import com.fzzy.igds.service.GrainService;
+import com.fzzy.igds.service.SysDeptService;
+import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.igds.utils.DateUtil;
+import com.fzzy.igds.utils.GrainDataBuilder;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * @Description 绮儏鎶ヨ〃椤甸潰鍏ュ彛
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+@Component
+public class GrainReportPR {
+
+    @Resource
+    private GrainService grainService;
+    @Resource
+    private SysDeptService sysDeptService;
+    @Resource
+    private DepotConfService depotConfService;
+
+    /**
+     * grainReportPR#getQuery
+     * @return
+     */
+    @DataProvider
+    public Map<String, Object> getQuery() {
+        Map<String, Object> result = new HashMap<>();
+
+        SysDept subDept = sysDeptService.getCacheDept(null, ContextUtil.subDeptId(null));
+        result.put("title", "绮儏姹囨�昏〃");
+        if (null != subDept) {
+            result.put("title", subDept.getDeptName() + "绮儏姹囨�昏〃");
+            result.put("deptId", subDept.getDeptId());
+        }
+
+        result.put("timeDesc", "妫�娴嬫椂闂�");
+        result.put("depotNameLabel", "");
+        result.put("depotName", "");
+
+        result.put("end", new Date());
+        Date start = DateUtil.getNewByDay(new Date(), -30);
+        result.put("start", start);
+
+        result.put("timeDesc",
+                DateFormatUtils.format(start, "yyyy-MM-dd") + "   鎴嚦锛�"
+                        + DateFormatUtils.format(new Date(), "yyyy-MM-dd"));
+
+        result.put("createUser", ContextUtil.getLoginUserName());
+        result.put("createTime", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+
+        return result;
+    }
+
+    /**
+     * 绮儏鏁版嵁鎶ヨ〃鏁版嵁鍒嗛〉鏌ヨ锛屾煡璇㈡潯浠舵牴鎹�夋嫨鍏蜂綋鏃ユ湡鏌ヨ
+     * grainReportPR#getDataReport
+     *
+     * @param page
+     * @param param
+     */
+    @DataProvider
+    public void getDataReport(Page<GrainDataReport> page, Map<String, Object> param) {
+        com.baomidou.mybatisplus.extension.plugins.pagination.Page<Grain> corePage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPageNo(), page.getPageSize());
+
+        if (null == param) {
+            param = new HashMap<>();
+        }
+        grainService.pageData(corePage, param);
+        List<Grain> records = corePage.getRecords();
+
+        // 鏄惁鍏佽閲嶅锛屽湪鎸夌収鏌愬ぉ鏌ヨ鎯呭喌锛屽彧鑾峰彇褰撳ぉ鏈�鍚庝竴鏉′俊鎭� 0= 涓嶅厑璁革紝1=鍏佽
+        String repeat = (String) param.get(("repeat"));
+        Map<String, String> tempMap = new HashMap<>();
+
+        // 璋冩暣鏁版嵁
+        int maxZ = 3;
+        int hour = 0;
+        List<GrainDataReport> dataList = new ArrayList<>();
+        GrainDataReport report;
+        DepotConf depotConf;
+        for (Grain grain : records) {
+
+            // 鍘婚櫎閲嶅
+            if (null != repeat && "0".equals(repeat)) {
+                if (null == tempMap.get(grain.getDepotId())) {
+                    tempMap.put(grain.getDepotId(), grain.getBatchId());
+                } else {
+                    continue;
+                }
+            }
+            report = new GrainDataReport();
+            BeanUtils.copyProperties(grain, report);
+
+            // 璋冩暣绫诲瀷瀛楁鏄剧ず涓枃
+            report.setDepotTypeName(DepotType.getMsg(report.getDepotType()));
+            report.setFoodVariety(FoodVariety.getMsg(report.getFoodVariety()));
+
+            if (report.getMaxZ() > maxZ) {
+                maxZ = report.getMaxZ();
+            }
+            report.setMaxZ(maxZ);
+
+            depotConf = depotConfService.getCacheDepotConfByDepotId(grain.getCompanyId(), grain.getDepotId());
+            GrainDataBuilder.updateReport(report, depotConf);
+
+            dataList.add(report);
+        }
+
+        // 閲嶆柊灏佽
+        page.setEntities(dataList);
+        page.setEntityCount(Integer.parseInt(String.valueOf(corePage.getTotal())));
+    }
+
+}

--
Gitblit v1.9.3