From 824d4e6be22a1d101897bf1be575bb5e3ed33845 Mon Sep 17 00:00:00 2001
From: sgj <1442489573@qq.com>
Date: 星期二, 09 十二月 2025 15:12:43 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
fzzy-igdss-core/src/main/java/com/fzzy/igds/request/GrainReqData.java | 33
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon1.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java | 7
fzzy-igdss-web/src/main/resources/static/grain/grain-style.css | 618 +++
fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder.java | 43
fzzy-igdss-web/src/main/resources/templates/grain/grain-check1.html | 575 +++
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/grain/GrainController.java | 315 ++
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainExportBuilder.java | 346 ++
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon2.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon5-h.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg7.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/OrderRespEnum.java | 51
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/LogOperationService.java | 38
fzzy-igdss-web/src/main/resources/static/grain/grainPoint1.js | 1348 ++++++++
fzzy-igdss-web/src/main/resources/static/img/web/grain/qt-bg4.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg6.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-swt.png | 0
fzzy-igdss-io/src/main/java/com/fzzy/igds/io/service/RemoteGrainService.java | 29
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon4-h.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainRow.java | 31
fzzy-igdss-web/src/main/resources/static/img/web/grain/rkbk-photo_02.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainData.java | 30
fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder01.java | 169 +
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/common/CommonManager.java | 19
fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ThReqData.java | 16
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainManager.java | 498 +++
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon4.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/oil-all.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg5.png | 0
fzzy-igdss-io/src/main/java/com/fzzy/igds/io/order/ExeOrderService.java | 341 ++
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon1-h.png | 0
fzzy-igdss-web/src/main/resources/static/grain/PrintBuilder-lay.js | 576 +++
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/LayPage.java | 175 +
fzzy-igdss-web/src/main/resources/static/img/web/grain/cpc-pic.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon3.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilderLay01.java | 171 +
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg4.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/PrintModeData.java | 31
fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java | 8
fzzy-igdss-io/pom.xml | 75
fzzy-igdss-web/src/main/resources/templates/grain/grain-check4.html | 566 +++
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainLay.java | 47
fzzy-igdss-web/src/main/resources/static/grain/grain-check1.js | 718 ++++
fzzy-igdss-web/pom.xml | 7
fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder03.java | 168 +
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg3.png | 0
pom.xml | 1
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FileService.java | 34
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon6.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg2.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/rkbk-photo_03.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/img-dnxb.png | 0
fzzy-igdss-web/src/main/resources/static/grain/grain-export.js | 130
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/LogOperation.java | 52
fzzy-igdss-io/src/main/java/com/fzzy/igds/io/manager/RemoteManager.java | 49
fzzy-igdss-core/src/main/java/com/fzzy/igds/response/BaseResponse.java | 40
fzzy-igdss-web/src/main/resources/templates/grain/order-list.html | 263 +
fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder04.java | 175 +
fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ExeBaseRequest.java | 63
fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainDataBuilder.java | 636 ++++
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon3-h.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainPoint.java | 35
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon5.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ReqStatus.java | 31
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg1.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java | 65
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-color_03.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon2-h.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/LogOperationMapper.java | 10
fzzy-igdss-web/src/main/resources/static/img/web/grain/fenxi-icon.png | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon6-h.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainParam.java | 40
fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/GrainMapper.java | 12
fzzy-igdss-web/src/main/resources/static/grain/grainPoint4.js | 633 ++++
fzzy-igdss-web/src/main/resources/static/img/web/grain/fenxi-icon.gif | 0
fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-li-bg.png | 0
fzzy-igdss-core/src/main/java/com/fzzy/igds/response/GrainResponse.java | 18
77 files changed, 9,336 insertions(+), 0 deletions(-)
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java
index 608a66d..8619237 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java
@@ -176,4 +176,11 @@
* 缂撳瓨-鍏ュ簱ID
*/
public static final String CACHE_RECORD_ID = "RECORD_ID";
+
+ //-绮俯澶囩敤鐐�
+ public static final double ERROR_TEMP = -100;
+ //-绮俯鏁呴殰鐐�
+ public static final double FAULT_TEMP = -101;
+ //-绮俯琛ュ伩鐐�-閽堝閿ュ舰浠撹ˉ鐐逛娇鐢�
+ public static final double ADD_TEMP = -102;
}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/OrderRespEnum.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/OrderRespEnum.java
new file mode 100644
index 0000000..857effd
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/OrderRespEnum.java
@@ -0,0 +1,51 @@
+package com.fzzy.igds.constant;
+
+/**
+ * 鎿嶄綔鍝嶅簲鐮�
+ *
+ * @author Andy
+ *
+ */
+public enum OrderRespEnum {
+
+ ORDER_SUCCESS("ORDER_SUCCESS", "鍛戒护鍙戦�佹垚鍔�"),
+ ORDER_ERROR("ORDER_ERROR", "鍛戒护鍙戦�佸嚭鐜板紓甯�"),
+ ORDER_INORDER("ORDER_INORDER","鍛戒护鎵ц鎺掗槦涓�"),
+
+ ORDER_INPROGRESS("ORDER_INPROGRESS","鍛戒护缁х画鎵ц涓�"),
+
+ NO_PROTOCOL("NO_PROTOCOL", "褰撳墠鍗忚鏈疄鐜�"),
+ NO_SIGN("NO_SIGN", "杩炴帴寮傚父锛屾病鏈夎幏鍙栧埌杩炴帴"),
+ NO_FUNCTION("NO_FUNCTION", "缁堢鏆備笉鏀寔璇ュ姛鑳�"),
+
+ MSG_SUCCESS("MSG_SUCCESS", "淇℃伅瑙f瀽鎴愬姛"),
+ MSG_ERROR("MSG_ERROR", "淇℃伅瑙f瀽寮傚父"),
+ MSG_TIMEOUT("MSG_TIMEOUT", "瑙f瀽瓒呮椂"),
+ LOGOUT("LOGOUT", "绂荤嚎")
+ ;
+
+ private String code;
+ private String msg;
+
+ OrderRespEnum(String code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainData.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainData.java
new file mode 100644
index 0000000..94035e5
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainData.java
@@ -0,0 +1,30 @@
+package com.fzzy.igds.data;
+
+import com.bstek.dorado.annotation.PropertyDef;
+import com.fzzy.igds.domain.Depot;
+import com.fzzy.igds.domain.Grain;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/12/9 9:47
+ */
+@Data
+public class GrainData extends Grain implements Serializable {
+
+ private List<GrainPoint> listPoints;
+
+ @PropertyDef(label = "鍚勫眰绮俯", description = "鍏崇郴瀛楁")
+ private List<GrainLay> listLays;
+
+ @PropertyDef(label = "鍚勮娓╁害", description = "鍏崇郴瀛楁")
+ private List<GrainRow> listRows;
+
+ @PropertyDef(label = "浠撴埧淇℃伅", description = "鍏崇郴瀛楁")
+ private Depot depotData;
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainLay.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainLay.java
new file mode 100644
index 0000000..f2df0c2
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainLay.java
@@ -0,0 +1,47 @@
+package com.fzzy.igds.data;
+
+import lombok.Data;
+
+/**
+ * 绮儏鏁版嵁瑙f瀽瀵硅薄-灞備俊鎭�
+ */
+
+@Data
+public class GrainLay {
+
+ private int fz; //鎵�鍦ㄥ眰
+
+ private int z; //鎵�鍦ㄥ眰
+
+ private Double tempMin; //灞傛渶浣庢俯
+
+ private Double tempMax; //灞傛渶楂樻俯
+
+ private Double tempAve = 0.0; //灞傚钩鍧囨俯
+
+ private Double tempAveIn = 0.0; //鍐呭湀骞冲潎娓╁害
+
+ private Double tempAveOut = 0.0; //澶栧湀骞冲潎娓╁害
+
+ private int sumNum;//褰撳墠灞傛�绘暟
+
+ private int sumInNum;//鍐呭湀涓暟
+
+ private int sumOutNum;//澶栧湀涓暟
+
+ private double sumTemp;//灞傛�绘俯搴�
+
+ private double sumInTemp;
+
+ private double sumOutTemp;
+
+ public GrainLay() {
+ super();
+ }
+
+ public GrainLay(int fz, int z) {
+ super();
+ this.fz = fz;
+ this.z = z;
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainParam.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainParam.java
new file mode 100644
index 0000000..55c789c
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainParam.java
@@ -0,0 +1,40 @@
+package com.fzzy.igds.data;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * @Description 绮儏涓氬姟鍙傛暟鍙傛暟瀹氫箟
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class GrainParam extends IgdsBaseParam {
+
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private Date checkDate;// 妫�娴嬫棩鏈� yyyy-MM-dd
+
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM", timezone = "GMT+8")
+ private Date checkMonth;// 妫�娴嬫棩鏈�
+
+ private int checkHour;//妫�娴嬫椂闂村皬鏃讹紝0涓嶇畻
+
+ private String batchId;// 鎵规鍙�
+
+ private String extBatchId;// 闇�瑕佽鎺掗櫎鎵规鍙�
+
+ private String depotIds;// 浠ラ�楀彿闅斿紑鐨勪粨搴撶紪鐮侊紝澶氫釜浠撳簱缂栫爜
+
+ private boolean tagUpdate = true;// 鏄惁鏇存柊灞傛暟鎹拰琛屾暟鎹�
+
+ private String cableRule;//甯冪嚎瑙勫垯
+
+ private String cableCir;//绛掍粨灞傚竷绾胯鍒�
+
+ private String depotType;//浠撳簱绫诲瀷
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainPoint.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainPoint.java
new file mode 100644
index 0000000..9242090
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainPoint.java
@@ -0,0 +1,35 @@
+package com.fzzy.igds.data;
+
+import lombok.Data;
+
+/**
+ * 绮儏鏁版嵁瑙f瀽瀵硅薄-閲囬泦鐐瑰璞′俊鎭紝XYZ琛ㄧず鐨勫垪琛屽眰锛屾暟鍊间粠1寮�濮嬨��
+ *
+ */
+@Data
+public class GrainPoint {
+
+ private int z; // 鎵�鍦ㄥ眰
+
+ private int fz; // 鎵�鍦ㄥ眰
+
+ private int x; //鎵�鍦ㄥ垪锛岀瓛浠撴墍鍦ㄥ湀鏁�
+
+ private int y; //鎵�鍦ㄨ锛岀瓛浠撴牴鍙凤紝鎬绘牴鍙�
+
+ private Double temp = 0.0; //閲囬泦鐐规俯搴�
+
+ public GrainPoint() {
+ super();
+ }
+
+ public GrainPoint(Double temp, int x, int y, int z, int fz) {
+ super();
+ this.z = z;
+ this.x = x;
+ this.y = y;
+ this.fz = fz;
+ this.temp = temp;
+ }
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainRow.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainRow.java
new file mode 100644
index 0000000..35a44cf
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/GrainRow.java
@@ -0,0 +1,31 @@
+package com.fzzy.igds.data;
+
+import lombok.Data;
+
+/**
+ * 绮儏鏁版嵁瑙f瀽瀵硅薄-鍒椾俊鎭�
+ */
+@Data
+public class GrainRow {
+
+ private int y; //鎵�鍦ㄨ,鏁版嵁浠�0寮�濮嬶紝濡傛灉鏄瓛浠撶殑璇濓紝鐢ㄤ簬璁板綍绛掍粨鐨勬牴鏁�
+
+ private Double tempMin; //灞傛渶浣庢俯
+
+ private Double tempMax; //灞傛渶楂樻俯
+
+ private Double tempAve = 0.0; //灞傚钩鍧囨俯
+
+ private int sumNum;// 褰撳墠灞傛�绘暟
+
+ private double sumTemp;// 灞傛�绘俯搴�
+
+ public GrainRow() {
+ super();
+ }
+
+ public GrainRow(int y) {
+ super();
+ this.y = y;
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/LayPage.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/LayPage.java
new file mode 100644
index 0000000..1ea874f
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/LayPage.java
@@ -0,0 +1,175 @@
+package com.fzzy.igds.data;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description 瀵筆age<E>缁撴灉杩涜鍖呰 涔嬫墍浠ヨ繘琛屽皝瑁呮槸鍥犱负LayUI涓笉绠″垎椤典笌鍚﹁幏鍙栨暟鎹紝閮介渶瑕佷竴涓畬鏁寸殑鏍煎紡杩斿洖銆� LAYUI涓姹傛煡璇㈡暟鎹繀椤诲皝瑁呬负锛歿code:0,msg:"",count:1000,data:[] }
+ * @Author CZT
+ * @Date 2025/11/29 10:56
+ */
+public class LayPage<T> implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+ // 褰撳墠椤�
+ private long curr;
+ // 姣忛〉鐨勬暟閲�
+ private long limit;
+ // 鎬昏褰曟暟
+ private long count;
+ // 鎬婚〉鏁�
+ private int pages;
+ // 缁撴灉闆�
+ private List<T> data;
+ // 鏄惁涓虹涓�椤�
+ private boolean isFirstPage = false;
+ // 鏄惁涓烘渶鍚庝竴椤�
+ private boolean isLastPage = false;
+
+ // LayUI涓殑蹇呴』杩斿洖鐨勭粨鏋滅紪鐮� 0琛ㄧず鎴愬姛銆�
+ private int code = 0;
+ // LayUI涓紓甯镐俊鎭��
+ private String msg;
+
+ public LayPage() {
+ super();
+ this.count = 0;
+ this.curr = 1;
+ this.code = 0;
+ this.msg ="鏃犳暟鎹�";
+ }
+
+ /**
+ * 鍖呰Page瀵硅薄
+ *
+ * @param list
+ */
+ public LayPage(List<T> list) {
+ super();
+ if (null == list || list.isEmpty()) {
+ this.count = 0;
+ this.curr = 1;
+ this.code = 0;
+ this.msg ="鏃犳暟鎹�";
+ }
+ if (list instanceof Collection) {
+ this.curr = 1;
+ this.limit = list.size();
+
+ this.pages = 1;
+ this.data = list;
+ this.count = list.size();
+ }
+ if (list instanceof Collection) {
+ // 鍒ゆ柇椤甸潰杈圭晫
+ judgePageBoudary();
+ }
+ }
+
+ public LayPage(Page<T> page) {
+ this.curr = page.getCurrent();
+ this.limit = page.getSize();
+
+ this.pages = (int)page.getPages();
+ this.data = (List<T>) page.getRecords();
+ this.count = page.getTotal();
+ }
+
+ /**
+ * 鍒ゅ畾椤甸潰杈圭晫
+ */
+ private void judgePageBoudary() {
+ isFirstPage = curr == 1;
+ isLastPage = curr == pages;
+ }
+
+ public long getPageNum() {
+ return curr;
+ }
+
+ public void setPageNum(int pageNum) {
+ this.curr = pageNum;
+ }
+
+ public long getLimit() {
+ return limit;
+ }
+
+ public void setLimit(int limit) {
+ this.limit = limit;
+ }
+
+ public long getCount() {
+ return count;
+ }
+
+ public void setCount(long count) {
+ this.count = count;
+ }
+
+ public int getPages() {
+ return pages;
+ }
+
+ public void setPages(int pages) {
+ this.pages = pages;
+ }
+
+ public List<T> getData() {
+ return data;
+ }
+
+ public void setData(List<T> data) {
+ this.data = data;
+ }
+
+ public boolean isIsFirstPage() {
+ return isFirstPage;
+ }
+
+ public void setIsFirstPage(boolean isFirstPage) {
+ this.isFirstPage = isFirstPage;
+ }
+
+ public boolean isIsLastPage() {
+ return isLastPage;
+ }
+
+ public void setIsLastPage(boolean isLastPage) {
+ this.isLastPage = isLastPage;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuffer sb = new StringBuffer("PageInfo{");
+ sb.append("curr=").append(curr);
+ sb.append(", limit=").append(limit);
+ sb.append(", count=").append(count);
+ sb.append(", pages=").append(pages);
+ sb.append(", data=").append(data);
+ sb.append(", isFirstPage=").append(isFirstPage);
+ sb.append(", isLastPage=").append(isLastPage);
+ sb.append(", navigatepageNums=");
+ sb.append('}');
+ return sb.toString();
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/PrintModeData.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/PrintModeData.java
new file mode 100644
index 0000000..7c15d18
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/PrintModeData.java
@@ -0,0 +1,31 @@
+package com.fzzy.igds.data;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * @Description 鐢ㄤ簬灏佽妯℃澘绮儏妯℃澘淇℃伅
+ * @Author CZT
+ * @Date 2025/11/29 11:02
+ */
+@Data
+public class PrintModeData implements Serializable {
+
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5679268829597439794L;
+
+ private String companyId; //缁勭粐缂栫爜
+
+ private String depotType; //浠撳簱绫诲瀷
+
+ private String model; //妯℃澘鍐呭
+
+ private String modelType = "COMMON"; //妯℃澘绫诲瀷,閫氱敤妯℃澘=COMMON锛岃瑙勫垯妯℃澘=ROW
+
+ private String msg; //寮傚父淇℃伅
+
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/LogOperation.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/LogOperation.java
new file mode 100644
index 0000000..715147d
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/LogOperation.java
@@ -0,0 +1,52 @@
+package com.fzzy.igds.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.bstek.dorado.annotation.PropertyDef;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description 鎿嶄綔鏃ュ織锛屼粎浠呰〃绀轰笟鍔′笂鐨勬搷浣滄棩蹇椼��
+ * @Author CZT
+ * @Date 2025/11/25 17:20
+ */
+@Data
+@Entity
+@Table(name = "d_log_operation")
+@TableName("d_log_operation")
+@EqualsAndHashCode(callSuper = false)
+public class LogOperation extends BizBaseEntity implements Serializable {
+
+ @Id
+ @Column(name = "id", unique = true, length = 40)
+ @PropertyDef(label = "id")
+ private String id;
+
+ @Column(name = "dept_id", columnDefinition = "varchar(40) COMMENT '鎵�灞炲簱鍖�'")
+ @TableField("dept_id")
+ private String deptId;
+
+ @Column(name = "biz_type", columnDefinition = "varchar(40) COMMENT '涓氬姟绫诲瀷'")
+ @TableField("biz_type")
+ private String bizType = "sys";
+
+ @Column(name = "operate_time", columnDefinition = "datetime COMMENT '鎵ц鏃堕棿'")
+ @TableField("operate_time")
+ private Date operateTime;
+
+ @Column(name = "operate_user", columnDefinition = "varchar(40) COMMENT '鎵ц浜�'")
+ @TableField("operate_user")
+ private String operateUser;
+
+ @Column(name = "operate_info", columnDefinition = "varchar(1000) COMMENT '鎵ц鍐呭'")
+ @TableField("operate_info")
+ private String operateInfo;
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/GrainMapper.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/GrainMapper.java
new file mode 100644
index 0000000..a67464b
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/GrainMapper.java
@@ -0,0 +1,12 @@
+package com.fzzy.igds.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fzzy.igds.domain.Grain;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/12/9 10:00
+ */
+public interface GrainMapper extends BaseMapper<Grain> {
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/LogOperationMapper.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/LogOperationMapper.java
new file mode 100644
index 0000000..b83df79
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/LogOperationMapper.java
@@ -0,0 +1,10 @@
+package com.fzzy.igds.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fzzy.igds.domain.LogOperation;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface LogOperationMapper extends BaseMapper<LogOperation> {
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ExeBaseRequest.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ExeBaseRequest.java
new file mode 100644
index 0000000..a4486e0
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ExeBaseRequest.java
@@ -0,0 +1,63 @@
+package com.fzzy.igds.request;
+
+import com.fzzy.igds.utils.ContextUtil;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+@Data
+public class ExeBaseRequest<T> {
+
+ private String requestId;//鑷畾涔夊懡浠D
+
+ private String companyId;//缁勭粐缂栫爜
+
+ private String deptId;//鍒嗗簱缂栫爜
+
+ private String depotId;//浠撳簱缂栧彿
+
+ private String depotName;//浠撳簱鍚嶇О
+
+ private String bizType;//涓氬姟绫诲瀷
+
+ private String serId = "0";//鍒嗘満缂栧彿
+
+ private String serName = "鏃�";//鍒嗘満鍚嶇О
+
+ private String sn = "0";//鍒嗘満搴忓垪鍙�
+
+ private String ip; //鍒嗘満IP
+
+ private Integer port;//鍒嗘満绔彛鍙�
+
+ private String protocol;//褰撳墠鍛戒护鐨勫崗璁�
+
+ private Date exeTime = new Date();//鎵ц鏃堕棿
+
+ private String exeUser;// 鍙戣捣浜�
+
+ private boolean repeatTag = false;//鏄惁鏀寔閲嶅鎵ц锛屽嵆鍦ㄤ笂涓懡浠ゆ湭鍝嶅簲鐨勬椂鍊欙紝鍏佽鎵ц绗簩閬�
+
+ private boolean addLogTag = true;//鏄惁娣诲姞鏃ュ織
+
+ private boolean addCacheTag = true;//鏄惁娣诲姞鍔熻兘缂撳瓨
+
+ private String exeMsg = null;//鎵ц淇℃伅
+
+ private String errorMsg = null;//寮傚父淇℃伅
+
+ private boolean isSave = true;//鏄惁淇濆瓨鍒版暟鎹簱
+
+ private String status = ReqStatus.IN_PROGRESS.getCode();
+
+ private T reqData = null;//鍛戒护鎵ц鏁版嵁灏佽
+
+ public ExeBaseRequest() {
+ super();
+ this.requestId = ContextUtil.getTimeId(1000, 9999);
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/GrainReqData.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/GrainReqData.java
new file mode 100644
index 0000000..d005fc2
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/GrainReqData.java
@@ -0,0 +1,33 @@
+package com.fzzy.igds.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serializable;
+
+/**
+ * @Description 绮儏妫�娴嬭姹�
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class GrainReqData implements Serializable {
+
+ private int cableStart;//鐢电紗寮�濮�
+
+ private int cableEnd;//鐢电紗鎴嚦
+
+ private String cableRule;
+
+ private String thSerId;//浠撴俯浠撴箍浣跨敤鐨勫垎鏈�
+
+ private String thConf;//浠撴俯婀块�氶亾
+
+ private String isMoreDepot;//澶氫粨骞跺彂锛氶拡瀵笷ZZY-TCP-V6鍗忚浣跨敤
+
+ public GrainReqData() {
+ super();
+ }
+
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ReqStatus.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ReqStatus.java
new file mode 100644
index 0000000..806287b
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ReqStatus.java
@@ -0,0 +1,31 @@
+package com.fzzy.igds.request;
+
+/**
+ * @Description 鎵ц鍛戒护鐨勭姸鎬侊紝濡傛灉鐘舵�佹墽琛屼腑锛岄偅涔堜笉鍏佽閲嶅鎵ц鍚屼竴涓被鍨嬬殑鍛戒护
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+public enum ReqStatus {
+ INIT("INIT", "鍒濆鍖栫姸鎬�"),
+ IN_PROGRESS("IN_PROGRESS", "鎵ц涓�"),
+ SEND_ERROR("SEND_ERROR", "鍙戦�佸紓甯�"),
+ ANALYSIS_ERROR("ANALYSIS_ERROR", "瑙f瀽寮傚父"),
+ TIMEOUT_ERROR("TIMEOUT_ERROR", "澶勭悊瓒呮椂"),
+ COMPLETE("COMPLETE", "瀹屾垚");
+
+ private String code;
+ private String msg;
+
+ ReqStatus(String code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ThReqData.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ThReqData.java
new file mode 100644
index 0000000..766227c
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/request/ThReqData.java
@@ -0,0 +1,16 @@
+package com.fzzy.igds.request;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description 浠撴俯浠撴箍璇锋眰
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+@Data
+public class ThReqData implements Serializable {
+
+ private String thConf;//浠撴俯婀块�氶亾
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/response/BaseResponse.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/response/BaseResponse.java
new file mode 100644
index 0000000..c6b46e5
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/response/BaseResponse.java
@@ -0,0 +1,40 @@
+package com.fzzy.igds.response;
+
+import com.fzzy.igds.constant.OrderRespEnum;
+import lombok.Data;
+
+/**
+ * @Description 鍝嶅簲鏁版嵁灏佽锛屽懡浠ょ殑璇锋眰鍒嗕负涓や釜闃舵锛屽彂閫佸拰鍝嶅簲
+ * @Author CZT
+ * @Date 2025/12/9 9:56
+ */
+@Data
+public class BaseResponse {
+
+ //鎵ц楠岃瘉鎴愬姛
+ public static final String CHECK_SUCCESS ="0000";
+ //鎵ц楠岃瘉澶辫触锛屽叿浣撳け璐ュ師鍥犳剰鑷畾涔�
+ public static final String CHECK_ERROR ="1111";
+
+
+ private String code;//璇锋眰浠g爜
+
+ private String msg;//璇锋眰杩斾俊鎭�
+
+ private String orderId;
+
+ public BaseResponse() {
+ }
+
+ public BaseResponse(String code, String msg) {
+ this.msg = msg;
+ this.code = code;
+ }
+
+ public BaseResponse(OrderRespEnum orderRespEnum) {
+ this.msg = orderRespEnum.getMsg();
+ this.code = orderRespEnum.getCode();
+ }
+
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/response/GrainResponse.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/response/GrainResponse.java
new file mode 100644
index 0000000..ddb1279
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/response/GrainResponse.java
@@ -0,0 +1,18 @@
+package com.fzzy.igds.response;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Description 绮儏妫�娴嬪搷搴旂粨鏋滀俊鎭�
+ * @Author CZT
+ * @Date 2025/12/9 9:56
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class GrainResponse extends BaseResponse {
+
+ public GrainResponse(String code, String msg) {
+ super(code,msg);
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FileService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FileService.java
index cdbe480..c6c9507 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FileService.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FileService.java
@@ -178,6 +178,38 @@
}
/**
+ * 鑾峰彇涓存椂璺緞
+ * @param companyId
+ * @return
+ */
+ public String getTempFilePath(String companyId) {
+
+ String basePath = FrameworkConfig.getProfile() + "TEMP/";
+ if (org.apache.commons.lang3.StringUtils.isNotEmpty(companyId)) {
+ basePath += companyId + "/";
+ }
+ File file = new File(basePath);
+ if (!file.exists()) {
+ file.mkdirs();
+ }
+ return basePath;
+ }
+
+ /**
+ * 鑾峰彇妯℃澘璺緞
+ * @return
+ */
+ public String getConfPath() {
+
+ String basePath = FrameworkConfig.getProfile() + "CONF/";
+ File file = new File(basePath);
+ if (!file.exists()) {
+ file.mkdirs();
+ }
+ return basePath;
+ }
+
+ /**
* 鍘嬬缉鍥剧墖
*
* @param filePath 鍘嬬缉鍓嶈矾寰�
@@ -201,4 +233,6 @@
ImageIO.write(compressedImage, "jpg", new File(outputPath));
}
+
+
}
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
new file mode 100644
index 0000000..24520e5
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java
@@ -0,0 +1,65 @@
+package com.fzzy.igds.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fzzy.igds.data.GrainParam;
+import com.fzzy.igds.domain.Grain;
+import com.fzzy.igds.mapper.GrainMapper;
+import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.igds.utils.DateUtil;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/12/9 10:00
+ */
+@Slf4j
+@Service
+public class GrainService {
+
+ @Resource
+ private GrainMapper grainMapper;
+
+ /**
+ * 鏌ヨ鏁版嵁
+ * @param param
+ */
+ public List<Grain> listData(GrainParam param) {
+ if(StringUtils.isBlank(param.getCompanyId())){
+ param.setCompanyId(ContextUtil.getCompanyId());
+ }
+ if(StringUtils.isBlank(param.getDeptId())){
+ param.setDeptId(ContextUtil.subDeptId(null));
+ }
+
+ QueryWrapper<Grain> queryWrapper = new QueryWrapper<>();
+ if (StringUtils.isNotBlank(param.getCompanyId())) {
+ queryWrapper.eq("company_id", param.getCompanyId());
+ }
+ if (StringUtils.isNotBlank(param.getDeptId())) {
+ queryWrapper.eq("dept_id", param.getDeptId());
+ }
+ if (StringUtils.isNotBlank(param.getDepotId())) {
+ queryWrapper.eq("depot_id", param.getDepotId());
+ }
+ if (StringUtils.isNotBlank(param.getBatchId())) {
+ queryWrapper.eq("batch_id", param.getBatchId());
+ }
+ if (null != param.getStart()) {
+ queryWrapper.ge("receive_date", DateUtil.getCurZero(param.getStart()));
+ }
+ if (null != param.getEnd()) {
+ queryWrapper.le("receive_date", DateUtil.getNextZero(param.getEnd()));
+ }
+ queryWrapper.orderByDesc("batch_id");
+ return grainMapper.selectList(queryWrapper);
+ }
+
+
+
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/LogOperationService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/LogOperationService.java
new file mode 100644
index 0000000..7a3addc
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/LogOperationService.java
@@ -0,0 +1,38 @@
+package com.fzzy.igds.service;
+
+import com.fzzy.igds.domain.LogOperation;
+import com.fzzy.igds.mapper.LogOperationMapper;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.utils.StringUtils;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * @Description 鏃ュ織
+ * @Author CZT
+ * @Date 2025/11/26 17:48
+ */
+@Service
+public class LogOperationService {
+
+ @Resource
+ private LogOperationMapper logOperationMapper;
+
+ /**
+ *
+ * @param data
+ * @return
+ */
+ public void addLog(LogOperation data) {
+ if (StringUtils.isBlank(data.getId())) {
+ data.setId(ContextUtil.generateId());
+ }
+ data.setCreateBy(ContextUtil.getLoginUserName());
+ data.setCreateTime(new Date());
+ data.setUpdateBy(ContextUtil.getLoginUserName());
+ data.setUpdateTime(new Date());
+ logOperationMapper.insert(data);
+ }
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java
index c23c9e4..a25b518 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java
@@ -170,4 +170,12 @@
public static String getCompanyIdBySn(String sn) {
return contextSnCompanyIdMap.get(sn);
}
+
+ public static String getTimeId() {
+ return DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");
+ }
+
+ public static String getTimeId(int start, int end) {
+ return DateFormatUtils.format(new Date(), "yyyyMMddHHmmss") + RandomUtils.nextInt(start, end);
+ }
}
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
new file mode 100644
index 0000000..51003af
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainDataBuilder.java
@@ -0,0 +1,636 @@
+package com.fzzy.igds.utils;
+
+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.domain.DepotConf;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import java.util.*;
+
+/**
+ * @Description 绮儏鏁版嵁鍚勪釜绫诲瀷鐨勮浆鎹㈡帶鍒�
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+@Slf4j
+public class GrainDataBuilder {
+
+ /**
+ * 鏍规嵁鍗曚釜绮儏鐨勬暟鎹俊鎭紝鍖呮嫭閲囬泦鐐瑰拰灞備俊鎭�
+ *
+ * @param result
+ * @param depotConf
+ * @param depotType
+ */
+ public static void updateGrainData(GrainData result, DepotConf depotConf, String depotType) {
+
+ if (null == depotType || null == depotConf) {
+ return;
+ }
+
+ List<GrainPoint> listPoints = new ArrayList<>();
+ List<GrainLay> listLays = new ArrayList<>();
+ List<GrainRow> listRows = new ArrayList<>();
+
+ // 鏍规嵁浠撳簱绫诲瀷涓嶅悓杩涜涓嶅悓璋冩暣
+ if (DepotType.TYPE_02.getCode().equals(depotType)) {// 娴呭渾浠�
+ result = buildLLaysAndRows2(listPoints, listLays, listRows, result, depotConf);
+
+ } else if (DepotType.TYPE_03.getCode().equals(depotType)) {
+
+ result = buildLLaysAndRows3(listPoints, listLays, listRows, result, depotConf);
+
+ } else if (DepotType.TYPE_04.getCode().equals(depotType)) {
+ result = buildLLaysAndRows2(listPoints, listLays, listRows, result, depotConf);
+
+ } else {
+ result = buildLLaysAndRows1(listPoints, listLays, listRows, result, depotConf);
+ }
+
+ result.setListLays(listLays);
+ result.setListRows(listRows);
+ result.setListPoints(listPoints);
+
+ log.debug("---------{}", JSONObject.toJSONString(result));
+ }
+
+ /**
+ * 骞虫柟浠� 璺熸柊灞傛暟鎹拰琛屾暟鎹�
+ *
+ * @param listPoints
+ * @param listLays
+ * @param listRows
+ * @param result
+ * @param depotConf
+ * @return
+ */
+ public static GrainData buildLLaysAndRows1(List<GrainPoint> listPoints,
+ List<GrainLay> listLays, List<GrainRow> listRows,
+ GrainData result, DepotConf depotConf) {
+
+ String points = result.getPoints();
+ String cable = result.getCable();
+ // 鑾峰彇甯冪嚎瑙勫垯
+ if (StringUtils.isEmpty(cable)) {
+ return result;
+ }
+ if (StringUtils.isEmpty(points)) {
+ return result;
+ }
+
+ String[] attr = cable.split("-");
+ int cableZ = Integer.valueOf(attr[0]);
+ int cableY = Integer.valueOf(attr[1]);
+ int cableX = Integer.valueOf(attr[2]);
+
+ // 鏍规嵁灞傛洿鏂板眰鍒楄〃淇℃伅
+ updateListLays(listLays, cableX, cableY, cableZ);
+
+ // 鏇存柊琛屾暟鎹殑鍒楄〃
+ updateListRows(listRows, cableX, cableY, cableZ);
+
+ attr = points.split(",");
+
+ GrainPoint point;
+ Double tempT;
+ GrainLay lay;
+ GrainRow row;
+ List<Integer> listErrorTag = new ArrayList<>();// 鏁呴殰鎴栬�呴敊璇殑鐐�
+ Double sumAll = 0.0;
+
+ Double sumAllTemp = 0.0;
+
+ int sumAllNum = 0;
+ int tempT2;
+ 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);
+
+ // 寮�濮嬪皝瑁呰鏁版嵁淇℃伅
+ row = listRows.get(y);
+
+ if (tempT <= Constant.ERROR_TEMP) {
+ listErrorTag.add(i);
+
+ lay.setSumNum(lay.getSumNum() - 1);
+
+ row.setSumNum(row.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;
+ // 楂樻俯浼樺寲鐨勫惎鐢ㄨ姹�1-澶勭悊鍗曚釜楂樻俯鐐�
+ if (null != depotConf
+ && null != depotConf.getTempMax()
+ && Constant.YN_Y.equals(depotConf.getGrainAuto())) {
+
+ if (tempT > depotConf.getTempMax()) {
+ tempT2 = (int) (tempT - depotConf.getTempMax()) + 1;
+ tempT = NumberUtil.keepPrecision(tempT - tempT2, 1);
+ result.setRemark("绮俯妫�娴嬫甯�");
+ log.debug("--鍘熷��={},--宸��={},--缁撴灉={}", point.getTemp(),
+ tempT2, tempT);
+ }
+ if (result.getTempMax() > depotConf.getTempMax()) {
+ tempT2 = (int) (result.getTempMax() - depotConf
+ .getTempMax()) + 1;
+ result.setTempMax(NumberUtil.keepPrecision(
+ result.getTempMax() - tempT2, 1));
+ }
+ if (tempT > result.getTempMax()) {
+ result.setTempMax(tempT);
+ }
+ }
+
+ // 灞傝鍒楄ˉ鍏�
+ lay.setSumTemp(lay.getSumTemp() + tempT);
+ lay.setSumTemp(NumberUtil.keepPrecision(lay.getSumTemp(), 1));
+
+ row.setSumTemp(row.getSumTemp() + tempT);
+ row.setSumTemp(NumberUtil.keepPrecision(row.getSumTemp(), 1));
+
+ 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);
+ }
+
+ // 琛屾渶楂樻渶浣�
+ if (tempT > row.getTempMax()) {
+ row.setTempMax(tempT);
+ }
+ if (tempT < row.getTempMin()) {
+ row.setTempMin(tempT);
+ }
+
+ // log.info("----娓╁害鐐�={}",tempT);
+ sumAll += tempT;
+ sumAllNum = sumAllNum + 1;
+ point.setTemp(tempT);
+ }
+ point.setTemp(NumberUtil.keepPrecision(point.getTemp(), 1));
+ 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));
+ }
+ //杩囨护鎺夋瘮杈冪殑鏈�澶ф渶灏忕殑鍊�50鍜�-50
+ if (detail.getTempMax() == -50) {
+ detail.setTempMax(0.0);
+ }
+ if (detail.getTempMin() == 50) {
+ detail.setTempMin(0.0);
+ }
+ }
+
+ // 璋冩暣琛屼俊鎭�
+ for (GrainRow detail : listRows) {
+ if (0 != detail.getSumNum()) {
+ detail.setTempAve(detail.getSumTemp() / detail.getSumNum());
+ detail.setTempAve(NumberUtil.keepPrecision(detail.getTempAve(),
+ 1));
+ }
+ //杩囨护鎺夋瘮杈冪殑鏈�澶ф渶灏忕殑鍊�50鍜�-50
+ if (detail.getTempMax() == -50) {
+ detail.setTempMax(0.0);
+ }
+ if (detail.getTempMin() == 50) {
+ detail.setTempMin(0.0);
+ }
+ }
+ Random random = new Random();
+ Double randomValue;
+ if (null != depotConf && Constant.YN_Y.equals(depotConf.getGrainAuto())) {
+ if (listErrorTag.size() > 0) {
+ for (Integer integer : listErrorTag) {
+ point = listPoints.get(integer);
+ // 鑾峰彇褰撳墠灞傜殑淇℃伅
+ lay = listLays.get(point.getZ());
+ randomValue = lay.getTempMin() + (lay.getTempMax() - lay.getTempMin()) * random.nextDouble();
+ point.setTemp(NumberUtil.keepPrecision(randomValue, 1));
+ attr[integer] = NumberUtil.keepPrecision(randomValue, 1) + "";
+ listPoints.set(integer, point);
+ }
+ }
+
+ }
+
+ if (null != depotConf && Constant.YN_Y.equals(depotConf.getGrainAuto())) {
+ {
+ log.debug("---鍘熷钩鍧�={},鍚庢�绘俯={},--鍚庢�讳釜鏁�={},鍚庡钩鍧�={},鍘熸�绘俯={}",
+ result.getTempAve(), sumAll, sumAllNum, sumAll / sumAllNum,
+ sumAllTemp);
+ result.setTempAve(NumberUtil.keepPrecision((sumAll / sumAllNum), 1));
+ }
+ }
+
+ result.setPoints(StringUtils.join(attr, ","));
+ return result;
+ }
+
+ /**
+ * 鍦嗙瓛浠� 鏇存柊灞曠ず鏁堟灉鏁版嵁
+ *
+ * @param listPoints
+ * @param listLays
+ * @param listRows
+ * @param result
+ * @param depotConf
+ * @return
+ */
+ private static GrainData buildLLaysAndRows2(List<GrainPoint> listPoints,
+ List<GrainLay> listLays, List<GrainRow> listRows,
+ GrainData result, DepotConf depotConf) {
+
+ String points = result.getPoints();
+ String cableRule = result.getCable();
+ String cableCir = result.getCableCir();
+
+ if (StringUtils.isEmpty(points)) {
+ return result;
+ }
+
+ // 鑾峰彇甯冪嚎瑙勫垯
+ if (StringUtils.isEmpty(cableRule) || StringUtils.isEmpty(cableCir)) {
+ return result;
+ }
+ // 姣忎竴鍦堝垪鏁�
+ String[] cableRuleAtt = result.getCable().split("-");
+ // 姣忎竴鍦堝眰鏁�
+ String[] cableCirAtt = result.getCableCir().split("-");
+
+ if (cableRuleAtt.length != cableCirAtt.length) {
+ log.error("褰撳墠浠撳簱锛歿}锛屽竷绾胯鍒欎笉姝g‘锛屾棤娉曡В鏋愮伯鎯呬俊鎭�︹��", depotConf.getDepotId());
+ return result;
+ }
+
+ // 鑾峰彇鏈�澶х殑灞傞厤缃�--榛樿姣忎竴鍦堥兘涓�鏍�
+ 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]);
+ }
+ if (null == depotConf.getCableCone() || depotConf.getCableCone().isEmpty()) {
+ depotConf.setCableCone(Constant.CABLE_CONE_0);
+ }
+
+ // 鏍规嵁灞傛洿鏂板眰鍒楄〃淇℃伅
+ updateListLaysCir(listLays, cableRuleAtt, cableCirAtt, layMax, depotConf.getCableCone());
+
+ 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
+ && null != depotConf.getTempMax()
+ && Constant.YN_Y.equals(depotConf.getGrainAuto())) {
+ if (tempT > depotConf.getTempMax()) {
+ //璁板綍楂樻俯鐐圭殑浣嶇疆
+ listHighTag.add(listPoints.size() - 1);
+ } else {
+ 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();
+ }
+ }
+ }
+ Random random = new Random();
+ Double randomValue;
+ //楂樻俯鐐规浛鎹负灞傚钩鍧囧��
+ if (null != depotConf && Constant.YN_Y.equals(depotConf.getGrainAuto())) {
+ if (listHighTag.size() > 0) {
+ for (Integer integer : listHighTag) {
+ point = listPoints.get(integer);
+ // 鑾峰彇褰撳墠灞傜殑淇℃伅
+ lay = listLays.get(point.getZ());
+ randomValue = lay.getTempMin() + (lay.getTempMax() - lay.getTempMin()) * random.nextDouble();
+ point.setTemp(NumberUtil.keepPrecision(randomValue, 1));
+ attr[integer] = NumberUtil.keepPrecision(randomValue, 1) + "";
+ listPoints.set(integer, point);
+ }
+ //璁剧疆鏈�楂樻俯
+ result.setTempMax(maxTemp);
+ }
+ }
+ // 鏈�鍚庢牴鎹叏灞�鍙傛暟鍒ゆ柇鏄惁闇�瑕佽皟鏁村紓甯哥偣鏁版嵁杩涜璋冩暣
+ if (null != depotConf && Constant.YN_Y.equals(depotConf.getGrainAuto())) {
+ if (listErrorTag.size() > 0) {
+ for (Integer integer : listErrorTag) {
+ point = listPoints.get(integer);
+ // 鑾峰彇褰撳墠灞傜殑淇℃伅
+ lay = listLays.get(point.getZ());
+ point.setTemp(lay.getTempAve());
+
+ listPoints.set(integer, point);
+ }
+ }
+ }
+
+ result.setListPoints(listPoints);
+ result.setListLays(listLays);
+ result.setPoints(StringUtils.join(attr, ","));
+ return result;
+ }
+
+
+ /**
+ * 娌圭瓛浠撹В鏋愶紝鏇存柊灞曠ず鏁堟灉鏁版嵁锛岃В鏋愭柟寮忓悓鏅�氱瓛浠撲俊鎭�
+ *
+ * @param listPoints
+ * @param listLays
+ * @param listRows
+ * @param result
+ * @param depotConf
+ * @return
+ */
+ private static GrainData buildLLaysAndRows3(List<GrainPoint> listPoints,
+ List<GrainLay> listLays, List<GrainRow> listRows,
+ GrainData result, DepotConf depotConf) {
+ if (StringUtils.isEmpty(result.getOilHeight())) {
+ result.setOilHeight("0.0-0.0");
+ log.warn("娌规《浠�={} 瑙f瀽杩囩▼涓病鏈夎幏鍙栧埌娌归潰楂樺害淇℃伅锛岄粯璁ゆ樉绀轰负0", depotConf.getDepotId());
+ } else {
+ if (result.getOilHeight().indexOf("-") == -1) {
+ result.setOilHeight(result.getOilHeight() + "-"
+ + result.getOilHeight());
+ log.warn("娌规《浠�={} 瑙f瀽涓病鏈夎幏鍙栧缓绛戠墿鐨勯珮搴︿俊鎭紝榛樿寤虹瓚鐗╅珮搴︾瓑浜庢恫浣嶉珮搴�",
+ depotConf.getDepotId());
+ }
+ }
+
+ return buildLLaysAndRows2(listPoints, listLays, listRows, result, depotConf);
+ }
+
+ /**
+ * @param listLays
+ * @param cableX
+ * @param cableY
+ * @param cableZ
+ */
+ private static void updateListLays(List<GrainLay> listLays, int cableX,
+ int cableY, int cableZ) {// 灞備粠1寮�濮�
+ 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);
+ listLays.add(lay);
+ }
+ }
+
+ /**
+ * @param listRows
+ * @param cableX
+ * @param cableY
+ * @param cableZ
+ */
+ private static void updateListRows(List<GrainRow> listRows, int cableX,
+ int cableY, int cableZ) {// 浠�0寮�濮�
+ GrainRow row;
+ for (int i = 0; i < cableY; i++) {
+ row = new GrainRow(i);
+ row.setSumNum(cableZ * cableX);
+ row.setTempMin(50.0);
+ row.setTempMax(-50.0);
+ listRows.add(row);
+ }
+ }
+
+ /**
+ * 鍦嗙瓛浠�--浠撴俯搴﹁В鏋�
+ *
+ * @param listLays
+ * @param cableRuleAtt
+ * @param cableCirAtt
+ * @param layMax
+ * @param cableCone
+ */
+ private static void updateListLaysCir(List<GrainLay> listLays,
+ String[] cableRuleAtt, String[] cableCirAtt, int layMax, String cableCone) {
+ GrainLay lay;
+
+ Map<String, GrainLay> layMap = new HashMap<>();
+ for (int j = 0; j < cableRuleAtt.length; j++) {
+
+ for (int i = 1; i <= layMax; i++) {
+ if (layMap.containsKey(i + "")) {
+ lay = layMap.get(i + "");
+ } else {
+ lay = new GrainLay(i, i);
+ }
+ int sumNum = lay.getSumNum();
+
+ if (cableCone.equals(Constant.CABLE_CONE_2)) {
+ if (Integer.parseInt(cableCirAtt[j]) >= i) {
+ sumNum += Integer.parseInt(cableRuleAtt[j]);
+ }
+ } else {
+ if (layMax - Integer.parseInt(cableCirAtt[j]) < i) {
+ sumNum += Integer.parseInt(cableRuleAtt[j]);
+ }
+ }
+ lay.setSumNum(sumNum);
+ lay.setSumInNum(1);
+ lay.setSumOutNum(1);
+ lay.setTempMin(50.0);
+ lay.setTempMax(-50.0);
+ layMap.put(i + "", lay);
+ }
+ }
+ for (int i = 1; i <= layMax; i++) {
+ listLays.add(layMap.get(i + ""));
+ }
+ }
+
+ /**
+ * 鍦嗙瓛浠�--浠撴俯搴﹁В鏋�
+ *
+ * @param listLays
+ * @param cableRuleAtt
+ * @param cableCirAtt
+ * @param layMax
+ */
+ private static void updateListLaysCir(List<GrainLay> listLays,
+ String[] cableRuleAtt, String[] cableCirAtt, int layMax) {
+ GrainLay lay;
+ for (int i = 1; i <= layMax; i++) {
+ lay = new GrainLay(i, i);
+ int sumNum = 0;
+
+ for (int j = 0; j < cableRuleAtt.length; j++) {
+ if (Integer.valueOf(cableCirAtt[j]) >= i) {
+ sumNum += Integer.valueOf(cableRuleAtt[j]);
+ }
+ }
+
+ lay.setSumNum(sumNum);
+ lay.setSumInNum(1);
+ lay.setSumOutNum(1);
+ lay.setTempMin(50.0);
+ lay.setTempMax(-50.0);
+ listLays.add(lay);
+ }
+ }
+
+ /**
+ * 鏍规嵁绮儏娓╁害锛屽垽鏂槸鍚﹁鍛婂�硷紝鐒跺悗杞崲涓洪〉闈㈤渶瑕佹覆鏌撶殑鍊硷紝涓昏澶囩敤鍜屾晠闅滅殑鍊肩殑璋冩暣
+ *
+ * @param temp
+ * @return
+ */
+ public static String renderTempValue(Double temp) {
+
+
+ if (temp > 45) return "鏁呴殰";
+
+ if (temp == Constant.ERROR_TEMP) return "澶囩敤";
+ if (temp == Constant.FAULT_TEMP) return "鏁呴殰";
+ if (temp == Constant.ADD_TEMP) return "--";
+
+ return temp + "";
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder.java
new file mode 100644
index 0000000..f96b3d0
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder.java
@@ -0,0 +1,43 @@
+package com.fzzy.igds.utils;
+
+import com.fzzy.igds.constant.DepotType;
+import com.fzzy.igds.data.GrainParam;
+import com.fzzy.igds.data.PrintModeData;
+
+/**
+ * @Description 绮儏鎵撳嵃妯℃澘鍚庡彴璁捐锛屽綋鍓嶄负妯℃澘璁捐鍏ュ彛
+ * @Author CZT
+ * @Date 2025/12/9 9:56
+ */
+public class GrainPrintBuilder {
+
+ /**
+ * 鑾峰彇鎵撳嵃妯℃澘
+ *
+ * @param param
+ * @return
+ */
+ public static PrintModeData buildPrintModel(GrainParam param) {
+ String depotType = param.getDepotType();
+ //骞虫柟浠�
+ if (DepotType.TYPE_01.getCode().equals(depotType)) {
+ return GrainPrintBuilder01.buildModel(param);
+ }
+ //绛掍粨
+ if (DepotType.TYPE_02.getCode().equals(depotType)) {
+ return GrainPrintBuilder04.buildModel(param);
+ }
+
+ //娌圭綈浠�
+ if (DepotType.TYPE_03.getCode().equals(depotType)) {
+ return GrainPrintBuilder03.buildModel(param);
+ }
+
+ //绔嬪悓浠�
+ if (DepotType.TYPE_04.getCode().equals(depotType)) {
+ return GrainPrintBuilder04.buildModel(param);
+ }
+ //骞虫柟浠�
+ return GrainPrintBuilder01.buildModel(param);
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder01.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder01.java
new file mode 100644
index 0000000..1933f71
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder01.java
@@ -0,0 +1,169 @@
+package com.fzzy.igds.utils;
+
+import com.fzzy.igds.data.GrainParam;
+import com.fzzy.igds.data.PrintModeData;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @Description 骞虫柟浠撴墦鍗版ā鏉�-閫氱敤
+ * @Author CZT
+ * @Date 2025/12/9 9:56
+ */
+@Slf4j
+public class GrainPrintBuilder01 {
+
+ /**
+ * 骞充粨浠撴墦鍗版ā鏉�
+ **/
+ public static PrintModeData buildModel(GrainParam param) {
+ PrintModeData result = new PrintModeData();
+ result.setCompanyId(param.getCompanyId());
+ result.setDepotType(param.getDepotType());
+
+ if (StringUtils.isEmpty(param.getCableRule())) {
+ result.setMsg("褰撳墠绮儏娌℃湁鑾峰彇鍒扮伯鎯呭竷绾胯鍒欓厤缃紝鏃犳硶鐢熸垚鎶ヨ〃锛�");
+ return result;
+ }
+
+ String[] attr = param.getCableRule().split("-");
+ int cableZ = Integer.valueOf(attr[0]);
+ int cableY = Integer.valueOf(attr[1]);
+ int cableX = Integer.valueOf(attr[2]);
+
+ StringBuilder sb = new StringBuilder();
+ //妯℃澘澶�
+ sb.append("<!DOCTYPE html><html lang=\"zh-cn\"><head><meta http-equiv=\"Content-Type\"content=\"text/html; charset=UTF-8\"><title>骞虫柟浠撴姤琛�</title></head><body>");
+
+ sb.append("<div id=\"print_main\" style=\"margin: 20px;\">");
+
+ //鏍峰紡琛紝涓嶈兘缂╄繘
+ sb.append("<style>");
+ sb.append("table,table tr th,table tr td {border:1px solid #0d1021}");
+ sb.append("table {width:100%;line-height:23px;text-align:center;font-size:14px}");
+ sb.append(".table-2 {border-top:0px solid #0d1021 !important}");
+ sb.append(".table-2 tr {border-top:0px solid #0d1021 !important}");
+ sb.append(".table-2 td {border-top:0px solid #0d1021 !important}");
+ sb.append(".row-tr {border-left:0px !important;border-right:0px!important;border-top:0px !important}");
+ sb.append(".row-tr1 {border-left:0px !important;border-right:0px !important;border-top:0px !important;font-size:12px}");
+ sb.append(".row-fz {border:0px !important}");
+ sb.append(".row-fz1 {border:0px !important;font-size:12px}");
+ sb.append(".row-li1 {font-size:12px}");
+ sb.append(".link-top {width:100%;border-top:solid #0d1021 1px}");
+ sb.append("</style>");
+
+ sb.append("<div style=\"text-align: center\"><span style=\"font-size: 26px; font-weight: bold;\">companyName绮儏鎶ヨ〃</span>");
+ sb.append("<div class=\"link-top\"></div><div class=\"link-top\"></div>");
+ sb.append("<span style=\"font-size: 16px;\">depotName 绮儏鎶ヨ〃</span></div>");
+
+ sb.append("<div style=\"margin-top: 5px;\"><span style=\"float: left;\">澶╂皵锛歸eather 鏂瑰悜锛�</span><span style=\"float: right;\">妫�娴嬫椂闂达細checkDate</span></div>");
+
+ //<!--鍔ㄦ�佸潗鏍�-->
+ sb.append("<table cellspacing=\"0\" cellpadding=\"0\">");
+ sb.append("<tr>");
+
+ if (cableX > 18) {
+ sb.append("<td colspan=\"2\" class='row-li1'></td>");
+ } else {
+ sb.append("<td colspan=\"2\"></td>");
+ }
+
+ for (int i = 1; i <= cableX; i++) {
+ if (cableX > 18) {
+ sb.append("<td class='row-li1'>");
+ } else {
+ sb.append("<td>");
+ }
+
+ sb.append("绗�" + i + "鍒�");
+ sb.append("</td>");
+ }
+ sb.append("</tr>");
+
+ // <!-- 鍔ㄦ�佸湀-->
+ for (int y = 1; y <= cableY; y++) {
+ String className = "row-fz";
+ if (cableX > 18) className = "row-fz1";
+ for (int z = 1; z <= cableZ; z++) {
+ sb.append("<tr>");
+ if (z == cableZ) {
+ className = "row-tr";
+ if (cableX > 18) className = "row-tr1";
+ }
+ //琛�
+ if (z == 1) {
+ sb.append("<td rowspan='");
+ sb.append(cableZ);
+ sb.append("' class='");
+ if (cableX > 18) {
+ sb.append("row-tr1");
+ } else {
+ sb.append("row-tr");
+ }
+ sb.append("'>");
+ sb.append(y);
+ sb.append("琛�</td>");
+ }
+ //灞�
+ sb.append("<td class='");
+ sb.append(className);
+ sb.append("'>" + z + "灞�</td>");
+
+ //娣诲姞鏁版嵁
+ for (int x = cableX; x >= 1; x--) {
+ sb.append("<td class='");
+ sb.append(className);
+ sb.append("'>");
+ sb.append(z + "_" + y + "_" + x);
+ sb.append("</td>");
+ }
+ }
+
+ sb.append("<tr>");
+ }
+ sb.append("</table>");
+
+ // <!--鍔ㄦ�佸眰琛ㄦ牸-->
+ sb.append("<table cellspacing=\"0\" cellpadding=\"0\" class=\"table-2\"><tr><td width=\"200px\">绮儏鍒嗘瀽锛�</td><td colspan=\"5\">");
+ sb.append("remark</td></tr><tr><td></td><td width=\"16.6%\">鏈�楂�</td><td width=\"16.6%\">鏈�浣�</td><td width=\"16.6%\">骞冲潎</td><td width=\"16.6%\">鍛ㄥ潎</td><td width=\"16.6%\">鍐呭潎</td></tr>");
+ //灞備俊鎭�
+ for (int k = 1; k <= cableZ; k++) {
+ sb.append("<tr>\n<td>绗�");
+ sb.append(k);
+ sb.append("灞�</td>");
+ sb.append("<td>c_max_" + k + "</td>");
+ sb.append("<td>c_min_" + k + "</td>");
+ sb.append("<td>c_ave_" + k + "</td>");
+ sb.append("<td>c_out_ave_" + k + "</td>");
+ sb.append("<td>c_in_ave_" + k + "</td>");
+ sb.append("</tr>");
+ }
+
+ //鏁翠粨
+ sb.append("<tr><td>鏁� 浠�</td>");
+ sb.append("<td>c_max_all</td>");
+ sb.append("<td>c_min_all</td>");
+ sb.append("<td>c_ave_all</td>");
+ sb.append("<td>c_out_ave_all</td>");
+ sb.append("<td>c_in_ave_all</td>");
+
+ //<!-- 鍥哄畾鏁版嵁-->
+ sb.append("<tr><td >浠撴俯锛歝_tIn</td><td >浠撴箍锛歝_hIn</td><td colspan=\"2\">姘旀俯锛歝_tOut</td><td colspan=\"2\">姘旀箍锛歝_hOut</td></tr>");
+ sb.append("<tr><td>浠撴埧绫诲瀷</td><td >c_depotType</td><td colspan=\"2\">鍏ヤ粨鏃ユ湡</td><td colspan=\"2\">c_storeDate</td></tr>");
+ sb.append("<tr><td>鏉傝川锛�%锛�</td><td>c_perImpurity</td><td colspan=\"2\">绮浜у湴</td><td colspan=\"2\">c_foodLocation</td></tr>");
+ sb.append("<tr><td>妫�娴嬩汉</td><td>c_checkUser</td><td colspan=\"2\">淇濈鍛�</td><td colspan=\"2\">c_storeKeeperName</td></tr>");
+ sb.append("</table>");
+
+ // <!--灏鹃儴淇℃伅 -->
+ sb.append("<div style=\"margin-top: 5px;\"><span style=\"float: left;\">娉細#琛ㄧず灞傛渶浣庢俯 *琛ㄧず灞傛渶楂樻俯</span><span style=\"float: right;\">鍒惰〃鏃堕棿锛歝reateBillDate</span></div>");
+ sb.append("</div></body></html>");
+
+ log.debug("鑾峰彇鍒扮殑绮儏妯℃澘={}", sb.toString());
+
+
+ result.setModel(sb.toString());
+ return result;
+ }
+
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder03.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder03.java
new file mode 100644
index 0000000..25e439e
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder03.java
@@ -0,0 +1,168 @@
+package com.fzzy.igds.utils;
+
+import com.fzzy.igds.data.GrainParam;
+import com.fzzy.igds.data.PrintModeData;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @Description 娌规《浠撴墦鍗版ā鏉� -閫氱敤
+ * @Author CZT
+ * @Date 2025/12/9 9:56
+ */
+@Slf4j
+public class GrainPrintBuilder03 {
+
+ /**
+ * 娌圭綈浠�
+ **/
+ public static PrintModeData buildModel(GrainParam param) {
+ PrintModeData result = new PrintModeData();
+ result.setCompanyId(param.getCompanyId());
+ result.setDepotType(param.getDepotType());
+
+ if (StringUtils.isEmpty(param.getCableRule()) || StringUtils.isEmpty(param.getCableCir())) {
+ result.setMsg("褰撳墠绮儏娌℃湁鑾峰彇鍒扮伯鎯呭竷绾胯鍒欓厤缃紝鏃犳硶鐢熸垚鎶ヨ〃锛�");
+ return result;
+ }
+
+ //鑾峰彇灞傜殑鏈�楂樺��
+ int layMax = 1;
+ String[] arrLay = param.getCableCir().split("-");
+ for (String lay : arrLay) {
+ if (Integer.valueOf(lay) > layMax) layMax = Integer.valueOf(lay);
+ }
+
+ String[] arrRule = param.getCableRule().split("-");
+ int cirNum = arrRule.length;
+
+
+ StringBuilder sb = new StringBuilder();
+ //妯℃澘澶�
+ sb.append("<!DOCTYPE html><html lang=\"zh-cn\"><head><meta http-equiv=\"Content-Type\"content=\"text/html; charset=UTF-8\"><title>绛掍粨鎶ヨ〃</title></head><body>");
+
+ sb.append("<div id=\"print_main\" style=\"margin: 20px;\">");
+
+ //鏍峰紡琛紝涓嶈兘缂╄繘
+ sb.append("<style>");
+ sb.append("table,table tr th,table tr td {border:1px solid #0d1021}");
+ sb.append("table {width:100%;line-height:23px;text-align:center;font-size:14px}");
+ sb.append(".table-2 {border-top:0px solid #0d1021 !important}");
+ sb.append(".table-2 tr {border-top:0px solid #0d1021 !important}");
+ sb.append(".table-2 td {border-top:0px solid #0d1021 !important}");
+ sb.append(".row-tr {border-left:0px !important;border-right:0px!important;border-top:0px !important}");
+ sb.append(".row-tr1 {border-left:0px !important;border-right:0px !important;border-top:0px !important;font-size:12px}");
+ sb.append(".row-fz {border:0px !important}");
+ sb.append(".row-fz1 {border:0px !important;font-size:12px}");
+ sb.append(".row-li1 {font-size:12px}");
+ sb.append(".link-top {width:100%;border-top:solid #0d1021 1px}");
+ sb.append("</style>");
+
+ sb.append("<div style=\"text-align: center\"><span style=\"font-size: 26px; font-weight: bold;\">companyName绮儏鎶ヨ〃</span>");
+ sb.append("<div class=\"link-top\"></div><div class=\"link-top\"></div>");
+ sb.append("<span style=\"font-size: 16px;\">depotName 绮儏鎶ヨ〃</span></div>");
+
+ sb.append("<div style=\"margin-top: 5px;\"><span style=\"float: left;\">澶╂皵锛歸eather 鏂瑰悜锛�</span><span style=\"float: right;\">妫�娴嬫椂闂达細checkDate</span></div>");
+
+ //<!--鍔ㄦ�佸潗鏍�-->
+ sb.append("<table cellspacing=\"0\" cellpadding=\"0\">");
+ sb.append("<tr>");
+ sb.append("<td colspan=\"2\"></td>");
+ for (int i = 1; i <= layMax; i++) {
+ sb.append("<td>");
+ sb.append("绗�" + i + "灞�");
+ sb.append("</td>");
+ }
+ sb.append("</tr>");
+
+ // <!-- 鍔ㄦ�佸湀-->
+ for (int i = 1; i <= cirNum; i++) {
+ //姣忓湀鐨勬牴鏁�
+ int rootNum = Integer.valueOf(arrRule[i - 1]);
+ //姣忓湀灞傛暟
+ int curLayNum = Integer.valueOf(arrLay[i - 1]);
+
+ String className = "row-fz";
+ for (int j = 1; j <= rootNum; j++) {
+ if (j == rootNum) {
+ className = "row-tr";
+ }
+ sb.append("<tr>");
+ if (j == 1) {
+ sb.append("<td rowspan=\"");
+ sb.append(rootNum);
+ sb.append("\" class=\"");
+ sb.append("row-tr");//鍥哄畾
+ sb.append("\">");
+ sb.append(i);
+ sb.append("鍦�</td>");
+ }
+ //娣诲姞鏍规暟
+ sb.append("<td class=\"");
+ sb.append(className);
+ sb.append("\">");
+ sb.append(j);
+ sb.append("鏍�</td>");
+
+ //娣诲姞姣忔牴鐨勫�硷紝濡傛灉褰撳墠鏍规病鏈夐偅涔堝灞傦紝鍒欎笉娣诲姞鍊间繚鐣欑┖
+ for (int k = 1; k <= layMax; k++) {
+ if (curLayNum < layMax) {
+ sb.append("<td class=\"");
+ sb.append(className);
+ sb.append("\"></td>");
+ } else {
+ sb.append("<td class=\"");
+ sb.append(className);
+ sb.append("\">");
+ sb.append(i + "_" + j + "_" + k);
+ sb.append("</td>");
+ }
+ }
+ sb.append("</tr>");
+ }
+
+ }
+ sb.append("</table>");
+
+ // <!--鍔ㄦ�佸眰琛ㄦ牸-->
+ sb.append("<table cellspacing=\"0\" cellpadding=\"0\" class=\"table-2\"><tr><td width=\"200px\">绮儏鍒嗘瀽锛�</td><td colspan=\"5\">");
+ sb.append("remark</td></tr><tr><td></td><td width=\"16.6%\">鏈�楂�</td><td width=\"16.6%\">鏈�浣�</td><td width=\"16.6%\">骞冲潎</td><td width=\"16.6%\">鍛ㄥ潎</td><td width=\"16.6%\">鍐呭潎</td></tr>");
+ //灞備俊鎭�
+ for (int k = 1; k <= layMax; k++) {
+ sb.append("<tr>\n<td>绗�");
+ sb.append(k);
+ sb.append("灞�</td>");
+ sb.append("<td>c_max_" + k + "</td>");
+ sb.append("<td>c_min_" + k + "</td>");
+ sb.append("<td>c_ave_" + k + "</td>");
+ sb.append("<td>c_out_ave_" + k + "</td>");
+ sb.append("<td>c_in_ave_" + k + "</td>");
+ sb.append("</tr>");
+ }
+
+ //鏁翠粨
+ sb.append("<tr><td>鏁� 浠�</td>");
+ sb.append("<td>c_max_all</td>");
+ sb.append("<td>c_min_all</td>");
+ sb.append("<td>c_ave_all</td>");
+ sb.append("<td>c_out_ave_all</td>");
+ sb.append("<td>c_in_ave_all</td>");
+
+ //<!-- 鍥哄畾鏁版嵁-->
+ sb.append("<tr><td >浠撴俯锛歝_tIn</td><td >浠撴箍锛歝_hIn</td><td colspan=\"2\">姘旀俯锛歝_tOut</td><td colspan=\"2\">姘旀箍锛歝_hOut</td></tr>");
+ sb.append("<tr><td>娌圭綈楂樺害</td><td >c_depotHeight 绫�</td><td colspan=\"2\">娑蹭綅楂樺害</td><td colspan=\"2\">c_oilHeight 绫�</td></tr>");
+ sb.append("<tr><td>浠撴埧绫诲瀷</td><td >c_depotType</td><td colspan=\"2\">鍏ヤ粨鏃ユ湡</td><td colspan=\"2\">c_storeDate</td></tr>");
+ sb.append("<tr><td>鏉傝川锛�%锛�</td><td>c_perImpurity</td><td colspan=\"2\">绮浜у湴</td><td colspan=\"2\">c_foodLocation</td></tr>");
+ sb.append("<tr><td>妫�娴嬩汉</td><td>c_checkUser</td><td colspan=\"2\">淇濈鍛�</td><td colspan=\"2\">c_storeKeeperName</td></tr>");
+ sb.append("</table>");
+
+ // <!--灏鹃儴淇℃伅 -->
+ sb.append("<div style=\"margin-top: 5px;\"><span style=\"float: left;\">娉細#琛ㄧず灞傛渶浣庢俯 *琛ㄧず灞傛渶楂樻俯</span><span style=\"float: right;\">鍒惰〃鏃堕棿锛歝reateBillDate</span></div>");
+ sb.append("</div></body></html>");
+
+ log.debug("鑾峰彇鍒扮殑绮儏妯℃澘={}", sb.toString());
+
+ result.setModel(sb.toString());
+ return result;
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder04.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder04.java
new file mode 100644
index 0000000..9e507b5
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilder04.java
@@ -0,0 +1,175 @@
+package com.fzzy.igds.utils;
+
+import com.fzzy.igds.data.GrainParam;
+import com.fzzy.igds.data.PrintModeData;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @Description 绛掍粨鎵撳嵃妯℃澘-鍖呮嫭鍦嗙瓛浠撳拰娴呭渾浠� -閫氱敤
+ * @Author CZT
+ * @Date 2025/12/9 9:56
+ */
+@Slf4j
+public class GrainPrintBuilder04 {
+
+ public static PrintModeData buildModel(GrainParam param) {
+ PrintModeData result = new PrintModeData();
+ result.setCompanyId(param.getCompanyId());
+ result.setDepotType(param.getDepotType());
+
+ if (StringUtils.isEmpty(param.getCableRule()) || StringUtils.isEmpty(param.getCableCir())) {
+ result.setMsg("褰撳墠绮儏娌℃湁鑾峰彇鍒扮伯鎯呭竷绾胯鍒欓厤缃紝鏃犳硶鐢熸垚鎶ヨ〃锛�");
+ return result;
+ }
+
+ //鑾峰彇灞傜殑鏈�楂樺��
+ int layMax = 1;
+ String[] arrLay = param.getCableCir().split("-");
+ for (String lay : arrLay) {
+ if (Integer.valueOf(lay) > layMax) layMax = Integer.valueOf(lay);
+ }
+
+ String[] arrRule = param.getCableRule().split("-");
+ int cirNum = arrRule.length;
+
+
+ StringBuilder sb = new StringBuilder();
+ //妯℃澘澶�
+ sb.append("<!DOCTYPE html><html lang=\"zh-cn\"><head><meta http-equiv=\"Content-Type\"content=\"text/html; charset=UTF-8\"><title>绛掍粨鎶ヨ〃</title></head><body>");
+
+ sb.append("<div id=\"print_main\" style=\"margin: 20px;\">");
+
+ //鏍峰紡琛紝涓嶈兘缂╄繘
+ sb.append("<style>");
+ sb.append("table,table tr th,table tr td {border:1px solid #0d1021}");
+ sb.append("table {width:100%;line-height:23px;text-align:center;font-size:14px}");
+ sb.append(".table-2 {border-top:0px solid #0d1021 !important}");
+ sb.append(".table-2 tr {border-top:0px solid #0d1021 !important}");
+ sb.append(".table-2 td {border-top:0px solid #0d1021 !important}");
+ sb.append(".row-tr {border-left:0px !important;border-right:0px!important;border-top:0px !important}");
+ sb.append(".row-tr1 {border-left:0px !important;border-right:0px !important;border-top:0px !important;font-size:12px}");
+ sb.append(".row-fz {border:0px !important}");
+ sb.append(".row-fz1 {border:0px !important;font-size:12px}");
+ sb.append(".row-li1 {font-size:12px}");
+ sb.append(".link-top {width:100%;border-top:solid #0d1021 1px}");
+ sb.append("</style>");
+
+ sb.append("<div style=\"text-align: center\"><span style=\"font-size: 26px; font-weight: bold;\">companyName绮儏鎶ヨ〃</span>");
+ sb.append("<div class=\"link-top\"></div><div class=\"link-top\"></div>");
+ sb.append("<span style=\"font-size: 16px;\">depotName 绮儏鎶ヨ〃</span></div>");
+
+ sb.append("<div style=\"margin-top: 5px;\"><span style=\"float: left;\">澶╂皵锛歸eather 鏂瑰悜锛�</span><span style=\"float: right;\">妫�娴嬫椂闂达細checkDate</span></div>");
+
+ //<!--鍔ㄦ�佸潗鏍�-->
+ sb.append("<table cellspacing=\"0\" cellpadding=\"0\">");
+ //-----灞傛暟-----
+ sb.append("<tr>");
+ sb.append("<td colspan=\"2\"></td>");
+ for (int i = 1; i <= layMax; i++) {
+ sb.append("<td>");
+ sb.append(i + "灞�");
+ sb.append("</td>");
+ }
+ sb.append("</tr>");
+ //-----姣忓湀鍚勬牴鍏蜂綋鏁版嵁-----
+ int startGen = 0;
+ int endGen = 0;
+ int curGen = 0;
+ for (int i = 1; i <= cirNum; i++) {
+ //姣忓湀鐨勬牴鏁�
+ if(i==1){
+ startGen = 1;
+ }else {
+ startGen = endGen + 1;
+ }
+ curGen = Integer.valueOf(arrRule[i - 1]);
+ endGen += curGen;
+
+ //姣忓湀灞傛暟
+ int curLayNum = Integer.valueOf(arrLay[i - 1]);
+
+ String className = "row-fz";
+ for (int j = startGen; j <= endGen; j++) {
+ if (j == endGen) {
+ className = "row-tr";
+ }
+ sb.append("<tr>");
+ if (j == startGen) {
+ sb.append("<td rowspan=\"");
+ sb.append(curGen);
+ sb.append("\" class=\"");
+ sb.append("row-tr");
+ sb.append("\">");
+ sb.append(i);
+ sb.append("鍦�</td>");
+ }
+ //娣诲姞鏍规暟
+ sb.append("<td class=\"");
+ sb.append(className);
+ sb.append("\">");
+ sb.append(j);
+ sb.append("鏍�</td>");
+ //娣诲姞姣忔牴鐨勫�硷紝濡傛灉褰撳墠鏍规病鏈夐偅涔堝灞傦紝鍒欎笉娣诲姞鍊间繚鐣欑┖
+ for (int k = 1; k <= layMax; k++) {
+ sb.append("<td class=\"");
+ sb.append(className);
+ sb.append("\">");
+ sb.append(i + "_" + j + "_" + k);
+ sb.append("</td>");
+ }
+ sb.append("</tr>");
+ }
+ }
+
+ //-----鍚勫眰鍒嗘瀽(鏈�楂樸�佸钩鍧囥�佹渶浣�)-----
+ String classNme1 = "row-fz";
+ String valueName = "";
+ for (int i = 1; i <= 3; i++) {
+ sb.append("<tr>");
+ if(i == 1){
+ valueName = "c_max_";
+ sb.append("<td rowspan=\"3\" class=\"row-tr\">鍚勫眰姹囨��</td>");
+ sb.append("<td class=\"row-fz\">鏈�楂�</td>");
+ }else if(i == 2){
+ valueName = "c_ave_";
+ sb.append("<td class=\"");
+ sb.append("classNme1");
+ sb.append("\">骞冲潎</td>");
+ }else {
+ classNme1 = "row-tr";
+ valueName = "c_min_";
+ sb.append("<td class=\"");
+ sb.append("classNme1");
+ sb.append("\">鏈�浣�</td>");
+ }
+ for (int k = 1; k <= layMax; k++) {
+ sb.append("<td ");
+ sb.append("class=\"");
+ sb.append(classNme1);
+ sb.append("\">");
+ sb.append(valueName);
+ sb.append(k);
+ sb.append("</td>");
+ }
+ sb.append("</tr>");
+ }
+ sb.append("</table>");
+
+ //浠撳簱鍩烘湰淇℃伅
+ sb.append("<table cellspacing=\"0\"cellpadding=\"0\"class=\"table-2\">");
+ sb.append("<tr><td colspan=\"8\">鏁翠粨鍒嗘瀽</td></tr><tr><td>浠撴俯</td><td>c_tIn</td><td>浠撴箍</td><td>c_hIn</td><td>姘旀俯</td><td>c_tOut</td><td>姘旀箍</td><td>c_hOut</td></tr>");
+ sb.append("<tr><td>灞傛渶楂�</td><td>c_max_all</td><td>灞傚钩鍧�</td><td>c_ave_all</td><td>灞傛渶浣�</td><td>c_min_all</td><td></td><td></td></tr>");
+ sb.append("<tr><td>浠撴埧绫诲瀷</td><td>c_depotType</td><td>鍏ヤ粨鏃ユ湡</td><td>c_storeDate</td><td>姘村垎(%)</td><td>c_perWet</td><td>鏉傝川(%)</td><td>c_perImpurity</td></tr>");
+ sb.append("<tr><td>绮鍝佺</td><td>c_foodVariety</td><td>绮浜у湴</td><td>c_foodLocation</td><td>瀹归噸(kg/m3)</td><td>c_bulkWeight</td><td>瀹為檯鍌ㄩ噺(鍚�)</td><td>c_storageReal</td></tr>");
+ sb.append("<tr><td colspan=\"2\">淇濈鍛�</td><td colspan=\"2\">c_storeKeeperName</td><td colspan=\"2\">妫�娴嬩汉</td><td colspan=\"2\">c_checkUser</td></tr>");
+ sb.append("</table>");
+ sb.append("<div style=\"margin-top: 5px;\"><span style=\"float: left;\">娉細#琛ㄧず灞傛渶浣庢俯 *琛ㄧず灞傛渶楂樻俯</span><span style=\"float: right;\">鍒惰〃鏃堕棿锛歝reateBillDate</span></div>");
+ sb.append("</div></body></html>");
+
+ log.debug("鑾峰彇鍒扮殑绮儏妯℃澘={}", sb.toString());
+
+ result.setModel(sb.toString());
+ return result;
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilderLay01.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilderLay01.java
new file mode 100644
index 0000000..c69c2d3
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/GrainPrintBuilderLay01.java
@@ -0,0 +1,171 @@
+package com.fzzy.igds.utils;
+
+import com.fzzy.igds.data.GrainParam;
+import com.fzzy.igds.data.PrintModeData;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @Description 骞虫柟浠撴墦鍗版ā鏉�-妯悜閫氶妯℃澘
+ * @Author CZT
+ * @Date 2025/12/9 9:56
+ */
+@Slf4j
+public class GrainPrintBuilderLay01 {
+
+ /**
+ * 骞充粨浠撴墦鍗版ā鏉�
+ **/
+ public static PrintModeData buildModel(GrainParam param) {
+ PrintModeData result = new PrintModeData();
+ result.setCompanyId(param.getCompanyId());
+ result.setDepotType(param.getDepotType());
+
+ if (StringUtils.isEmpty(param.getCableRule())) {
+ result.setMsg("褰撳墠绮儏娌℃湁鑾峰彇鍒扮伯鎯呭竷绾胯鍒欓厤缃紝鏃犳硶鐢熸垚鎶ヨ〃锛�");
+ return result;
+ }
+
+ String cableRule = param.getCableRule();
+ String[] attr = cableRule.split("-");
+ int cableZ = Integer.valueOf(attr[0]);
+ int cableY = Integer.valueOf(attr[1]);
+ int cableX = Integer.valueOf(attr[2]);
+
+ StringBuilder sb = new StringBuilder();
+ //妯℃澘澶�
+ sb.append("<!DOCTYPE html><html lang=\"zh-cn\"><head><meta http-equiv=\"Content-Type\"content=\"text/html; charset=UTF-8\"><title>骞虫柟浠撴姤琛�</title></head><body>");
+
+ sb.append("<div id=\"print_main\" style=\"margin: 20px;\">");
+
+ //鏍峰紡琛紝涓嶈兘缂╄繘
+ sb.append("<style>");
+ sb.append("table,table tr th,table tr td {border:1px solid #0d1021}");
+ sb.append("table {width:100%;line-height:23px;text-align:center;font-size:14px}");
+ sb.append(".table-2 {border-top:0px solid #0d1021 !important}");
+ sb.append(".table-2 tr {border-top:0px solid #0d1021 !important}");
+ sb.append(".table-2 td {border-top:0px solid #0d1021 !important}");
+ sb.append(".row-tr {border-left:0px !important;border-right:0px!important;border-top:0px !important}");
+ sb.append(".row-tr1 {border-left:0px !important;border-right:0px !important;border-top:0px !important;font-size:12px}");
+ sb.append(".row-fz {border:0px !important}");
+ sb.append(".row-fz1 {border:0px !important;font-size:12px}");
+ sb.append(".row-li1 {font-size:12px}");
+ sb.append(".link-top {width:100%;border-top:solid #0d1021 1px}");
+ sb.append("</style>");
+
+ sb.append("<div style=\"text-align: center\"><span style=\"font-size: 26px; font-weight: bold;\">companyName绮儏鎶ヨ〃</span>");
+ sb.append("<div class=\"link-top\"></div><div class=\"link-top\"></div>");
+ sb.append("<span style=\"font-size: 16px;\">depotName 绮儏鎶ヨ〃</span></div>");
+
+ sb.append("<div style=\"margin-top: 5px;\"><span style=\"float: left;\">澶╂皵锛歸eather 鏂瑰悜锛�</span><span style=\"float: right;\">妫�娴嬫椂闂达細checkDate</span></div>");
+
+ //<!--鍔ㄦ�佸潗鏍�-->
+ sb.append("<table cellspacing=\"0\" cellpadding=\"0\">");
+ sb.append("<tr>");
+
+ if (cableX > 18) {
+ sb.append("<td colspan=\"2\" class='row-li1'></td>");
+ } else {
+ sb.append("<td colspan=\"2\"></td>");
+ }
+
+ for (int i = 1; i <= cableX; i++) {
+ if (cableX > 18) {
+ sb.append("<td class='row-li1'>");
+ } else {
+ sb.append("<td>");
+ }
+
+ sb.append("绗�" + i + "鍒�");
+ sb.append("</td>");
+ }
+ sb.append("</tr>");
+
+ // <!-- 鍔ㄦ�佸湀-->
+ for (int y = 1; y <= cableY; y++) {
+ String className = "row-fz";
+ if (cableX > 18) className = "row-fz1";
+ for (int z = 1; z <= cableZ; z++) {
+ sb.append("<tr>");
+ if (z == cableZ) {
+ className = "row-tr";
+ if (cableX > 18) className = "row-tr1";
+ }
+ //琛�
+ if (z == 1) {
+ sb.append("<td rowspan='");
+ sb.append(cableZ);
+ sb.append("' class='");
+ if (cableX > 18) {
+ sb.append("row-tr1");
+ } else {
+ sb.append("row-tr");
+ }
+ sb.append("'>");
+ sb.append(y);
+ sb.append("琛�</td>");
+ }
+ //灞�
+ sb.append("<td class='");
+ sb.append(className);
+ sb.append("'>" + z + "灞�</td>");
+
+ //娣诲姞鏁版嵁
+ for (int x = cableX; x >= 1; x--) {
+ sb.append("<td class='");
+ sb.append(className);
+ sb.append("'>");
+ sb.append(z + "_" + y + "_" + x);
+ sb.append("</td>");
+ }
+ }
+
+ sb.append("<tr>");
+ }
+ sb.append("</table>");
+
+ // <!--鍔ㄦ�佸眰琛ㄦ牸-->
+ sb.append("<table cellspacing=\"0\" cellpadding=\"0\" class=\"table-2\"><tr><td width=\"200px\">绮儏鍒嗘瀽锛�</td><td colspan=\"5\">");
+ sb.append("remark</td></tr><tr><td></td><td width=\"16.6%\">鏈�楂�</td><td width=\"16.6%\">鏈�浣�</td><td width=\"16.6%\">骞冲潎</td><td width=\"16.6%\">鍛ㄥ潎</td><td width=\"16.6%\">鍐呭潎</td></tr>");
+ //琛岃鍒欙紝娌℃湁鍛ㄨ绠�
+ for (int k = 1; k <= cableY; k++) {
+ sb.append("<tr>\n<td>绗�");
+ sb.append(k);
+ sb.append("琛�</td>");
+ sb.append("<td>c_max_" + k + "</td>");
+ sb.append("<td>c_min_" + k + "</td>");
+ sb.append("<td>c_ave_" + k + "</td>");
+ sb.append("<td></td>");
+ sb.append("<td></td>");
+ sb.append("</tr>");
+ }
+
+ //鏁翠粨
+ sb.append("<tr><td>鏁� 浠�</td>");
+ sb.append("<td>c_max_all</td>");
+ sb.append("<td>c_min_all</td>");
+ sb.append("<td>c_ave_all</td>");
+ sb.append("<td>c_out_ave_all</td>");
+ sb.append("<td>c_in_ave_all</td>");
+
+ //<!-- 鍥哄畾鏁版嵁-->
+ sb.append("<tr><td >浠撴俯锛歝_tIn</td><td >浠撴箍锛歝_hIn</td><td colspan=\"2\">姘旀俯锛歝_tOut</td><td colspan=\"2\">姘旀箍锛歝_hOut</td></tr>");
+ sb.append("<tr><td>浠撴埧绫诲瀷</td><td >c_depotType</td><td colspan=\"2\">鍏ヤ粨鏃ユ湡</td><td colspan=\"2\">c_storeDate</td></tr>");
+ sb.append("<tr><td>鏉傝川锛�%锛�</td><td>c_perImpurity</td><td colspan=\"2\">绮浜у湴</td><td colspan=\"2\">c_foodLocation</td></tr>");
+ sb.append("<tr><td>妫�娴嬩汉</td><td>c_checkUser</td><td colspan=\"2\">淇濈鍛�</td><td colspan=\"2\">c_storeKeeperName</td></tr>");
+ sb.append("</table>");
+
+ // <!--灏鹃儴淇℃伅 -->
+ sb.append("<div style=\"margin-top: 5px;\"><span style=\"float: left;\">娉細#琛ㄧず灞傛渶浣庢俯 *琛ㄧず灞傛渶楂樻俯</span><span style=\"float: right;\">鍒惰〃鏃堕棿锛歝reateBillDate</span></div>");
+ sb.append("</div></body></html>");
+
+ log.debug("鑾峰彇鍒扮殑绮儏妯℃澘={}", sb.toString());
+
+
+ result.setModelType("ROW");
+ result.setModel(sb.toString());
+ return result;
+ }
+
+
+}
diff --git a/fzzy-igdss-io/pom.xml b/fzzy-igdss-io/pom.xml
new file mode 100644
index 0000000..f3b72e8
--- /dev/null
+++ b/fzzy-igdss-io/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>com.fzzy</groupId>
+ <artifactId>fzzy-igdss-io</artifactId>
+ <version>${fzzy.igdss.version}</version>
+
+ <parent>
+ <artifactId>fzzy-igdss-parent</artifactId>
+ <groupId>com.fzzy</groupId>
+ <version>2.0.0</version>
+ <relativePath>../fzzy-igdss-parent/pom.xml</relativePath>
+ </parent>
+
+ <description>
+ io妯″潡
+ </description>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.fzzy</groupId>
+ <artifactId>fzzy-igdss-core</artifactId>
+ <version>${fzzy.igdss.version}</version>
+ </dependency>
+
+ <!-- 寮曞叆IO鍖� -->
+ <dependency>
+ <groupId>com.ld.base.io</groupId>
+ <artifactId>base-io-netty</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <!-- <scope>system</scope>-->
+ <!-- <systemPath>${project.basedir}/src/main/resources/lib/base-io-netty-1.0.0-SNAPSHOT.jar</systemPath>-->
+ </dependency>
+
+ <dependency>
+ <groupId>com.ld.base.io</groupId>
+ <artifactId>base-io-api</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <!-- <scope>system</scope>-->
+ <!-- <systemPath>${project.basedir}/src/main/resources/lib/base-io-api-1.0.0-SNAPSHOT.jar</systemPath>-->
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ <compilerArguments>
+ <extdirs>src\main\webapp\WEB-INF\lib</extdirs>
+ </compilerArguments>
+ </configuration>
+ </plugin>
+ </plugins>
+ <resources>
+ <resource>
+ <directory>src/main/java</directory>
+ <includes>
+ <include>**/*.xml</include>
+ <include>**/*.js</include>
+ </includes>
+ <filtering>true</filtering>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
\ No newline at end of file
diff --git a/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/manager/RemoteManager.java b/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/manager/RemoteManager.java
new file mode 100644
index 0000000..4a568d2
--- /dev/null
+++ b/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/manager/RemoteManager.java
@@ -0,0 +1,49 @@
+package com.fzzy.igds.io.manager;
+
+import com.fzzy.igds.io.service.RemoteGrainService;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description 鎺ュ彛Api鎵�鏈夊崗璁殑鍗忚绫伙紝鏍规嵁涓嶅悓鐨勫崗璁厤缃皟鐢ㄤ笉鍚岀殑鍗忚瀹炵幇
+ * @Author CZT
+ * @Date 2025/12/9 9:56
+ */
+@Component(RemoteManager.BEAN_ID)
+public class RemoteManager implements ApplicationContextAware {
+
+ public static final String BEAN_ID = "core.remoteManager";
+
+ /**
+ * 鐢ㄤ簬瀛樻斁鎵�鏈塕emoteGrainService 鎺ュ彛鐨勫疄鐜扮被
+ */
+ public static Map<String, RemoteGrainService> remoteGrainMap = new HashMap<>();
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext)
+ throws BeansException {
+ Map<String, RemoteGrainService> grainMap = applicationContext
+ .getBeansOfType(RemoteGrainService.class);
+
+ for (String key : grainMap.keySet()) {
+ remoteGrainMap.put(grainMap.get(key).getProtocol(),
+ grainMap.get(key));
+ }
+
+ }
+
+ /**
+ * 鏍规嵁鍗忚鑾峰彇鍗忚瀹炵幇鎺ュ彛
+ *
+ * @param protocol
+ * @return
+ */
+ public RemoteGrainService getRemoteGrainService(String protocol) {
+ return remoteGrainMap.get(protocol);
+ }
+
+}
diff --git a/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/order/ExeOrderService.java b/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/order/ExeOrderService.java
new file mode 100644
index 0000000..d5321bd
--- /dev/null
+++ b/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/order/ExeOrderService.java
@@ -0,0 +1,341 @@
+package com.fzzy.igds.io.order;
+
+import com.fzzy.igds.constant.Constant;
+import com.fzzy.igds.constant.RedisConst;
+import com.fzzy.igds.domain.LogOperation;
+import com.fzzy.igds.request.ExeBaseRequest;
+import com.fzzy.igds.request.ReqStatus;
+import com.fzzy.igds.request.ThReqData;
+import com.fzzy.igds.service.LogOperationService;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.core.redis.RedisCache;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Description 鍛戒护鎵ц鏍¢獙绛変俊鎭帴鍙�
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+@Service
+public class ExeOrderService {
+
+ @Resource
+ private RedisCache redisCache;
+ @Resource
+ private LogOperationService logService;
+
+ /**
+ *
+ * @param baseRequest
+ */
+ public void addCache(ExeBaseRequest baseRequest) {
+ // 娣诲姞缂撳瓨
+ this.addReqCache(baseRequest);
+ }
+
+ /**
+ *
+ * @param request
+ */
+ public void addLog(ExeBaseRequest request) {
+ // 娣诲姞鏃ュ織
+ this.addLogByExeReq(request);
+ }
+
+ /**
+ *
+ * @param baseRequest
+ */
+ public void addLogAndCache(ExeBaseRequest baseRequest) {
+
+ // 娣诲姞缂撳瓨
+ this.addReqCache(baseRequest);
+
+ // 娣诲姞鏃ュ織
+ this.addLogByExeReq(baseRequest);
+ }
+
+ /**
+ * 瀛樻斁娓╂箍搴﹀懡浠ょ紦瀛�
+ * @param request
+ */
+ public void addThCache(ExeBaseRequest request) {
+
+ ThReqData reqData = (ThReqData) request.getReqData();
+
+ if (null == reqData) return;
+
+ String key = this.buildExeOrderKey(request.getBizType(),
+ request.getDeptId(), request.getSerId() + "_" + reqData.getThConf(), request.getRequestId());
+
+ redisCache.setCacheObject(key, request, 8 * 60, TimeUnit.MINUTES);
+ }
+
+ /**
+ *
+ * @param companyId
+ * @param serId
+ * @return
+ */
+ public ExeBaseRequest getControlCache(String companyId, String serId) {
+ String key = Constant.APP_NAME + ":" + companyId + ":DEVICE_CTRL:" + serId;
+ return (ExeBaseRequest) redisCache.getCacheObject(key);
+ }
+
+ /**
+ *
+ * @param bizType
+ * @param type
+ * @param id
+ * @return
+ */
+ public List<ExeBaseRequest> getInProgressOrderById(String bizType, String type, String id) {
+ if (StringUtils.isEmpty(bizType)){
+ return null;
+ }
+ if (StringUtils.isEmpty(type)){
+ return null;
+ }
+ if (StringUtils.isEmpty(id)){
+ return null;
+ }
+
+ bizType = ":" + bizType;
+ type = ":" + type + ":";
+ id = ":" + id + ":";
+
+ String pattern = Constant.APP_NAME + ":" + RedisConst.KEY_ORDER_PRE + bizType + type + "*";
+
+ Collection<String> keys = redisCache.keys(pattern);
+
+ if (null == keys || keys.isEmpty())
+ return null;
+
+ List<ExeBaseRequest> result = new ArrayList<>();
+ ExeBaseRequest exeRequest;
+ for (String key : keys) {
+ if (key.indexOf(id) > 0) {
+ exeRequest = (ExeBaseRequest) redisCache.getCacheObject(key);
+ if (null == exeRequest){
+ continue;
+ }
+ result.add(exeRequest);
+// if (ReqStatus.IN_PROGRESS.getCode().equals(
+// exeRequest.getStatus())) {
+// result.add(exeRequest);
+// }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ *
+ * @param bizType
+ * @param type
+ * @param deptId
+ * @param timout
+ * @return
+ */
+ public List<ExeBaseRequest> getAllOrderByDeptId(String bizType,String type, String deptId, int timout) {
+ if (StringUtils.isEmpty(bizType))
+ return null;
+ if (StringUtils.isEmpty(deptId))
+ return null;
+ bizType = ":" + bizType;
+ type = ":" + type;
+
+ String pattern = Constant.APP_NAME + ":" + RedisConst.KEY_ORDER_PRE + bizType + type + "*";
+
+ Collection<String> keys = redisCache.keys(pattern);
+
+ if (null == keys || keys.isEmpty())
+ return null;
+
+ List<ExeBaseRequest> result = new ArrayList<>();
+ ExeBaseRequest exeRequest;
+ for (String key : keys) {
+ exeRequest = redisCache.getCacheObject(key);
+ if (null == exeRequest){
+ continue;
+ }
+ if(exeRequest.getDeptId().equals(deptId)){
+ if (ReqStatus.IN_PROGRESS.getCode().equals(exeRequest.getStatus()) && timout > 0) {
+ if (System.currentTimeMillis() - exeRequest.getExeTime().getTime() > (timout * 1000)) {
+ exeRequest.setExeMsg("绛夊緟瓒呰繃" + timout + "绉掑悗缁堢娌℃湁鍙嶉");
+ exeRequest.setStatus(ReqStatus.TIMEOUT_ERROR.getCode());
+ }
+ }
+
+ result.add(exeRequest);
+ }
+ }
+ return result;
+ }
+
+ /**
+ *
+ * @param request
+ * @param isDel
+ */
+ public void completeCache(ExeBaseRequest request, boolean isDel) {
+ request.setStatus(ReqStatus.COMPLETE.getCode());
+
+ if (StringUtils.isNotEmpty(request.getErrorMsg())) {
+ request.setStatus(ReqStatus.ANALYSIS_ERROR.getCode());
+ }
+
+ if (isDel) {
+ delReqCache(request);
+ } else {
+ addCache(request);
+ }
+ }
+
+ /**
+ *
+ * @param companyId
+ * @param bizType
+ * @param deptId
+ */
+ public void clean(String companyId, String bizType, String deptId) {
+ if (StringUtils.isEmpty(bizType))
+ return;
+ if (StringUtils.isEmpty(deptId))
+ return;
+
+ String pattern = Constant.APP_NAME + ":" + RedisConst.KEY_ORDER_PRE
+ + ":" + bizType + ":" + "*";
+
+ Collection<String> keys = redisCache.keys(pattern);
+
+ if (null == keys || keys.isEmpty())
+ return;
+
+ for (String key : keys) {
+ redisCache.deleteObject(key);
+ }
+ }
+
+ /**
+ * @param request
+ */
+ public void addLogByExeReq(ExeBaseRequest request) {
+ LogOperation log = new LogOperation();
+ log.setCompanyId(request.getCompanyId());
+ log.setOperateUser(ContextUtil.getLoginUserName());
+ log.setOperateTime(new Date());
+ log.setBizType(request.getBizType());
+ log.setDeptId(request.getDeptId());
+ log.setOperateInfo(request.getExeMsg());
+ if (StringUtils.isNotEmpty(request.getErrorMsg())) {
+ log.setOperateInfo(request.getExeMsg() + "銆�" + request.getErrorMsg());
+ }
+
+ logService.addLog(log);
+ }
+
+ /**
+ * 娉ㄦ剰锛氬綋鍓嶅瓨鏀剧殑鏄笟鍔℃墽琛岀殑鍛戒护淇℃伅,鍒ゆ柇鏄惁瀛樻斁鍔熻兘缂撳瓨锛岄粯璁ゅ瓨鏀�
+ *
+ * @param request
+ */
+ public void addReqCache(ExeBaseRequest request) {
+
+ //娣诲姞涓氬姟缂撳瓨
+ String key = this.buildReqKeyByBiz(request.getBizType(),request.getDepotId(), request.getRequestId());
+ redisCache.setCacheObject(key, request, 60, TimeUnit.MINUTES);
+
+ //娣诲姞鍔熻兘缂撳瓨
+ if(request.isAddCacheTag()){
+ key = this.buildReqKeyByFun(request.getBizType(),request.getSerId(), request.getRequestId());
+ redisCache.setCacheObject(key, request, 60, TimeUnit.MINUTES);
+ }
+ }
+
+ /**
+ * 娉ㄦ剰锛氬綋鍓嶅瓨鏀剧殑鏄笟鍔℃墽琛岀殑鍛戒护淇℃伅
+ *
+ * @param request
+ */
+ public void delReqCache(ExeBaseRequest request) {
+
+ //鍒犻櫎涓氬姟缂撳瓨
+ String key = this.buildReqKeyByBiz(request.getBizType(), request.getDepotId(), request.getRequestId());
+ redisCache.deleteObject(key);
+
+ //鍒犻櫎鍔熻兘缂撳瓨
+ if(request.isAddCacheTag()){
+ key = this.buildReqKeyByFun(request.getBizType(),request.getSerId(), request.getRequestId());
+ redisCache.deleteObject(key);
+ }
+ }
+
+ /**
+ * 涓氬姟缂撳瓨key,鐢熸垚瑙勫垯锛歩gds:ORDER:bizType:BIZ:serId:orderId
+ *
+ * @param bizType
+ * @param depotId
+ * @param orderId
+ * @return
+ */
+ private String buildReqKeyByBiz(String bizType, String depotId, String orderId) {
+ if (StringUtils.isEmpty(bizType))
+ bizType = "sys";
+
+ if (StringUtils.isEmpty(orderId))
+ orderId = ContextUtil.getTimeId(10000, 99999);
+
+ return Constant.APP_NAME + ":" +RedisConst.KEY_ORDER_PRE + ":" + bizType + ":BIZ:" + depotId + ":" + orderId;
+ }
+
+ /**
+ * 鍔熻兘缂撳瓨key,鐢熸垚瑙勫垯锛歩gds:ORDER:bizType:FUN:serId:orderId
+ *
+ * @param bizType
+ * @param serId
+ * @param orderId
+ * @return
+ */
+ private String buildReqKeyByFun(String bizType, String serId, String orderId) {
+ if (StringUtils.isEmpty(bizType))
+ bizType = "sys";
+
+ if (StringUtils.isEmpty(orderId))
+ orderId = ContextUtil.getTimeId(10000, 99999);
+
+ return Constant.APP_NAME + ":" +RedisConst.KEY_ORDER_PRE + ":" + bizType + ":FUN:" + serId + ":" + orderId;
+ }
+
+ /**
+ * 鍛戒护缂撳瓨鐢熸垚瑙勫垯锛歛ppName:KEY_KEY_ORDER:bizType:deptId:serId:orderId
+ *
+ * @param bizType 涓氬姟绫诲瀷
+ * @param deptId 搴撳尯缂栫爜
+ * @param serId 鍒嗘満缂栫爜
+ * @param orderId
+ * @return
+ */
+ private String buildExeOrderKey(String bizType, String deptId,
+ String serId, String orderId) {
+ if (StringUtils.isEmpty(bizType))
+ bizType = "sys";
+ if (StringUtils.isEmpty(deptId))
+ deptId = "01";
+ if (StringUtils.isEmpty(serId))
+ serId = "0001";
+ if (StringUtils.isEmpty(orderId))
+ orderId = "5000";
+
+ return Constant.APP_NAME + ":" + RedisConst.KEY_ORDER_PRE + ":"
+ + bizType + ":" + deptId + ":" + serId + ":" + orderId;
+ }
+}
diff --git a/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/service/RemoteGrainService.java b/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/service/RemoteGrainService.java
new file mode 100644
index 0000000..dcd848f
--- /dev/null
+++ b/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/service/RemoteGrainService.java
@@ -0,0 +1,29 @@
+package com.fzzy.igds.io.service;
+
+import com.fzzy.igds.request.ExeBaseRequest;
+import com.fzzy.igds.request.GrainReqData;
+import com.fzzy.igds.response.GrainResponse;
+
+/**
+ * @Description 杩滅▼鎵ц绮儏鎺ュ彛锛岄渶瑕佸湪姣忎釜鍗忚鍖呬腑瀹炵幇 绯荤粺榛樿瀹炵幇涓�涓狣efault
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+public interface RemoteGrainService {
+
+ /**
+ * 褰撳墠鍗忚鍚嶇О锛岀郴缁熸牴鎹崗璁悕绉拌嚜鍔ㄨ皟鐢ㄥ垎鏈哄尮閰嶇殑鍗忚瀹炵幇
+ *
+ *
+ */
+ String getProtocol();
+
+
+ /**
+ * 绮儏妫�娴嬫帴鍙�
+ *
+ * @param request 璇锋眰鍙傛暟
+ */
+ GrainResponse checkGrain(ExeBaseRequest<GrainReqData> request);
+
+}
diff --git a/fzzy-igdss-web/pom.xml b/fzzy-igdss-web/pom.xml
index 4b90a1f..bba1f82 100644
--- a/fzzy-igdss-web/pom.xml
+++ b/fzzy-igdss-web/pom.xml
@@ -49,6 +49,13 @@
<artifactId>fzzy-igdss-view</artifactId>
<version>${fzzy.igdss.version}</version>
</dependency>
+
+ <!-- io妯″潡-->
+ <dependency>
+ <groupId>com.fzzy</groupId>
+ <artifactId>fzzy-igdss-io</artifactId>
+ <version>${fzzy.igdss.version}</version>
+ </dependency>
<!-- d7鐨偆鍖�-->
<dependency>
diff --git a/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/grain/GrainController.java b/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/grain/GrainController.java
new file mode 100644
index 0000000..c16b1f0
--- /dev/null
+++ b/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/grain/GrainController.java
@@ -0,0 +1,315 @@
+package com.fzzy.sys.controller.grain;
+
+import com.fzzy.igds.constant.Constant;
+import com.fzzy.igds.constant.DepotType;
+import com.fzzy.igds.data.*;
+import com.fzzy.igds.domain.Depot;
+import com.fzzy.igds.request.ExeBaseRequest;
+import com.fzzy.igds.response.GrainResponse;
+import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.sys.manager.common.CommonManager;
+import com.fzzy.sys.manager.grain.GrainManager;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description 绮儏鎺у埗鍣�
+ * @Author CZT
+ * @Date 2025/12/9 9:04
+ */
+@Slf4j
+@Controller
+@RequestMapping("grain")
+public class GrainController {
+
+ private static final String prefix = "grain";
+
+ @Resource
+ private CommonManager commonManager;
+ @Resource
+ private GrainManager grainManager;
+
+ /**
+ * 椤甸潰鎺у埗--鏍规嵁浠撳簱绫诲瀷璋冩暣涓嶅悓椤甸潰
+ *
+ * @param depotId
+ * @param deptId
+ * @return
+ */
+ @RequestMapping("/gateway")
+ public String gateway(
+ @RequestParam(value = "depotId", required = true) String depotId,
+ @RequestParam(value = "deptId", required = false) String deptId,
+ ModelMap view) {
+
+ SysUser user = ContextUtil.getLoginUser();
+ view.put(Constant.MODEL_KEY_LOGIN_USER, user);
+
+ if(StringUtils.isBlank(deptId)){
+ deptId = ContextUtil.subDeptId(user);
+ }
+ view.put("deptId", deptId);
+
+ // 浠撳簱鍒楄〃鍋氫笅鎷夋浣跨敤
+ List<Depot> listDepot = commonManager.listDepotByDeptId(deptId);
+ view.put(Constant.MODEL_KEY_DEPOT_LIST, listDepot);
+
+ String depotType = commonManager.getDepotTypeById(depotId);
+ view.put("depotType", depotType);
+ view.put("depotId", depotId);
+
+ //椤甸潰锛岄粯璁ゅ钩鎴夸粨
+ String viewUrl = prefix + "grain-check1";
+ if (depotType.equals(DepotType.TYPE_01.getCode()) || depotType.equals(DepotType.TYPE_05.getCode())) {
+ viewUrl = prefix + "/grain-check1";
+ }
+ if (DepotType.TYPE_02.getCode().equals(depotType) || DepotType.TYPE_04.getCode().equals(depotType)) {
+ viewUrl = prefix + "/grain-check4";
+ }
+ if (DepotType.TYPE_03.getCode().equals(depotType)) {
+ viewUrl = prefix + "/grain-check3";
+ }
+
+ return viewUrl;
+ }
+
+ /**
+ * 椤甸潰鎺у埗--绮儏妫�娴嬮〉闈� - 骞虫埧浠�
+ *
+ * @param depotId
+ * @return
+ */
+ @RequestMapping("/view-check1")
+ public String viewCheck(
+ @RequestParam(value = "depotId", required = false) String depotId,
+ @RequestParam(value = "deptId", required = false) String deptId,
+ ModelMap view) {
+
+ SysUser user = ContextUtil.getLoginUser();
+ view.put(Constant.MODEL_KEY_LOGIN_USER, user);
+
+ // 鑾峰彇褰撳墠鐢ㄦ埛鎵�鍦ㄧ殑鍒嗗簱鍚嶇О
+ if(StringUtils.isBlank(deptId)){
+ deptId = ContextUtil.subDeptId(user);
+ }
+ view.put("deptId", deptId);
+
+ // 鑾峰彇褰撳墠閮ㄩ棬锛屾墍鏈変粨搴撳垪琛�
+ List<Depot> listDepot = commonManager.listDepotByDeptId(deptId);
+ view.put(Constant.MODEL_KEY_DEPOT_LIST, listDepot);
+
+ view.put("depotType", DepotType.TYPE_01.getCode());
+ view.put("depotId", depotId);
+
+ return prefix + "/grain-check1";
+ }
+
+ /**
+ * 椤甸潰鎺у埗--绮儏妫�娴嬮〉闈� - 绛掍粨銆佹祬鍦嗕粨
+ *
+ * @param depotId
+ * @param deptId
+ * @return
+ */
+ @RequestMapping("/view-check4")
+ public String viewCheck4(
+ @RequestParam(value = "depotId", required = false) String depotId,
+ @RequestParam(value = "deptId", required = false) String deptId,
+ ModelMap view) {
+
+ SysUser user = ContextUtil.getLoginUser();
+ view.put(Constant.MODEL_KEY_LOGIN_USER, user);
+
+ // 鑾峰彇褰撳墠鐢ㄦ埛鎵�鍦ㄧ殑鍒嗗簱鍚嶇О
+ if(StringUtils.isBlank(deptId)){
+ deptId = ContextUtil.subDeptId(user);
+ }
+ view.put("deptId", deptId);
+
+ // 鑾峰彇褰撳墠閮ㄩ棬锛屾墍鏈変粨搴撳垪琛�
+ List<Depot> listDepot = commonManager.listDepotByDeptId(deptId);
+ view.put(Constant.MODEL_KEY_DEPOT_LIST, listDepot);
+
+ view.put("depotType", DepotType.TYPE_04.getCode());
+ view.put("depotId", depotId);
+
+ return prefix + "/grain-check4";
+ }
+
+ /**
+ * 鑾峰彇鎵ц鍛戒护璁板綍
+ *
+ * @param depotId
+ * @param deptId
+ * @return
+ */
+ @RequestMapping("/order-list")
+ public String orderList(
+ @RequestParam(value = "depotId", required = false) String depotId,
+ @RequestParam(value = "deptId", required = false) String deptId,
+ ModelMap view) {
+
+ SysUser user = ContextUtil.getLoginUser();
+ view.put(Constant.MODEL_KEY_LOGIN_USER, user);
+
+ // 鑾峰彇褰撳墠鐢ㄦ埛鎵�鍦ㄧ殑鍒嗗簱鍚嶇О
+ if (org.apache.commons.lang3.StringUtils.isEmpty(deptId)) {
+ deptId = ContextUtil.subDeptId(user);
+ }
+ view.put("deptId", deptId);
+
+ view.put("bizType", "grain");
+ view.put("depotId", depotId);
+
+ return prefix + "/order-list";
+ }
+
+ /**
+ * 绮儏椤甸潰 - 鏍规嵁鏉′欢鑾峰彇闆嗗悎锛岄粯璁ゆ煡璇㈠綋澶╃殑鏁版嵁
+ *
+ * @param param
+ * @return
+ */
+ @RequestMapping("/query-list-data")
+ @ResponseBody
+ public PageResponse<List<GrainData>> queryListGrainData(@RequestBody GrainParam param) {
+ if (null == param.getCheckMonth()) {
+ param.setLimit(5);
+ } else {
+ param.setLimit(80);
+ }
+ return grainManager.queryListGrainData(param);
+ }
+
+ /**
+ * 绮儏妫�娴�-鍗曚粨妫�娴�
+ *
+ * @param param
+ * @return
+ */
+ @RequestMapping("/check-single")
+ @ResponseBody
+ public GrainResponse checkSingle(@RequestBody GrainParam param) {
+ return grainManager.checkSingle(param);
+ }
+
+ /**
+ * 绮儏妫�娴�-鎵归噺妫�娴�
+ *
+ * @param param
+ * @return
+ */
+ @RequestMapping("/check-batch")
+ @ResponseBody
+ public GrainResponse checkBatch(@RequestBody GrainParam param) {
+ return grainManager.checkBatch(param);
+ }
+
+ /**
+ * 鏍规嵁褰撳墠浠撳簱鑾峰彇妫�娴嬭褰曪紝榛樿10鏉★紝濡傛灉妫�娴嬪綋鍓嶆湀锛岄粯璁ゆ樉绀�80鏉�
+ *
+ * @param param
+ * @return
+ */
+ @RequestMapping("/page-list")
+ @ResponseBody
+ public PageResponse<List<GrainData>> pageList(@RequestBody GrainParam param) {
+ if (null == param.getCheckMonth()) {
+ param.setLimit(10);
+ } else {
+ param.setLimit(80);
+ }
+ return grainManager.pageListGrainData(param);
+ }
+
+
+ /**
+ * 鏍规嵁鍙傛暟鑾峰彇鎵撳嵃鐨勬ā鏉�
+ *
+ * @param param
+ * @return
+ */
+ @ResponseBody
+ @RequestMapping("/build-print-model")
+ public PageResponse<PrintModeData> buildPrintModel(
+ @RequestBody GrainParam param) {
+ return grainManager.buildPrintModel(param);
+ }
+
+ /**
+ * 鏍规嵁鍙傛暟鑾峰彇鎵撳嵃鐨勬ā鏉�-ALL
+ *
+ * @return
+ */
+ @ResponseBody
+ @RequestMapping("/build-print-model-all")
+ public PageResponse<Map<String, PrintModeData>> buildPrintModelAll(
+ @RequestBody GrainParam param) {
+ param.setCompanyId(ContextUtil.getCompanyId());
+ return grainManager.buildPrintModelAll(param);
+ }
+
+
+ /**
+ * 绮儏妫�娴�-鎵归噺瀵煎嚭EXCEL
+ *
+ * @param param 鍖呮嫭妫�娴嬫椂闂村拰闇�瑕佸鍑虹殑IDS
+ * @return
+ */
+ @RequestMapping("/export-batch")
+ @ResponseBody
+ public GrainResponse exportBatch(@RequestBody GrainParam param) {
+ return grainManager.exportBatch(param);
+ }
+
+
+
+ /**
+ * 鏍规嵁鍙傛暟鑾峰彇鎵撳嵃鐨勬ā鏉�-ALL
+ *
+ * @return
+ */
+ @ResponseBody
+ @RequestMapping("/query-order-list")
+ public LayPage<List<ExeBaseRequest>> queryOrderList(@RequestParam(value = "depotId", required = false) String depotId,
+ @RequestParam(value = "deptId", required = false) String deptId) {
+ // 鑾峰彇褰撳墠鐢ㄦ埛鎵�鍦ㄧ殑鍒嗗簱鍚嶇О
+ if(StringUtils.isBlank(deptId)){
+ deptId = ContextUtil.subDeptId(null);
+ }
+
+ List<ExeBaseRequest> result = grainManager.orderList(deptId);
+
+ return new LayPage(result);
+ }
+
+
+ /**
+ * 娓呴櫎鎵ц鏃ュ織
+ *
+ * @return
+ */
+ @ResponseBody
+ @RequestMapping("/clean-order-list")
+ public PageResponse<String> cleanOrderList(@RequestBody IgdsBaseParam param) {
+
+ if (StringUtils.isEmpty(param.getCompanyId())) {
+ param.setCompanyId(ContextUtil.getCompanyId());
+ }
+ if (StringUtils.isEmpty(param.getDeptId())) {
+ param.setDeptId(ContextUtil.subDeptId(null));
+ }
+
+ return grainManager.cleanOrderList(param);
+ }
+}
diff --git a/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/common/CommonManager.java b/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/common/CommonManager.java
index ffda277..da79a92 100644
--- a/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/common/CommonManager.java
+++ b/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/common/CommonManager.java
@@ -1,5 +1,6 @@
package com.fzzy.sys.manager.common;
+import com.fzzy.igds.constant.DepotType;
import com.fzzy.igds.domain.Depot;
import com.fzzy.igds.service.DepotService;
import com.fzzy.igds.service.DicService;
@@ -55,4 +56,22 @@
public List<SysDictData> getInoutType() {
return dicService.getInoutType();
}
+
+
+
+ /**
+ * 鏍规嵁浠撳簱缂栫爜鑾峰彇浠撳簱绫诲瀷
+ * @param depotId
+ * @return
+ */
+ public String getDepotTypeById(String depotId) {
+ String depotType = DepotType.TYPE_01.getCode();
+
+ Depot depot = depotService.getCacheDepot(ContextUtil.getCompanyId(), depotId);
+ if (null != depot && StringUtils.isNotEmpty(depot.getDepotType())) {
+ depotType = depot.getDepotType();
+ }
+
+ return depotType;
+ }
}
diff --git a/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainExportBuilder.java b/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainExportBuilder.java
new file mode 100644
index 0000000..e751048
--- /dev/null
+++ b/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainExportBuilder.java
@@ -0,0 +1,346 @@
+package com.fzzy.sys.manager.grain;
+
+import com.fzzy.igds.constant.DepotType;
+import com.fzzy.igds.constant.FoodVariety;
+import com.fzzy.igds.data.GrainData;
+import com.fzzy.igds.data.GrainLay;
+import com.fzzy.igds.data.GrainPoint;
+import com.fzzy.igds.domain.Depot;
+import com.fzzy.igds.service.FileService;
+import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.igds.utils.GrainDataBuilder;
+import com.fzzy.igds.utils.NumberUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Desc: 绮儏椤甸潰鎵归噺瀵煎嚭EXCEL
+ * @author: Andy
+ * @update-time: 2022/12/8
+ */
+@Slf4j
+@Component
+public class GrainExportBuilder {
+
+ @Autowired
+ private FileService fileService;
+
+ /**
+ * 鐢熸垚鐢熸垚
+ *
+ * @param dataMap
+ * @return 濡傛灉杩斿洖淇℃伅浠ワ細ERROR:寮�澶磋〃绀烘墽琛屽嚭閿欙紝姝e父杩斿洖鏂囦欢鍚嶇О
+ */
+ public String exportByMapData(Map<String, GrainData> dataMap, List<Depot> listDepot) {
+
+ String result;
+ try {
+ //鍒涘缓涓�涓柊鐨凟XCEL
+ HSSFWorkbook toWorkbook = createWorkBook();
+ HSSFWorkbook fromWorkBook;
+
+ Map<String, HSSFWorkbook> mapWorkBook = new HashMap<>();
+
+ HSSFSheet newSheet, oldSheet;
+
+ Depot depot = null;
+ String cableKey = "";
+ for (GrainData data : dataMap.values()) {
+ depot = this.getDepot(data.getDepotId(), listDepot);
+
+ if (null == depot) {
+ log.info("--------绮儏瀵煎嚭EXCEL娌℃湁鑾峰彇鍒颁粨搴撲俊鎭紝鍙栨秷瀵煎嚭----{}", data.getDepotId());
+ continue;
+ }
+ if (StringUtils.isEmpty(data.getCableCir())) {
+ cableKey = data.getCable();
+ } else {
+ cableKey = data.getCable() + "_" + data.getCableCir();
+ }
+
+ fromWorkBook = mapWorkBook.get(cableKey);
+ if (null == fromWorkBook) {
+ fromWorkBook = this.getFromWorkBook(data, depot);
+ mapWorkBook.put(cableKey, fromWorkBook);
+ }
+
+ newSheet = toWorkbook.createSheet(depot.getName());
+
+ oldSheet = fromWorkBook.getSheetAt(0);
+
+ this.copySheet(newSheet, oldSheet, toWorkbook, data, depot);
+
+ Thread.sleep(300);
+ }
+
+ result = ContextUtil.getTimeId() + ".xls";
+ String tempPath = fileService.getTempFilePath(depot == null ? ContextUtil.getCompanyId() : depot.getCompanyId());
+ FileOutputStream fos = new FileOutputStream(tempPath + "/" + result);
+ toWorkbook.write(fos);
+ if (null != fos) fos.close();
+
+ } catch (Exception e) {
+ log.info("---------------瀵煎嚭寮傚父淇℃伅----{}", e);
+ result = "ERROR:瀵煎嚭閿欒锛�" + e.getMessage();
+ }
+
+ return result;
+ }
+
+ private HSSFWorkbook getFromWorkBook(GrainData data, Depot depot) throws Exception {
+ FileInputStream fis = null;
+
+ String filePath = fileService.getConfPath();
+ try {
+ //鑾峰彇妯$増鐨勫悕绉帮紝娉ㄦ剰绛掍粨鍚嶇О閰嶇疆瑙勫垯
+ if (StringUtils.isEmpty(data.getCableCir())) {
+ filePath = filePath + data.getCable() + ".xls";
+ } else {
+ filePath = filePath + data.getCable() + "_" + data.getCableCir() + ".xls";
+ }
+
+ fis = new FileInputStream(filePath);
+ HSSFWorkbook wb = new HSSFWorkbook(fis);
+
+ return wb;
+ } catch (Exception e) {
+ log.error("------鏍规嵁绮儏瀵煎嚭EXCEL鎵ц寮傚父锛歿}", e);
+ return null;
+ } finally {
+ if (null != fis) fis.close();
+ }
+ }
+
+ private Depot getDepot(String depotId, List<Depot> listDepot) {
+ if (listDepot == null || listDepot.isEmpty()) return null;
+
+ for (Depot depot : listDepot) {
+ if (depot.getId().equals(depotId)) return depot;
+ }
+ return null;
+ }
+
+
+ private HSSFWorkbook createWorkBook() {
+ return new HSSFWorkbook();
+ }
+
+
+ /**
+ * 澶嶅埗sheet
+ *
+ * @param newSheet
+ * @param oldSheet
+ * @return
+ */
+ public Sheet copySheet(HSSFSheet newSheet, HSSFSheet oldSheet, Workbook workbook, GrainData data, Depot depot) {
+
+ //鍚堝苟鍗曞厓鏍�
+ int numMergedRegions = oldSheet.getNumMergedRegions();
+ for (int i = 0; i < numMergedRegions; i++) {
+ CellRangeAddress mergedRegion = oldSheet.getMergedRegion(i);
+ newSheet.addMergedRegion(mergedRegion);
+ }
+
+
+ // 璁剧疆鍒楀
+ int physicalNumberOfCells = oldSheet.getRow(0).getPhysicalNumberOfCells();
+ for (int i = 0; i < physicalNumberOfCells; i++) {
+ HSSFRow fromRow = oldSheet.getRow(i);
+ if (null == fromRow) continue;
+ for (int j = fromRow.getLastCellNum(); j >= fromRow.getFirstCellNum(); j--) {
+ newSheet.setColumnWidth(j, oldSheet.getColumnWidth(j));
+ newSheet.setColumnHidden(j, false);
+ }
+ }
+
+
+ //姝ゅ闇�瑕佸皢 cellStyle 瀹氫箟鍦ㄩ亶鍘嗚鐨勫湴鏂�,瀹氫箟鍦ㄥ闈㈠彲鑳藉嚭鐜版牱寮忔覆鏌撻敊璇�
+ CellStyle cellStyle = workbook.createCellStyle();
+ cellStyle.setWrapText(true);
+
+
+ //姣忔瀹屾垚涓�涓垹闄や竴涓�
+ List<GrainPoint> listPoints = data.getListPoints();
+
+ //鏈�澶ц幏鍙栬鏁�
+ int maxRowSize = oldSheet.getPhysicalNumberOfRows() - 1;
+ for (int i = 0; i < maxRowSize; i++) {
+ Row newRow = newSheet.createRow(i);
+ Row oldRow = oldSheet.getRow(i);
+ newRow.setHeight((short) (20 * 20));
+
+ int maxColSize = oldRow.getPhysicalNumberOfCells();
+
+ String oldCellValue;
+ for (int j = 0; j < maxColSize; j++) {
+ Cell newCell = newRow.createCell(j);
+ Cell oldCell = oldRow.getCell(j);
+ if (oldCell == null) {
+ continue;
+ }
+ oldCellValue = oldCell.getStringCellValue();
+
+ newCell.setCellValue(getNewCellValue(oldCellValue, listPoints, data, depot));
+
+ newCell.setCellStyle(cellStyle);
+ }
+ }
+ return newSheet;
+ }
+
+
+ /**
+ * 鏍规嵁鍗曞厓鏍兼爣绛炬浛鎹㈠�硷紝闇�瑕佹浛鎹㈢殑鏍囪涓篶_
+ *
+ * @param oldCellValue
+ * @param data
+ * @return
+ */
+ public String getNewCellValue(String oldCellValue, List<GrainPoint> listPoints, GrainData data, Depot depot) {
+
+ try {
+
+ if (null == oldCellValue) return null;
+
+ if (!oldCellValue.startsWith("c_")) return oldCellValue;
+
+ if ("c_title".equals(oldCellValue)) return "绮儏鎶ヨ〃";
+ if ("c_depot".equals(oldCellValue)) return depot.getName() + "绮儏鎶ヨ〃";
+ if ("c_depot_name".equals(oldCellValue)) return depot.getName();
+ if ("c_weather".equals(oldCellValue)) return data.getWeather();
+ if ("c_checkDate".equals(oldCellValue))
+ return DateFormatUtils.format(data.getReceiveDate(), "yyyy-MM-dd HH:mm");
+ if ("c_checkDateYMD".equals(oldCellValue))
+ return DateFormatUtils.format(data.getReceiveDate(), "yyyy-MM-dd HH:mm:ss");
+ if ("c_ori".equals(oldCellValue)) return "";
+ if ("c_tIn".equals(oldCellValue)) return getStrValue(data.getTempIn());
+ if ("c_tOut".equals(oldCellValue)) return getStrValue(data.getTempOut());
+ if ("c_hIn".equals(oldCellValue)) return getStrValue(data.getHumidityIn());
+ if ("c_hOut".equals(oldCellValue)) return getStrValue(data.getHumidityOut());
+
+ if ("c_tempMax".equals(oldCellValue)) return getStrValue(data.getTempMax());
+ if ("c_tempMin".equals(oldCellValue)) return getStrValue(data.getTempMin());
+ if ("c_tempAve".equals(oldCellValue)) return getStrValue(data.getTempAve());
+ if ("c_depotType".equals(oldCellValue)) return DepotType.getMsg(depot.getDepotType());
+ if ("c_storeDate".equals(oldCellValue))
+ return null == depot.getStoreDate() ? null : DateFormatUtils.format(depot.getStoreDate(), "yyyy-MM-dd");
+ if ("c_foodVariety".equals(oldCellValue)) return FoodVariety.getMsg(depot.getFoodVariety());
+ if ("c_storageReal".equals(oldCellValue)) return getStrValue(NumberUtil.keepPrecision(depot.getStorageReal()/1000, 2));
+ if ("c_foodLocation".equals(oldCellValue)) return depot.getFoodLocation();
+ if ("c_bulkWeight".equals(oldCellValue)) return getStrValue(depot.getBulkWeight());
+ if ("c_checkUser".equals(oldCellValue)) return data.getCheckUser();
+ if ("c_storeKeeper".equals(oldCellValue)) return depot.getStoreKeeperName();
+ if ("c_createDate".equals(oldCellValue)) return DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm");
+
+ if (oldCellValue.startsWith("c_lay_")) {
+ String[] tempAttr = oldCellValue.split("_");
+ int layNum = Integer.valueOf(tempAttr[3]);
+ for (GrainLay lay : data.getListLays()) {
+ if (lay.getFz() == layNum) {
+ if (oldCellValue.indexOf("max") > 0) return getStrValue(lay.getTempMax());
+ if (oldCellValue.indexOf("min") > 0) return getStrValue(lay.getTempMin());
+ if (oldCellValue.indexOf("ave") > 0) return getStrValue(lay.getTempAve());
+ }
+ }
+ return oldCellValue;
+ }
+
+
+ //骞虫埧浠撶殑鑾峰彇鏂瑰紡
+
+ if (DepotType.TYPE_01.getCode().equals(depot.getDepotType()) || DepotType.TYPE_05.getCode().equals(depot.getDepotType())) {
+ return getNewCellValue01(data, oldCellValue, listPoints);
+ }
+
+ if (DepotType.TYPE_02.getCode().equals(depot.getDepotType())) {
+ return getNewCellValue02(data, oldCellValue, listPoints);
+ }
+
+ if (DepotType.TYPE_03.getCode().equals(depot.getDepotType())) {
+ return getNewCellValue02(data, oldCellValue, listPoints);
+ }
+
+ if (DepotType.TYPE_04.getCode().equals(depot.getDepotType())) {
+ return getNewCellValue02(data, oldCellValue, listPoints);
+ }
+
+ } catch (Exception e) {
+ log.error("---------鎵归噺瀵煎嚭绮儏EXCEL---璧嬪�煎嚭閿�---{}", e);
+ return oldCellValue;
+ }
+
+ return null;
+ }
+
+
+ /**
+ * @Desc: 绛掍粨鐨勭伯娓╃偣瑙勫垯c_x_y_z 鍏朵腑x = 琛ㄧず鍦堟暟锛寉=鎬绘牴鏁帮紝z= 褰撳墠灞�
+ * @author: Andy
+ * @update-time: 2022/12/12
+ */
+ private String getNewCellValue02(GrainData data, String oldCellValue, List<GrainPoint> listPoints) {
+ //鍗曞厓鏍艰祴鍊� c_x_y_z 鍏朵腑x = 琛ㄧず鍦堟暟锛寉=鎬绘牴鏁帮紝z= 褰撳墠灞�
+ String[] attr = oldCellValue.split("_");
+ int x = Integer.valueOf(attr[1]), y = Integer.valueOf(attr[2]), z = Integer.valueOf(attr[3]);
+
+ x = x - 1;
+ y = y - 1;
+ GrainPoint point;
+ for (int i = 0; i < listPoints.size(); i++) {
+ point = listPoints.get(i);
+
+ if (point.getX() == x && point.getY() == y && point.getFz() == z) {
+ listPoints.remove(i);
+ return GrainDataBuilder.renderTempValue(point.getTemp());
+ }
+ }
+
+ return "--";
+ }
+
+
+ private String getNewCellValue01(GrainData data, String oldCellValue, List<GrainPoint> listPoints) {
+ String cable = data.getCable();
+ String[] attrCable = cable.split("-");
+ int numX = Integer.valueOf(attrCable[2]);
+
+
+ //鍗曞厓鏍艰祴鍊� c_灞俖琛宊鍒�
+ String[] attr = oldCellValue.split("_");
+ int lay = Integer.valueOf(attr[1]), row = Integer.valueOf(attr[2]), col = Integer.valueOf(attr[3]);
+
+ row = row - 1;
+ col = numX - col;
+
+ GrainPoint point;
+ for (int i = 0; i < listPoints.size(); i++) {
+ point = listPoints.get(i);
+ if (point.getFz() == lay && point.getY() == row && point.getX() == col) {
+ listPoints.remove(i);
+ return GrainDataBuilder.renderTempValue(point.getTemp());
+ }
+ }
+
+ return "--";
+ }
+
+ private static String getStrValue(Double tempIn) {
+ if (null == tempIn) return null;
+ return tempIn + "";
+ }
+}
diff --git a/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainManager.java b/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainManager.java
new file mode 100644
index 0000000..77972e0
--- /dev/null
+++ b/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainManager.java
@@ -0,0 +1,498 @@
+package com.fzzy.sys.manager.grain;
+
+import com.fzzy.igds.constant.OrderRespEnum;
+import com.fzzy.igds.constant.RespCodeEnum;
+import com.fzzy.igds.data.*;
+import com.fzzy.igds.domain.Depot;
+import com.fzzy.igds.domain.DepotConf;
+import com.fzzy.igds.domain.DeviceSer;
+import com.fzzy.igds.domain.Grain;
+import com.fzzy.igds.io.manager.RemoteManager;
+import com.fzzy.igds.io.order.ExeOrderService;
+import com.fzzy.igds.io.service.RemoteGrainService;
+import com.fzzy.igds.request.ExeBaseRequest;
+import com.fzzy.igds.request.GrainReqData;
+import com.fzzy.igds.request.ReqStatus;
+import com.fzzy.igds.response.GrainResponse;
+import com.fzzy.igds.service.DepotConfService;
+import com.fzzy.igds.service.DepotService;
+import com.fzzy.igds.service.DeviceSerService;
+import com.fzzy.igds.service.GrainService;
+import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.igds.utils.DateUtil;
+import com.fzzy.igds.utils.GrainDataBuilder;
+import com.fzzy.igds.utils.GrainPrintBuilder;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+import java.text.Collator;
+import java.util.*;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/12/9 9:56
+ */
+@Slf4j
+@Component
+public class GrainManager {
+
+ @Resource
+ private DepotService depotService;
+ @Resource
+ private DepotConfService depotConfService;
+ @Resource
+ private GrainService grainService;
+ @Resource
+ private DeviceSerService deviceSerService;
+ @Resource
+ private RemoteManager remoteManager;
+ @Resource
+ private ExeOrderService exeOrderService;
+ @Resource
+ private GrainExportBuilder grainExportBuilder;
+
+ public PageResponse<List<GrainData>> queryListGrainData(GrainParam param) {
+ if (StringUtils.isEmpty(param.getDepotId())) {
+ return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(),
+ "娌℃湁鑾峰彇鍒颁粨搴撳弬鏁般��");
+ }
+ if (StringUtils.isEmpty(param.getCompanyId())) {
+ param.setCompanyId(ContextUtil.getCompanyId());
+ }
+
+ if (null != param.getCheckDate()) {
+ param.setStart(DateUtil.getCurZero(param.getCheckDate()));
+ param.setEnd(DateUtil.getNextZero(param.getCheckDate()));
+ param.setCheckDate(null);
+ }
+
+ if (null != param.getCheckMonth()) {
+ param.setStart(DateUtil.getMonthFirst(param.getCheckMonth()));
+ param.setEnd(DateUtil.getNextMonthFirst(param.getCheckMonth()));
+ param.setCheckMonth(null);
+ }
+
+ List<Grain> list = grainService.listData(param);
+ if (null == list || list.isEmpty()) {
+ return null;
+ }
+
+ // 娣诲姞浠撳簱淇℃伅
+ Depot depotData = depotService.getCacheDepot(param.getCompanyId(), param.getDepotId());
+ if (null == depotData) {
+ log.error("鏈幏鍙栧埌浠撳簱淇℃伅");
+ }
+
+ List<GrainData> result = new ArrayList<>();
+ DepotConf depotConf;
+ GrainData data;
+ for (Grain grain : list) {
+ depotConf = depotConfService.getCacheDepotConfByDepotId(grain.getCompanyId(), grain.getDepotId());
+ data = new GrainData();
+ BeanUtils.copyProperties(grain, data);
+ GrainDataBuilder.updateGrainData(data, depotConf, depotData.getDepotType());
+ data.setDepotData(depotData);
+ result.add(data);
+ }
+
+
+ for (GrainData grainData : result) {
+ grainData.setDepotData(depotData);
+ }
+ return new PageResponse<>(RespCodeEnum.CODE_0000, result);
+ }
+
+ /**
+ * 鍗曚粨閲囬泦
+ *
+ * @param param
+ * @return
+ */
+ public GrainResponse checkSingle(GrainParam param) {
+ if (StringUtils.isEmpty(param.getCompanyId())) {
+ param.setCompanyId(ContextUtil.getCompanyId());
+ }
+
+ if (StringUtils.isEmpty(param.getDeptId())) {
+ param.setDeptId(ContextUtil.subDeptId(null));
+ }
+
+ if (StringUtils.isEmpty(param.getDepotId())) {
+ return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+ "娌℃湁鑾峰彇鍒颁粨搴撳弬鏁帮紝璇烽噸鏂伴�夋嫨浠撳簱骞舵墽琛岋紒");
+ }
+
+ try {
+ // 缂撳瓨鑾蜂粨搴撻厤缃俊鎭�
+ DepotConf depotConf = depotConfService.getCacheDepotConfByDepotId(param.getCompanyId(), param.getDepotId());
+
+ if (null == depotConf) {
+ return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+ "褰撳墠浠撳簱娌℃湁閰嶇疆绮儏鍙傛暟锛屾墽琛岃鎷掔粷锛�");
+ }
+
+ // 鑾峰彇鍒嗘満淇℃伅
+ DeviceSer deviceSer = deviceSerService.getCacheSer(param.getCompanyId(), depotConf.getGrainSer());
+
+ if (null == deviceSer) {
+ return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+ "褰撳墠浠撳簱娌℃湁閰嶇疆绮儏鍒嗘満锛屾墽琛岃鎷掔粷锛�");
+ }
+
+ Depot depot = depotService.getCacheDepot(depotConf.getCompanyId(), depotConf.getDepotId());
+
+ //鏁版嵁灏佽
+ ExeBaseRequest request = new ExeBaseRequest<GrainReqData>();
+ request.setDepotId(param.getDepotId());
+ request.setCompanyId(param.getCompanyId());
+ request.setBizType("grain");
+ request.setExeUser(ContextUtil.getLoginUserName());
+ request.setDepotName(depot.getName());
+ request.setDeptId(ContextUtil.subDeptId(null));
+ request.setProtocol(deviceSer.getProtocol());
+ request.setAddLogTag(true);
+ request.setIp(deviceSer.getIp());
+ request.setPort(deviceSer.getPort());
+ request.setSerId(deviceSer.getId());
+ request.setSerName(deviceSer.getName());
+ request.setSn(deviceSer.getSn());
+
+ request.setExeMsg("绮儏閲囬泦锛屼粨搴�=" + request.getDepotName());
+
+ GrainReqData reqData = new GrainReqData();
+ reqData.setCableStart(depotConf.getCableStart());
+ reqData.setCableEnd(depotConf.getCableEnd());
+ reqData.setCableRule(depotConf.getCableRule());
+ // 鏂板娓╂箍搴︿俊鎭�
+ reqData.setThSerId(depotConf.getThSer());
+ reqData.setThConf(depotConf.getThConf());
+ //澶氫粨骞跺彂鏍囧織
+ reqData.setIsMoreDepot(deviceSer.getIsMoreDepot());
+
+ request.setReqData(reqData);
+
+ RemoteGrainService remoteGrainService = remoteManager.getRemoteGrainService(deviceSer.getProtocol());
+
+ if (null == remoteGrainService) {
+ String msg = "绯荤粺娌℃湁" + request.getProtocol() + "鐨勫崗璁疄鐜帮紝鎵ц琚嫆缁濓紒";
+ request.setErrorMsg(msg);
+ request.setStatus(ReqStatus.SEND_ERROR.getCode());
+ exeOrderService.addLogAndCache(request);
+ return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), msg);
+ }
+
+ GrainResponse result = remoteGrainService.checkGrain(request);
+
+ if (!OrderRespEnum.ORDER_SUCCESS.getCode().equals(result.getCode())) {
+ String msg = request.getDepotName() + "璇锋眰澶辫触:" + result.getMsg();
+ request.setErrorMsg(msg);
+ request.setStatus(ReqStatus.SEND_ERROR.getCode());
+ }
+
+ exeOrderService.addLogAndCache(request);
+ return result;
+
+ } catch (Exception e) {
+ log.error("绮儏鎵ц寮傚父锛歿}", e.getLocalizedMessage());
+ return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+ "绯荤粺寮傚父锛�" + e.getMessage());
+ }
+ }
+
+ /**
+ * 鎵归噺閲囬泦
+ *
+ * @param param
+ * @return
+ */
+ public GrainResponse checkBatch(GrainParam param) {
+ if (null == param.getDepotIds()) {
+ return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+ "娌℃湁鑾峰彇鍒颁粨搴撳弬鏁帮紝璇烽噸鏂伴�夋嫨浠撳簱骞舵墽琛岋紒");
+ }
+ if (StringUtils.isEmpty(param.getCompanyId())) {
+ param.setCompanyId(ContextUtil.getCompanyId());
+ }
+
+ if (StringUtils.isEmpty(param.getDeptId())) {
+ param.setDeptId(ContextUtil.subDeptId(null));
+ }
+
+ try {
+ String[] attr = param.getDepotIds().split(",");
+
+ // 缂撳瓨鑾蜂粨搴撻厤缃俊鎭�
+ DepotConf depotConf;
+ // 鑾峰彇鍒嗘満淇℃伅
+ DeviceSer deviceSer;
+ ExeBaseRequest request;
+ GrainReqData reqData;
+ //鎵ц鍙戦�佸懡浠�
+ RemoteGrainService remoteGrainService;
+ GrainResponse result;
+ Depot depot;
+ for (String depotId : attr) {
+ param.setDepotId(depotId);
+
+ //鏁版嵁灏佽
+ request = new ExeBaseRequest<GrainReqData>();
+ request.setDepotId(param.getDepotId());
+ request.setCompanyId(param.getCompanyId());
+ request.setBizType("grain");
+ request.setExeUser(ContextUtil.getLoginUserName());
+
+ request.setDeptId(ContextUtil.subDeptId(null));
+ request.setAddLogTag(true);
+
+ reqData = new GrainReqData();
+
+ depotConf = depotConfService.getCacheDepotConfByDepotId(param.getCompanyId(), param.getDepotId());
+
+ depot = depotService.getCacheDepot(depotConf.getCompanyId(), depotConf.getDepotId());
+
+ if (null == depotConf) {
+ request.setErrorMsg("鎵ц澶辫触锛屾病鏈夎幏鍙栫伯鎯呭弬鏁伴厤缃�");
+ request.setReqData(reqData);
+ request.setStatus(ReqStatus.SEND_ERROR.getCode());
+ exeOrderService.addLogAndCache(request);
+ continue;
+ }
+ request.setDepotName(depot.getName());
+
+ deviceSer = deviceSerService.getCacheSer(param.getCompanyId(), depotConf.getGrainSer());
+
+ if (null == deviceSer) {
+ request.setErrorMsg("鎵ц澶辫触锛屾病鏈夎幏鍙栧埌鍒嗘満淇℃伅");
+ request.setReqData(reqData);
+ request.setStatus(ReqStatus.SEND_ERROR.getCode());
+ exeOrderService.addLogAndCache(request);
+ continue;
+ }
+
+ request.setProtocol(deviceSer.getProtocol());
+ request.setIp(deviceSer.getIp());
+ request.setPort(deviceSer.getPort());
+ request.setSerId(deviceSer.getId());
+ request.setSerName(deviceSer.getName());
+ request.setSn(deviceSer.getSn());
+
+ request.setExeMsg("绮儏閲囬泦锛屼粨搴�=" + request.getDepotName());
+
+ reqData.setCableStart(depotConf.getCableStart());
+ reqData.setCableEnd(depotConf.getCableEnd());
+ reqData.setCableRule(depotConf.getCableRule());
+
+ // 鏂板娓╂箍搴︿俊鎭�
+ reqData.setThSerId(depotConf.getThSer());
+ reqData.setThConf(depotConf.getThConf());
+ //澶氫粨骞跺彂
+ reqData.setIsMoreDepot(deviceSer.getIsMoreDepot());
+ request.setReqData(reqData);
+
+ //鎵ц鍛戒护
+ remoteGrainService = remoteManager.getRemoteGrainService(deviceSer.getProtocol());
+ if (null == remoteGrainService) {
+ //鍙戦�佸紓甯�
+ request.setErrorMsg("绯荤粺娌℃湁" + request.getProtocol() + "鐨勫崗璁疄鐜帮紝鎵ц琚嫆缁濓紒");
+ request.setStatus(ReqStatus.SEND_ERROR.getCode());
+ exeOrderService.addLogAndCache(request);
+ continue;
+ }
+
+ result = remoteGrainService.checkGrain(request);
+ if (!OrderRespEnum.ORDER_SUCCESS.getCode().equals(result.getCode())) {
+ request.setErrorMsg(request.getDepotName() + "璇锋眰澶辫触:" + result.getMsg());
+ request.setStatus(ReqStatus.SEND_ERROR.getCode());
+ }
+
+ exeOrderService.addLogAndCache(request);
+
+ Thread.sleep(200);
+ }
+ } catch (Exception e) {
+ return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+ "鍚庡彴鎵ц寮傚父锛�" + e.getMessage());
+ }
+ return new GrainResponse(OrderRespEnum.ORDER_SUCCESS.getCode(),
+ "鎵归噺鎵ц绮儏妫�娴嬪懡浠ゅ彂閫佹垚鍔燂紝璇风瓑寰呯粓绔搷搴斺�︹��");
+ }
+
+ /**
+ *
+ * @param param
+ * @return
+ */
+ public PageResponse<List<GrainData>> pageListGrainData(GrainParam param) {
+ if (StringUtils.isEmpty(param.getCompanyId())) {
+ param.setCompanyId(ContextUtil.getCompanyId());
+ }
+ if (StringUtils.isEmpty(param.getDepotId())) {
+ return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(),
+ "娌℃湁鑾峰彇鍒颁粨搴撳弬鏁帮紝鎵ц澶辫触锛�");
+ }
+
+ param.setTagUpdate(false);
+ List<Grain> list = grainService.listData(param);
+
+ DepotConf depotConf;
+ GrainData data;
+ Depot depotData;
+ List<GrainData> result = new ArrayList<>();
+ for (Grain grain : list) {
+ depotConf = depotConfService.getCacheDepotConfByDepotId(grain.getCompanyId(), grain.getDepotId());
+ data = new GrainData();
+ BeanUtils.copyProperties(grain, data);
+ // 娣诲姞浠撳簱淇℃伅
+ depotData = depotService.getCacheDepot(param.getCompanyId(), param.getDepotId());
+ GrainDataBuilder.updateGrainData(data, depotConf, depotData.getDepotType());
+ result.add(data);
+ }
+
+ if (null == result) {
+ return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "褰撳墠鏉′欢涓嬫病鏈夎幏鍙栧埌绮儏淇℃伅锛侊紒");
+ }
+
+ return new PageResponse<List<GrainData>>(RespCodeEnum.CODE_0000, result);
+ }
+
+ /**
+ * 鏍规嵁鍙傛暟鑾峰彇褰撳墠鎵撳嵃闇�瑕佺殑妯℃澘
+ *
+ * @param param
+ * @return
+ */
+ public PageResponse<PrintModeData> buildPrintModel(GrainParam param) {
+ if (null == param.getCompanyId()) {
+ param.setCompanyId(ContextUtil.getCompanyId());
+ }
+ if (StringUtils.isEmpty(param.getDepotType())) {
+ return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(),
+ "娌℃湁鑾峰彇鍒板綋鍓嶄粨搴撶殑浠撳簱绫诲瀷");
+ }
+ if (StringUtils.isEmpty(param.getCableRule()) && StringUtils.isEmpty(param.getCableCir())) {
+ return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(),
+ "娌℃湁鑾峰彇褰撳墠浠撳簱鐨勫竷绾胯鍒�");
+ }
+ PrintModeData result = GrainPrintBuilder.buildPrintModel(param);
+
+ if (null == result) {
+ return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(),
+ "绯荤粺娌℃湁鑾峰彇褰撳墠浠撳簱鐨勮〃鍗曟ā鏉�");
+ }
+
+ if (StringUtils.isNotEmpty(result.getMsg())) {
+ return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(),
+ result.getMsg());
+ }
+
+ return new PageResponse<>(RespCodeEnum.CODE_0000, result);
+ }
+
+ /**
+ *
+ * @param param
+ * @return
+ */
+ public PageResponse<Map<String, PrintModeData>> buildPrintModelAll(GrainParam param) {
+
+ Map<String, PrintModeData> result = new HashMap<>();
+
+ List<DepotConf> depotConfList = depotConfService.getCacheDepotConfList(param.getCompanyId());
+ PrintModeData modeData;
+ String key;
+ Depot cacheDepot;
+ for (DepotConf conf : depotConfList) {
+ cacheDepot = depotService.getCacheDepot(param.getCompanyId(), conf.getDepotId());
+ param.setCableRule(conf.getCableRule());
+ param.setDepotId(conf.getDepotId());
+ param.setCableCir(conf.getCableCir());
+ param.setDepotType(cacheDepot.getDepotType());
+
+ if (StringUtils.isNotEmpty(param.getCableCir())) {
+ key = param.getDepotType() + "_" + param.getCableRule() + "_" + param.getCableCir();
+ } else {
+ key = param.getDepotType() + "_" + param.getCableRule();
+ }
+ if (null == result.get(key)) {
+ modeData = GrainPrintBuilder.buildPrintModel(param);
+ result.put(key, modeData);
+ }
+ }
+ return new PageResponse<>(RespCodeEnum.CODE_0000, result);
+ }
+
+ /**
+ *
+ * @param param
+ * @return
+ */
+ public GrainResponse exportBatch(GrainParam param) {
+
+ //鏍规嵁鏉′欢鑾峰彇闇�瑕佹墦鍗扮殑绮儏淇℃伅
+
+ if (null != param.getCheckDate()) {
+ param.setStart(DateUtil.getCurZero(param.getCheckDate()));
+ param.setEnd(DateUtil.getNextZero(param.getCheckDate()));
+ param.setCheckDate(null);
+ }
+
+ //鑾峰彇宸茬粡绮儏鏍煎紡鍖栧畬鎴愮殑绮儏鏁版嵁
+ param.setTagUpdate(true);
+ PageResponse<List<GrainData>> listPageResponse = this.pageListGrainData(param);
+ List<GrainData> list = listPageResponse.getData();
+
+ if (null == list || list.isEmpty()) {
+ return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+ "褰撳墠鏉′欢涓嬫病鏈夋煡璇㈠埌绮儏妫�娴嬭褰曪紝鍙栨秷瀵煎嚭");
+ }
+
+ //鎸夌収浠撳簱缂栫爜浠庢柊鎺掑簭
+ Collator sortChina = Collator.getInstance(Locale.CHINA);
+ Collections.sort(list, (a, b) -> sortChina.compare(a.getDepotId(), b.getDepotId()));
+
+ //鑾峰彇缂撳瓨鐨勪粨搴撳垪琛紝鐢ㄤ簬鑾峰彇浠撳簱鍚嶇О
+ List<Depot> listDepot = depotService.getCacheDepotList(param.getCompanyId(), param.getDeptId());
+
+ //鍘婚櫎閲嶅鐨勭伯鎯呮暟鎹�
+ LinkedHashMap<String, GrainData> dataMap = new LinkedHashMap<>();
+ for (GrainData data : list) {
+ if (null != dataMap.get(data.getDepotId())) continue;
+
+ dataMap.put(data.getDepotId(), data);
+ }
+
+
+ String fileName = grainExportBuilder.exportByMapData(dataMap, listDepot);
+
+ if (fileName.startsWith("ERROR")) {
+ return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+ "鎵ц瀵煎嚭鍑虹幇閿欒锛�" + fileName);
+ }
+
+ return new GrainResponse(OrderRespEnum.ORDER_SUCCESS.getCode(),
+ fileName);
+ }
+
+ /**
+ *
+ * @param deptId
+ * @return
+ */
+ public List<ExeBaseRequest> orderList(String deptId) {
+ return exeOrderService.getAllOrderByDeptId("grain","BIZ", deptId, 2 * 60 * 8);
+ }
+
+ /**
+ *
+ * @param param
+ * @return
+ */
+ public PageResponse<String> cleanOrderList(IgdsBaseParam param) {
+ exeOrderService.clean(param.getCompanyId(), "grain", param.getDeptId());
+
+ return new PageResponse<>(RespCodeEnum.CODE_0000, "鎵ц鎴愬姛");
+ }
+}
diff --git a/fzzy-igdss-web/src/main/resources/static/grain/PrintBuilder-lay.js b/fzzy-igdss-web/src/main/resources/static/grain/PrintBuilder-lay.js
new file mode 100644
index 0000000..8dd2dd1
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/grain/PrintBuilder-lay.js
@@ -0,0 +1,576 @@
+//鍒濆鍖栨ā鏉�
+initModel = function () {
+ if (CACHE_PRINT_MODEL.size > 0) {
+ return;
+ }
+ $.ajax({
+ type: "POST",
+ url: "/grain/build-print-model-all",
+ data: JSON.stringify({
+ depotId: depotId
+ }),
+ dataType: "json",
+ contentType: "application/json;charset=UTF-8",
+ success: function (result) {
+ if (result.code != "0000") {
+ layer.msg(result.msg);
+ return null;
+ } else {
+ //瀛樻斁鍦ㄧ紦瀛樹腑
+ CACHE_PRINT_MODEL = result.data;
+ }
+ },
+ error: function () {
+ layer.msg("鍒濆鍖栨ā鏉垮け璐ワ紒锛�");
+ }
+ });
+};
+
+/**
+ * 鍗曚粨鎵撳嵃锛屽鏋滅洿鎺ヨ繑鍥炵殑妯℃澘淇℃伅涓篘ULL锛岄噸鏂拌幏鍙栦笅妯℃澘
+ * @param grainData
+ */
+toPrintSingle = function (grainData) {
+ var html = null;
+
+ var depotData = grainData.depotData;
+ if (!depotData.depotType) {
+ depotData.depotType = DepotType.T_01;
+ }
+ var key = builderModelKey(depotData.depotType, grainData.cable, grainData.cableCir);
+
+ //鍏堜粠鍗曚釜妯℃澘涓幏鍙�
+ var modelData = CACHE_PRINT_MODEL[key];
+ if (modelData) {
+ html = builderModelByType(modelData, grainData);
+ previewA4(html);
+ return;
+ }
+
+ console.log("---------閲嶆柊鑾峰彇妯℃澘--------");
+
+ $.ajax({
+ type: "POST",
+ url: "/grain/build-print-model",
+ data: JSON.stringify({
+ depotId: depotId,
+ depotType: depotData.depotType,
+ cableRule: grainData.cable,
+ cableCir: grainData.cableCir
+ }),
+ dataType: "json",
+ contentType: "application/json;charset=UTF-8",
+ success: function (result) {
+ if (result.code != "0000") {
+ layer.alert("鏈嶅姟鍣ㄨ幏鍙栨墦鍗版ā鏉垮け璐ワ紝璇烽噸鏂版搷浣�-" + result.msg);
+ return;
+ } else {
+ html = builderModelByType(result.data, grainData);
+ previewA4(html);
+ return;
+ }
+ },
+ error: function () {
+ layer.alert("鏈嶅姟鍣ㄨ幏鍙栨墦鍗版ā鏉垮け璐ワ紒锛侊紒");
+ }
+ });
+};
+
+/**
+ * 鑾峰彇妯℃澘
+ * @param grainData
+ */
+builderModel = function (grainData) {
+ var depotData = grainData.depotData;
+ if (!depotData.depotType) {
+ depotData.depotType = DepotType.T_01;
+ }
+ var key = builderModelKey(depotData.depotType, grainData.cable, grainData.cableCir);
+
+ //鍏堜粠鍗曚釜妯℃澘涓幏鍙�
+ var modelData = CACHE_PRINT_MODEL[key];
+ if (modelData) {
+ // return builderModelStep2(modelData, grainData);
+ return builderModelByType(modelData, grainData);
+ } else {
+ return null;
+ }
+};
+
+/**
+ * 鑾峰彇妯℃澘鍚庢坊鍔犳暟鎹�
+ * @param grainData
+ */
+builderModelByType = function (modelData, grainData) {
+ var depotData = grainData.depotData;
+ //鍔ㄦ�佹暟鎹俊鎭�--骞虫柟浠�
+ if (DepotType.T_01 == depotData.depotType || DepotType.T_05 == depotData.depotType) {
+ return builderModelLay(grainData);
+ } else if (DepotType.T_02 == depotData.depotType) {
+ return builderModelCir(modelData, grainData);
+ } else if (DepotType.T_03 == depotData.depotType) {
+ return builderModelCir(modelData, grainData);
+ } else if (DepotType.T_04 == depotData.depotType) {
+ return builderModelCir(modelData, grainData);
+ } else {
+ return builderModelLay(modelData, grainData);
+ }
+};
+
+/**
+ * 鑾峰彇妯℃澘鍚庢坊鍔犳暟鎹�--绛掍粨
+ * @param grainData
+ */
+builderModelCir = function (modelData, grainData) {
+ var attCable = grainData.cable.split("-");
+ numZ = attCable[0];
+ numY = attCable[1];
+ numX = attCable[2];
+
+ var model = modelData.model;
+ var depotData = grainData.depotData;
+ //鏇挎崲鍩虹鏁版嵁
+ if (dept) {
+ model = model.replace("companyName", dept.deptName);
+ } else {
+ model = model.replace("companyName", "鏅烘収绮簱");
+ }
+ model = model.replace("depotName", depotData.name)
+ .replace("weather", grainData.weather == null ? "" : grainData.weather)
+ .replace("orientation", depotData.orientation == null ? "" : depotData.orientation)
+ .replace("checkDate", grainData.receiveDate)
+ .replace("remark", grainData.remark == null ? "姝e父" : grainData.remark)
+ .replace("c_max_all", grainData.tempMax)
+ .replace("c_min_all", grainData.tempMin)
+ .replace("c_ave_all", grainData.tempAve);
+
+ model = model.replace("c_out_ave_all", "");//鏆傛椂涓嶇敤
+ model = model.replace("c_in_ave_all", "");//鏆傛椂涓嶇敤
+
+ model = model.replace("c_tIn", grainData.tempIn <= -100.0 ? "澶囩敤" : grainData.tempIn)
+ .replace("c_hIn", grainData.humidityIn <= -100.0 ? "澶囩敤" : grainData.humidityIn)
+ .replace("c_tOut", grainData.tempOut <= -100.0 ? "澶囩敤" : grainData.tempOut)
+ .replace("c_hOut", grainData.humidityOut <= -100.0 ? "澶囩敤" : grainData.humidityOut)
+ .replace("c_depotType", depotData.depotTypeName == null ? "/" : depotData.depotTypeName)
+ .replace("c_storeDate", depotData.storeDate == null ? "/" : depotData.storeDate.substring(0, 10))
+ .replace("c_foodLocation", depotData.foodLocation == null ? "/" : depotData.foodLocation)
+ .replace("c_foodVariety", depotData.foodVarietyName == null ? "/" : depotData.foodVarietyName)
+ .replace("c_perWet", depotData.perWet == null ? "/" : depotData.perWet)
+ .replace("c_perImpurity", depotData.perImpurity == null ? "/" : depotData.perImpurity)
+ .replace("c_bulkWeight", depotData.bulkWeight == null ? "/" : depotData.bulkWeight)
+ .replace("c_storeDate", depotData.storeDate == null ? "/" : depotData.storeDate)
+ .replace("c_storageReal", depotData.storageReal == null ? "/" : (Number(depotData.storageReal) / 1000).toFixed(2))
+ .replace("c_checkUser", grainData.checkUser == null ? "/" : grainData.checkUser)
+ .replace("c_storeKeeperName", depotData.storeKeeperName == null ? "/" : depotData.storeKeeperName)
+ .replace("createBillDate", grainData.sysDate);
+
+ //鍔ㄦ�佹暟鎹俊鎭�--骞虫柟浠�
+ if (DepotType.T_01 == depotData.depotType) {
+ if ("ROW" == modelData.modelType) {
+ model = addPointsRow1(model, grainData, numX);
+ } else {
+ model = addPoints1(model, grainData, numX);
+ }
+ }
+ //鍔ㄦ�佹暟鎹俊鎭�--娴呭渾浠�
+ if (DepotType.T_02 == depotData.depotType) {
+ model = addPoints4(model, grainData);
+ }
+ //鍔ㄦ�佹暟鎹俊鎭�--娌圭綈
+ if (DepotType.T_03 == depotData.depotType) {
+ var oilHeight = grainData.oilHeight;
+ if (oilHeight) {
+ var att = oilHeight.split("-");
+ model = model.replace("c_depotHeight", att[1])
+ .replace("c_oilHeight", att[0]);
+ } else {
+ model = model.replace("c_depotHeight", "#")
+ .replace("c_oilHeight", "#");
+ }
+ model = addPoints4(model, grainData);
+ }
+ //鍔ㄦ�佹暟鎹俊鎭�--绔嬬瓛浠�
+ if (DepotType.T_04 == depotData.depotType) {
+ model = addPoints4(model, grainData);
+ }
+ return model;
+};
+
+/**
+ * 骞虫柟浠撴墦鍗版姤琛�
+ */
+builderModelLay = function (grainData) {
+
+ var companyId = grainData.companyId;
+ var depotData = grainData.depotData;
+ var quality = grainData.mquality;
+ var qualityItemMap = {};
+ if (quality) {
+ var item = quality.checkItems;
+ if (item) {
+ for (var i = 0; i < item.length; i++) {
+ qualityItemMap[item[i].standardId] = item[i];
+ }
+ }
+ }
+ var cable = grainData.cable;
+ var attr = cable.split("-");
+ var numZ = attr[0];//灞傞厤缃�
+ var numY = attr[1];//琛岄厤缃�
+ var numX = attr[2];//鍒楅厤缃�
+ var listLays = grainData.listLays;
+
+ var model = "<!DOCTYPE html><html lang=\"zh-cn\">\n"
+ + "<head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\"><title>绮儏鎶ヨ〃妯$増</title>"
+ + " <style>\n"
+ + " table,table tr th,table tr td{border:1px solid #0d1021}table{width:100%;line-height:23px;text-align:center;font-size:14px}.table-2{border-top:0px solid #0d1021 !important}.table-2 tr{border-top:0px solid #0d1021 !important}.table-2 td{border-top:0px solid #0d1021 !important}.table-row-tr{border-left:0px !important;border-right:0px !important;border-top:0px !important}.table-row-fz{border:0px !important}.link-top{width:100%;border-top:solid #0d1021 1px}</style>\n"
+ + "</head>\n" + "<body>";
+
+ model += "<div style=\"text-align: center\">\n"
+ + "<span style=\"font-size: 26px; font-weight: bold;\">\n";
+ if (dept) {
+ model += dept.deptName;
+ } else {
+ model += "--XXX--绮簱"
+ }
+ model += "</span><div class=\"link-top\"></div><div class=\"link-top\"></div>\n";
+ model += "<span style=\"font-size: 18px; \">";
+ model += depotData.name;
+ if (compareData) {
+ model += " 绮儏鎶ヨ〃(灞傚熀鍑�) 瀵规瘮 " + compareData.batchId + "</span>\n";
+ } else {
+ model += " 绮儏鎶ヨ〃(灞傚熀鍑�)</span>\n";
+ }
+ model += "</div><div style=\"margin-top: 5px;\"><span style=\"float: left;\">澶╂皵锛�";
+ model += grainData.weather == null ? "" : grainData.weather;
+ model += " 鏂瑰悜锛�";
+ model += depotData.orientation == null ? "" : depotData.orientation
+ model += "</span><span style=\"float: right;\">妫�娴嬫椂闂达細";
+ model += grainData.receiveDate;
+ model += "</span></div>";
+
+ //鍔ㄦ�侀厤缃�
+ model += "<table cellspacing=\"0\" cellpadding=\"0\"><tr><td colspan=\"2\"></td>";
+ //鍔ㄦ�佹坊鍔犲垪閰嶇疆
+ for (var x = 1; x <= numX; x++) {
+ model += "<td>绗�" + x + "鍒�</td>";
+ }
+ model += "</tr>";
+ //鍔ㄦ�佹坊鍔犻噰闆嗙偣淇℃伅 Y
+ for (var y = 1; y <= numY; y++) {
+ for (var z = 1; z <= numZ; z++) {
+ model += "<tr>";
+ if (1 == z) {
+ model += "<td rowspan=" + numZ + " class=\"table-row-tr\">"
+ + y + "琛�</td>";
+ }
+ if (z == numZ) {
+ model += "<td class=\"table-row-tr\">" + z + "灞�</td>";
+ } else {
+ model += "<td class=\"table-row-fz\">" + z + "灞�</td>";
+ }
+ for (var x = numX; x >= 1; x--) { //鍊肩殑鏍煎紡锛歝ell+灞�+琛�+鍒�
+ if (z == numZ) {
+ model += "<td class=\"table-row-tr\">c_" + z + y + x
+ + "</td>";
+ } else {
+ model += "<td class=\"table-row-fz\">c_" + z + y + x
+ + "</td>";
+ }
+ }
+ model += "</tr>";
+ }
+ }
+ model += "</table>";
+ //寮�濮嬫坊鍔犵伯鎯呮暣浣撴暟鎹�
+ model += "<table cellspacing=\"0\" cellpadding=\"0\" class=\"table-2\">";
+ model += "<tr><td width=\"200px\">绮儏鍒嗘瀽锛�</td>";
+ model += "<td colspan=5>" + grainData.remark + "</td></tr>";
+ model += "</tr><tr><td></td><td>鏈�楂�</td><td>鏈�浣�</td><td>骞冲潎</td><td>鍛ㄥ潎</td><td>鍐呭潎</td></tr>";
+ //閬嶅巻姣忓眰鐨勪俊鎭�
+ var layData;
+ for (var i = 0; i < listLays.length; i++) {
+ layData = listLays[i];
+ model += "<tr><td>";
+ model += layData.fz + "灞�";
+ model += "</td><td>";
+ model += layData.tempMax;
+ model += "</td><td>";
+ model += layData.tempMin;
+ model += "</td><td>";
+ model += layData.tempAve;
+ model += "</td><td>";
+ model += layData.tempAveOut;
+ model += "</td><td>";
+ model += layData.tempAveIn;
+ model += "</td></tr>";
+ }
+ //鏁翠粨
+ model += "<tr><td>鏁翠粨</td><td>";
+ model += grainData.tempMax;
+ model += "</td><td>";
+ model += grainData.tempMin;
+ model += "</td><td>";
+ model += grainData.tempAve;
+ model += "</td><td>";
+ model += "</td><td>";
+ model += "</td></tr>";
+
+ //鍥哄畾鏍忎綅鍊�
+ model += "<tr><td>浠撴俯锛�" + (grainData.tempIn <= -100.0 ? "澶囩敤" : grainData.tempIn) + "</td>";
+ model += "<td>浠撴箍锛�" + (grainData.humidityIn <= -100.0 ? "澶囩敤" : grainData.humidityIn) + "</td>";
+ model += "<td colspan=\"2\">姘旀俯锛�" + (grainData.tempOut <= -100.0 ? "澶囩敤" : grainData.tempOut) + "</td>";
+ model += "<td colspan=\"2\">姘旀箍锛�" + (grainData.humidityOut <= -100.0 ? "澶囩敤" : grainData.humidityOut) + "</td></tr>";
+
+ model += "<tr><td>浠撴埧绫诲瀷</td><td>" + (depotData.depotTypeName == null ? '/' : depotData.depotTypeName) + "</td>";
+ model += "<td colspan=\"2\">鍏ヤ粨鏃ユ湡</td><td colspan=\"2\">"
+ + (depotData.storeDate == null ? '/' : depotData.storeDate.substring(0, 10)) + "</td></tr>";
+
+ model += "<tr><td>绮鍝佺</td><td>" + (depotData.foodVarietyName == null ? '/' : depotData.foodVarietyName) + "</td>";
+ model += "<td colspan=\"2\">瀹為檯鍌ㄩ噺锛堝惃锛�</td><td colspan=\"2\">"
+ + (depotData.storageReal == null ? '/' : (Number(depotData.storageReal) / 1000).toFixed(2)) + "</td></tr>";
+
+ model += "<tr><td>姘村垎(鍏ヤ粨% ~ 褰撳墠%)</td><td>" + (depotData.perWet == null ? '/' : depotData.perWet) + " ~ " + getCheckValue(qualityItemMap, "C01") + "</td>";
+ model += "<td colspan=\"2\">鍑虹硻鐜�(%)</td><td colspan=\"2\">"
+ + getCheckValue(qualityItemMap, "C09") + "</td></tr>";
+
+ model += "<tr><td>鍙戣娊鐜囷紙%锛�</td><td>" + getCheckValue(qualityItemMap, "C32") + "</td>";//鍙戣娊鐜�
+ model += "<td colspan=\"2\">绮浜у湴</td><td colspan=\"2\">"
+ + (depotData.foodLocation == null ? '/' : depotData.foodLocation) + "</td></tr>";
+ if ('5336' == companyId) {
+ model += "<tr><td>瀹归噸锛坓/L锛�</td><td>" + getCheckValue(qualityItemMap, "C03") + "</td>";
+ } else {
+ model += "<tr><td>瀹归噸锛坘g/m3锛�</td><td>" + getCheckValue(qualityItemMap, "C03") + "</td>";
+ }
+
+ model += "<td colspan=\"2\">闈㈢瓔鎸佹按鐜囷紙%锛�</td><td colspan=\"2\">" + getCheckValue(qualityItemMap, "C08") + "</td></tr>";//娌℃湁濉啓
+
+ model += "<tr><td>鏉傝川锛�%锛�</td><td>" + getCheckValue(qualityItemMap, "C02") + "</td>";
+ model += "<td colspan=\"2\">涓嶅畬鍠勭矑锛�%锛�</td><td colspan=\"2\">";
+ model += getCheckValue(qualityItemMap, "C04");
+ model += "</td></tr>";
+
+ model += "<tr><td>妫�娴嬩汉</td><td>" + (grainData.checkUser == null ? '/' : grainData.checkUser) + "</td>";
+ model += "<td colspan=\"2\">淇濈鍛�</td><td colspan=\"2\">"
+ + (depotData.storeKeeperName == null ? '/' : depotData.storeKeeperName) + "</td></tr>";
+ model += "</table>";
+
+ //娣诲姞灏鹃儴淇℃伅
+ model += "<div style=\"margin-top: 5px;\">";
+ model += "<span style=\"float: left;\">娉細#琛ㄧず灞傛渶浣庢俯 *琛ㄧず灞傛渶楂樻俯 \<琛ㄧず鐢电紗寮�濮嬩綅缃甛></span>";
+ model += "<span style=\"float: right;\">鍒惰〃鏃堕棿锛�" + grainData.sysDate
+ + "</span></div>";
+ model += "</div></body></html>";
+ //鐐逛綅淇℃伅璧嬪��
+ model = attrPointsLay(model, grainData.listPoints, listLays, numX);
+ return model;
+};
+
+//鏍规嵁閲囬泦鐐硅祴鍊硷紝娉ㄦ剰鏁版嵁搴撶敓鎴愮殑鍧愭爣鏄粠0寮�濮嬬殑
+attrPointsLay = function (model, listPoints, listLays, numX) {
+ var point;
+ var key;
+ var lay;
+ var temp;
+ for (var i = 0; i < listPoints.length; i++) {
+ point = listPoints[i];
+ temp = point.temp;
+ key = "c_" + (point.z + 1) + (point.y + 1) + (point.x + 1);
+ //鍒ゆ柇灞傞珮浣庢俯
+ lay = listLays[point.z];
+ if (-100.0 == temp) {
+ temp = "澶囩敤";
+ }
+ if (-101.0 == temp) {
+ temp = "鏁呴殰";
+ }
+ if (temp == lay.tempMax) {
+ temp = temp + "*";
+ }
+ if (temp == lay.tempMin) {
+ temp = temp + "#";
+ }
+ //key = c_z+1 + 1 + numX琛ㄧず绗竴鍒�
+ if (key == ("c_" + (point.z + 1) + "1" + numX)) {
+ temp = "<" + temp + ">";
+ }
+ model = model.replace(key, temp);
+ }
+ return model;
+};
+
+/**
+ * 妯℃澘缂撳瓨KEY鐨勭敓鎴�
+ * @param depotType
+ * @param cable
+ * @param cableCir
+ */
+builderModelKey = function (depotType, cable, cableCir) {
+ if (cableCir) {
+ return depotType + "_" + cable + "_" + cableCir;
+ }
+ return depotType + "_" + cable;
+};
+
+//鏍规嵁閲囬泦鐐硅祴鍊硷紝娉ㄦ剰鏁版嵁搴撶敓鎴愮殑鍧愭爣鏄粠0寮�濮嬬殑
+addPoints1 = function (model, numX) {
+ var listPoints = grainData.listPoints;
+ var listLays = grainData.listLays;
+ var point;
+ var key;
+ var lay;
+ var temp;
+ for (var i = 0; i < listPoints.length; i++) {
+ point = listPoints[i];
+ temp = point.temp;
+ lay = listLays[point.z];
+ //灞傛渶
+ if (lay.z <= listLays.length) {
+ key = "c_max_" + (lay.z + 1);
+ model = model.replace(key, lay.tempMax);
+ key = "c_min_" + (lay.z + 1);
+ model = model.replace(key, lay.tempMin);
+ key = "c_ave_" + (lay.z + 1);
+ model = model.replace(key, lay.tempAve);
+ key = "c_out_ave_" + (lay.z + 1);
+ model = model.replace(key, lay.tempAveOut);
+ key = "c_in_ave_" + (lay.z + 1);
+ model = model.replace(key, lay.tempAveIn);
+ }
+
+ key = (point.z + 1) + '_' + (point.y + 1) + '_' + (point.x + 1);
+ if (-100.0 == temp) {
+ temp = "澶囩敤";
+ }
+ if (-101.0 == temp) {
+ temp = "鏁呴殰";
+ }
+ if (temp == lay.tempMax) {
+ temp = temp + "*";
+ }
+ if (temp == lay.tempMin) {
+ temp = temp + "#";
+ }
+ //key = c_z+1 + 1 + numX琛ㄧず绗竴鍒�
+ // if (key == ((point.z + 1) + "1" + numX) + "_c") {
+ // temp = "<" + temp + ">";
+ // }
+ model = model.replace(key, temp);
+ }
+ return model;
+};
+
+//妯悜閫氶璧嬪��
+addPointsRow1 = function (model, grainData, numX) {
+ var listPoints = grainData.listPoints;
+ var listRows = grainData.listRows;
+ var point;
+ var key;
+ var temp;
+ for (var i = 0; i < listPoints.length; i++) {
+ point = listPoints[i];
+ temp = point.temp;
+ row = listRows[point.y];
+ //琛屾渶澶�
+ if (row.y <= listRows.length) {
+ key = "c_max_" + (row.y + 1);
+ model = model.replace(key, row.tempMax);
+ key = "c_min_" + (row.y + 1);
+ model = model.replace(key, row.tempMin);
+ key = "c_ave_" + (row.y + 1);
+ model = model.replace(key, row.tempAve);
+ }
+
+ key = (point.z + 1) + '_' + (point.y + 1) + '_' + (point.x + 1);
+ if (-100.0 == temp) {
+ temp = "澶囩敤";
+ }
+ if (-101.0 == temp) {
+ temp = "鏁呴殰";
+ }
+ if (temp == row.tempMax) {
+ temp = temp + "*";
+ }
+ if (temp == row.tempMin) {
+ temp = temp + "#";
+ }
+ //key = c_z+1 + 1 + numX琛ㄧず绗竴鍒�
+ // if (key == ("c_" + (point.z + 1) + "1" + numX)) {
+ // temp = "<" + temp + ">";
+ // }
+ model = model.replace(key, temp);
+ }
+ return model;
+};
+
+//绛掍粨娣诲姞閲囬泦鐐瑰拰灞傛俯搴︿俊鎭�
+addPoints4 = function (model, grainData) {
+ // console.log(grainData);
+ var listPoints = grainData.listPoints;
+ var listLays = grainData.listLays;
+ var point;
+ var key;
+ var lay;
+ var temp;
+ for (var i = 0; i < listPoints.length; i++) {
+ point = listPoints[i];
+ lay = listLays[point.z];
+ temp = point.temp;
+ //灞傛渶
+ if (lay.z <= listLays.length) {
+ key = "c_max_" + lay.z;
+ model = model.replace(key, lay.tempMax);
+ key = "c_min_" + lay.z;
+ model = model.replace(key, lay.tempMin);
+ key = "c_ave_" + lay.z;
+ model = model.replace(key, lay.tempAve);
+ key = "c_out_ave_" + lay.z;
+ model = model.replace(key, lay.tempAveOut);
+ key = "c_in_ave_" + lay.z;
+ model = model.replace(key, lay.tempAveIn);
+ }
+
+ key = (point.x + 1) + "_" + (point.y + 1) + "_" + (point.z + 1);
+ //鍒ゆ柇灞傞珮浣庢俯
+ if (-100.0 == temp) {
+ temp = "澶囩敤";
+ }
+ if (-101.0 == temp) {
+ temp = "鏁呴殰";
+ }
+ if (-102.0 == temp) {
+ temp = "--";
+ }
+ if (temp == lay.tempMax) {
+ temp = temp + "*";
+ }
+ if (temp == lay.tempMin) {
+ temp = temp + "#";
+ }
+ model = model.replace(key, temp);
+ }
+ return model;
+};
+/**
+ * 鏍规嵁HTML妯$増鎵撳嵃涓篈4
+ * @param strHtml
+ */
+previewA4 = function (strHtml) {
+ var LODOP = CLODOP;
+ LODOP.SET_PRINT_PAGESIZE(1, 0, 0, "A4");
+ LODOP.PRINT_INIT("绮儏鎶ヨ〃");
+ LODOP.ADD_PRINT_HTM(30, 40, "180mm", "100%", strHtml);
+ //璁剧疆榛樿婊″紶鎵撳嵃
+ LODOP.SET_PRINT_MODE("PRINT_PAGE_PERCENT", "Full-Page");
+ LODOP.PREVIEW();
+};
+
+getCheckValue = function (qualityItemMap, key) {
+ try {
+ return (qualityItemMap[key].value ? qualityItemMap[key].value : "/");
+ } catch (e) {
+ console.log(e);
+ return "/";
+ }
+ return "/";
+};
\ No newline at end of file
diff --git a/fzzy-igdss-web/src/main/resources/static/grain/grain-check1.js b/fzzy-igdss-web/src/main/resources/static/grain/grain-check1.js
new file mode 100644
index 0000000..8df0c66
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/grain/grain-check1.js
@@ -0,0 +1,718 @@
+var layer;
+var grainData;// 褰撳墠浠撶伯鎯呮暟鎹�
+var form;
+var table;
+var element;
+var compareData = null;// 瀵规瘮鏁版嵁
+var listGrainData;// 榛樿椤甸潰涓殑绮儏鍒楄〃
+var mapGrainData;// 鎵归噺鎵撳嵃涓殑鎵归噺绮儏淇℃伅
+
+$(function () {
+ layui.use(['layer', 'laydate', 'form', 'table', 'element'], function () {
+ element = layui.element;
+ form = layui.form;
+ layer = layui.layer;
+ var laydate = layui.laydate;
+ table = layui.table;
+
+ // 鏃ユ湡
+ laydate.render({
+ elem: '#checkDateMore',
+ type: 'month',
+ theme: '#7b8e9f',
+ position: 'static',
+ done: function (value, date, endDate) {
+ flushGrain(value);
+ }
+ });
+
+ laydate.render({
+ elem: '#compareCheckDate',
+ type: 'month',
+ theme: '#7b8e9f',
+ done: function (value, date, endDate) {
+ compareStep2(value);
+ }
+ });
+
+ laydate.render({
+ elem: '#printCheckDate',
+ theme: '#7b8e9f'
+ });
+
+ laydate.render({
+ elem: '#printCheckDate2',
+ theme: '#7b8e9f'
+ });
+ form.render();
+
+ // 鐩戝惉浠撳簱閫夋嫨
+ form.on('select(select_depotId)', function (obj) {
+ return changeView();
+ });
+
+ // 鐩戝惉閫夋嫨鎵规
+ form.on('select(select_batchId)', function (obj) {
+ var value = obj.value;
+ if (value == "0") {// 琛ㄧず寮瑰嚭鏇村鎵规
+ showMore();
+ } else {
+ flushGrainByBatchId(value);
+ }
+ });
+
+ // 鐩戝惉鏄剧ず绫诲瀷
+ form.on('switch(filter_switch)', function (obj) {
+ var value = obj.value;
+ var checked = obj.elem.checked;
+ if (checked) {
+ if ("lay" == value) {// 灞�
+ $("#switch_row").prop("checked", false);
+ $("#switch_col").prop("checked", false);
+ lay();
+ }
+ if ("row" == value) {
+ $("#switch_lay").prop("checked", false);
+ $("#switch_col").prop("checked", false);
+ row();
+ }
+ if ("col" == value) {
+ $("#switch_lay").prop("checked", false);
+ $("#switch_row").prop("checked", false);
+ col();
+ }
+ form.render();
+ }
+ });
+
+ form.on('switch(filter_switch2)', function (obj) {
+ var value = obj.value;
+ var checked = obj.elem.checked;
+ console.log(value);
+
+ if (checked) {
+ if ("outer" == value) {
+ $("#switch_all").prop("checked", false);
+ $("#switch_inner").prop("checked", false);
+ display_outside();
+ }
+ if ("all" == value) {
+ $("#switch_inner").prop("checked", false);
+ $("#switch_outer").prop("checked", false);
+ display_all();
+ }
+ if ("inner" == value) {
+ $("#switch_all").prop("checked", false);
+ $("#switch_outer").prop("checked", false);
+ display_inside();
+ }
+ form.render();
+ }
+ });
+
+ // 鐩戝惉瀵规瘮鏁版嵁
+ table.on('radio(filterTable)', function (obj) {
+ compareData = obj.data;
+ });
+
+ //鍒濆鍖栧埛鏂版暟鎹�
+ initData();
+ });
+
+ // 鍒濆鍖栧潗鏍囩郴
+ initGrainChar3d();
+
+});
+
+function initData() {
+ if (depotId) {
+ $("#depotId").val(depotId);
+ flushGrain(null);
+ form.render();
+ }
+}
+
+function changeView() {
+ depotId = $("#depotId").val();
+ window.location.href = "/grain/gateway?depotId=" + depotId;
+ return true;
+}
+
+// 鍗曚粨鎵撳嵃
+function printSingle() {
+ layer.msg("寮�濮嬭皟鐢ㄥ悗鍙版墦鍗版ā鏉库�︹��");
+ toPrintSingle(grainData);
+}
+
+// 鎵归噺鎵撳嵃
+function printBatch() {
+ // 棣栧厛鍘婚櫎涔嬪墠鐨勯�夋嫨
+ $('#batchPrintSelect input').each(function () {
+ var name = $(this).prop("name");
+ if (name == "printCheckDate") {// 璺宠繃
+ return true;
+ }
+ $(this).prop("disabled", false);
+ $(this).prop("checked", false);
+ });
+ form.render();
+
+ //鍒濆鍖栨壒閲忔ā鏉�
+ initModel();
+
+ // 寮瑰嚭閫夋嫨妗�
+ layer.open({
+ type: 1,
+ title: '鎵归噺绮儏鎵撳嵃锛堢孩鑹茶〃绀烘病鏈夌伯鎯呰褰曪紝榛樿涓哄綋澶╋級',
+ area: ['750px', '450px'],
+ shade: 0,
+ content: $('#batchPrintSelect'),
+ btn: ['鍏ㄩ��', '鍙嶉��', '閲嶉��', '鎵ц鎵撳嵃', '鍙栨秷鎵撳嵃'],
+ yes: function () {
+ var name;
+ $('#batchPrintSelect input').each(function () {
+ name = $(this).prop("name");
+ if (name == "printCheckDate" || $(this).prop("disabled")) {
+ // doNothing
+ } else {
+ $(this).prop("checked", true);
+ }
+ });
+ form.render();
+ },
+ btn2: function () {
+ var name;
+ $('#batchPrintSelect input').each(function () {
+ name = $(this).prop("name");
+ if (name == "printCheckDate" || $(this).prop("disabled")) {
+ // doNothing
+ } else {
+ if ($(this).prop("checked")) {
+ $(this).prop("checked", false);
+ } else {
+ $(this).prop("checked", false);
+ }
+ }
+ });
+ form.render();
+ return false;
+ },
+ btn3: function () {
+ var name;
+ $('#batchPrintSelect input').each(function () {
+ name = $(this).prop("name");
+ if (name == "printCheckDate" || $(this).prop("disabled")) {
+ // doNothing
+ } else {
+ $(this).prop("checked", false);
+ }
+ });
+ form.render();
+ return false;
+ },
+ btn4: function () {
+ printBatchTodo();
+ },
+ btn5: function () {
+ layer.close(0);
+ },
+ closeBtn: 0
+ });
+ // 榛樿璋冪敤鑾峰彇鏁版嵁鏇存柊
+ $("#printCheckDate").prop("value", dateFtt("yyyy-MM-dd", new Date()));
+ getPrintBatchDepot();
+};
+
+// 鑾峰彇鎵归噺鎵撳嵃鐨勪俊鎭�
+function getPrintBatchDepot() {
+ layer.msg("楠岃瘉绮儏妫�娴嬭褰曗�︹��");
+ var checkDate = $("#printCheckDate").val();
+ var checkHour = $("#printCheckHour").val();
+
+ //console.log(checkTime);
+
+ $.ajax({
+ type: "POST",
+ url: "/grain/query-checkDate-map",
+ dataType: "json",
+ contentType: "application/json;charset=UTF-8",
+ data: JSON.stringify({
+ checkDate: checkDate,
+ checkHour: checkHour
+ }),
+ success: function (result) {
+ if (result.code != "0000") {
+ layer.msg(result.msg);
+ disabledAllSelectDepot();
+ } else {
+ mapGrainData = result.data;
+ updateSelectDepot();
+ }
+ },
+ error: function () {
+ layer.msg("鎵归噺鎵撳嵃鑾峰彇绮儏淇℃伅澶辫触锛�");
+ }
+ });
+};
+
+// 鏍规嵁鏌ヨ鐨勬暟鎹壒閲忔墦鍗伴瑙�
+function printBatchTodo() {
+ layer.msg("寮�濮嬫壒閲忕敓鎴愭墦鍗版ā鐗堚�︹��");
+ var strHtml;
+ var value;
+ var checked;
+ var printGrainData;
+ // 灏嗕粨搴撴暟鎹垪琛ㄨ浆鎹负MAP
+ var mapDepot = {};
+ $.each(listDepot, function (index, data) {
+ mapDepot[data.id] = data;
+ });
+ var LODOP = CLODOP;
+ // 璁剧疆榛樿婊″紶鎵撳嵃
+ LODOP.PRINT_INIT("绮儏鎶ヨ〃");// 鍒濆鍖栧湪寰幆澶�
+ LODOP.SET_PRINT_PAGESIZE(1, 0, 0, "A4");
+ $('#batchPrintSelect input').each(function () {
+ if ($(this).prop("name") == "printCheckDate") {// 璺宠繃
+ return true;
+ }
+ checked = $(this).prop("checked");
+ if (checked) {
+ value = $(this).val();
+ printGrainData = mapGrainData[value];
+ if (!printGrainData) {// 濡傛灉娌℃湁绮儏鏁版嵁璺宠繃鎵ц涓嬩竴涓�
+ return true;
+ }
+ LODOP.NewPage();
+ printGrainData.depotData = mapDepot[value];
+ strHtml = builderModel(printGrainData);
+ LODOP.ADD_PRINT_HTM(30, 40, "180mm", "100%", strHtml);
+ }
+ });
+ layer.msg("寮�濮嬭皟鐢ㄦ墦鍗扮▼搴忛瑙堚�︹��");
+ LODOP.SET_PRINT_MODE("PRINT_PAGE_PERCENT", "Full-Page");
+ LODOP.PREVIEW();
+};
+
+// 璁剧疆鎵归噺鎵撳嵃涓墍鏈変粨搴撲笉鍙�夋嫨
+function disabledAllSelectDepot() {
+ var name;
+ $('#batchPrintSelect input').each(function () {
+ name = $(this).prop("name");
+ if (name == "printCheckDate") {// 璺宠繃
+ return true;
+ }
+ $(this).prop("disabled", true);
+ });
+ form.render();
+};
+
+function updateSelectDepot() {
+ var value, name;
+ $('#batchPrintSelect input').each(function () {
+ value = $(this).val();
+ name = $(this).prop("name");
+ if (name == "printCheckDate") {// 璺宠繃
+ return true;
+ }
+ if (mapGrainData[value]) {
+ $(this).prop("disabled", false);
+ } else {
+ $(this).prop("disabled", true);
+ }
+ });
+ form.render();
+};
+
+// 绮儏瀵规瘮
+function compare() {
+ if (!depotId) {
+ layer.msg("璇峰厛閫夋嫨浠撳簱鈥︹��");
+ return;
+ }
+ var batchId = $("#batchId").val();
+ if (!batchId) {
+ layer.msg("褰撳墠娌℃湁鍙互姣旇緝鐨勬暟鎹�︹��");
+ return;
+ }
+ // 涓轰簡閬垮厤閲嶅姣旇緝鍑虹幇鐨勯棶棰橈紝濡傛灉宸茬粡姣旇緝杩囨暟鎹紝鍒欏湪姣旇緝鍓嶅埛鏂颁笅鏁版嵁
+ if (compareData) {
+ flushGrainByBatchId(batchId);
+ }
+ // 棣栧厛寮瑰嚭灞�
+ layer.open({
+ type: 1,
+ title: '绮儏瀵规瘮閫夋嫨',
+ area: ['330px', '640px'],
+ shade: 0,
+ content: $('#compareSelect'),
+ btn: ['纭瀵规瘮', '鍙栨秷瀵规瘮'],
+ yes: function () {
+ if (compareData) {
+ layer.msg("寮�濮嬫墽琛屾壒娆″姣斺�︹��");
+ compareStep3(grainData, compareData);
+ } else {
+ layer.msg("娌℃湁鑾峰彇鍒板姣旀暟鎹紒锛�");
+ }
+ },
+ btn2: function () {
+ layer.closeAll();
+ },
+ closeBtn: 1
+ });
+
+ $("#compareCheckDate").prop("value", null);
+ compareStep2(null);
+ form.render();
+};
+
+function compareStep2(compareDate) {
+ depotId = $("#depotId").val();
+ if (!depotId) {
+ layer.msg("璇峰厛閫夋嫨浠撳簱锛�");
+ return;
+ }
+ if (!compareDate) {
+ compareDate = $("#compareCheckDate").val();
+ }
+ var data = {
+ depotId: depotId,
+ checkMonth: compareDate,
+ extBatchId: grainData.batchId
+ };
+ $.ajax({
+ type: "POST",
+ url: "/grain/page-list",
+ dataType: "json",
+ contentType: "application/json;charset=UTF-8",
+ data: JSON.stringify(data),
+ success: function (result) {
+ if (result.code != "0000") {
+ layer.msg(result.msg);
+ } else {
+ table.render({
+ elem: '#tableSelect',
+ height: 450,
+ data: result.data,
+ page: false,
+ limit: 100,
+ skin: "nob",
+ even: true,
+ size: "sm",
+ cols: [[{
+ type: 'radio',
+ fixed: 'left',
+ title: '閫夋嫨'
+ }, {
+ field: 'receiveDate',
+ title: '妫�娴嬫椂闂�',
+ align: 'center',
+ }]]
+ });
+ }
+ },
+ error: function () {
+ layer.msg("鑾峰彇褰撳墠浠撳簱妫�娴嬭褰曞け璐ワ紝璇烽噸鏂板皾璇曪紒锛�");
+ }
+ });
+};
+
+// 寮�濮嬫壒娆″姣�
+function compareStep3(dataA, dataB) {
+ $.ajax({
+ type: "POST",
+ url: "/grain/data-compare",
+ dataType: "json",
+ contentType: "application/json;charset=UTF-8",
+ data: JSON.stringify({
+ dataA: dataA,
+ dataB: dataB
+ }),
+ success: function (result) {
+ if (result.code != "0000") {
+ layer.msg(result.msg);
+ } else {
+ // 瑕嗙洊椤甸潰涓殑绮儏鏁版嵁
+ grainData = result.data;
+ // 鏄剧ず閲囬泦鐐逛俊鎭�
+ resetGrainChart3d();
+ // 绮儏淇℃伅璧嬪��
+ renderGrainInfo();
+
+ layer.closeAll();
+ }
+ },
+ error: function () {
+ layer.msg("鎵规瀵规瘮鍑虹幇寮傚父锛岃閲嶆柊閫夋嫨");
+ }
+ });
+};
+
+// 鐐瑰嚮鍒锋柊鎿嶄綔
+function flushGrain(checkMonth) {
+ compareData = null;
+ depotId = $("#depotId").val();
+
+ if (!depotId) {
+ layer.alert("璇峰厛閫夋嫨浠撳簱锛�");
+ return;
+ }
+ var data = {
+ depotId: depotId,
+ checkMonth: checkMonth
+ };
+
+ $.ajax({
+ type: "POST",
+ url: "/grain/query-list-data",
+ dataType: "json",
+ contentType: "application/json;charset=UTF-8",
+ data: JSON.stringify(data),
+ success: function (result) {
+ if (result.code != "0000") {
+ layer.msg(result.msg);
+ clearGrainChart3d();
+ }
+ listGrainData = result.data;
+ if (!listGrainData) {
+ return;
+ }
+ grainData = listGrainData[0];
+ // 鏄剧ず閲囬泦鐐逛俊鎭�
+ resetGrainChart3d();
+ // 绮儏淇℃伅璧嬪��
+ renderGrainInfo();
+ // 鍦ㄦ壒娆¢�夋嫨涓坊鍔犱笅鎷夋暟鎹�
+ resetSelectBatchId();
+ // 璋冪敤鍏ㄩ儴鍏抽棴
+ layer.closeAll();
+ layer.msg("鏇存柊鎴愬姛鈥︹��");
+ },
+ error: function () {
+ layer.msg("鏍规嵁褰撳墠鏉′欢鑾峰彇绮儏鏁版嵁娓叉煋鍥炬爣澶辫触锛侊紒");
+ }
+ });
+};
+
+// 濉啓绮儏淇℃伅
+function renderGrainInfo() {
+ // 閰嶇疆浠撳簱鍗$墖淇℃伅
+ var depotData = grainData.depotData;
+ $("#depotTypeName").text(depotData.depotTypeName);
+ $("#storeDate").text(depotData.storeDate);
+ $("#storageReal").text(depotData.storageReal);
+ $("#foodVarietyName").text(depotData.foodVarietyName);
+ $("#perWet").text(depotData.perWet);
+ $("#depotStatus").text(DEPOT_STATUS_MSG(depotData.depotStatus));
+ $("#foodLocation").text(depotData.foodLocation);
+ $("#perImpurity").text(depotData.perImpurity);
+ $("#storeKeeperName").text(depotData.storeKeeperName);
+ $("#storeKeeperLevel").text(depotData.storeKeeperLevel);
+ $("#storeKeeperPhone").text(depotData.storeKeeperPhone);
+
+ // 绮儏妫�娴嬩俊鎭祴鍊�
+ $("#checkUser").text(grainData.checkUser);
+ $("#tempMax").text(grainData.tempMax);
+ $("#tempAve").text(grainData.tempAve);
+ $("#tempMin").text(grainData.tempMin);
+
+
+ //console.log("------------"+grainData.humidityIn);
+ //濡傛灉婀垮害==0琛ㄧず娌℃湁鑾峰彇鍒�
+ if(grainData.humidityIn != 0){
+ $("#tempIn").text(grainData.tempIn <= -100.0 ? "--" : grainData.tempIn);
+ $("#humidityIn").text(
+ grainData.humidityIn <= -100.0 ? "--" : grainData.humidityIn);
+ }
+ if(grainData.humidityOut != 0){
+ $("#tempOut").text(grainData.tempOut <= -100.0 ? "--" : grainData.tempOut);
+ $("#humidityOut").text(
+ grainData.humidityOut <= -100.0 ? "--" : grainData.humidityOut);
+ }
+};
+
+// 鏍规嵁鎵规鏇存柊鐨勫�艰皟鏁�
+function flushGrainByBatchId(batchId) {
+ var temp;
+ $.each(listGrainData, function (index, item) {
+ if (item.batchId == batchId) {
+ temp = item;
+ return false;
+ }
+ });
+ if (temp) {
+ grainData = temp;
+ // 鏄剧ず閲囬泦鐐逛俊鎭�
+ resetGrainChart3d();
+ // 绮儏淇℃伅璧嬪��
+ renderGrainInfo();
+ layer.msg("鏇存柊鎴愬姛鈥︹��");
+ }
+};
+
+// 閲嶇疆鎵规涓嬫媺妗�
+function resetSelectBatchId() {
+ // 棣栧厛娓呯┖鍘熸潵鐨勫��
+ $("#batchId").empty();
+ // 鏈笅鎷夋璧嬪��
+ $.each(listGrainData, function (index, item) {
+ $('#batchId').append(new Option(item.receiveDate, item.batchId));// 涓嬫媺鑿滃崟閲屾坊鍔犲厓绱�
+ });
+ $('#batchId').append(new Option("閫夋嫨鏃堕棿鈥︹��", "0"));
+ form.render();
+};
+
+// 鏇村鎵规閫夋嫨
+function showMore() {
+ layer.open({
+ type: 1,
+ title: '閫夋嫨妫�娴嬫椂闂�',
+ area: ['300px', '400px'],
+ shade: 0,
+ content: $('#dialogMoreSelect'),
+ btn: 0,
+ closeBtn: 1
+ });
+};
+
+// 鍗曚釜绮儏妫�娴�
+function checkGrain() {
+ if (!depotId) {
+ layer.msg("璇峰厛閫夋嫨浠撳簱锛�");
+ return;
+ }
+ var data = {
+ depotId: depotId
+ };
+ $.ajax({
+ type: "POST",
+ url: "/grain/check-single",
+ dataType: "json",
+ contentType: "application/json;charset=UTF-8",
+ data: JSON.stringify(data),
+ success: function (result) {
+ showOrderProgress();
+ if (result.code != "ORDER_SUCCESS") {
+ layer.msg(result.msg);
+ } else {
+ layer.msg("鍛戒护宸茬粡鎴愬姛鍙戦�侊紝寰呯粓绔搷搴斺�︹��");
+ }
+ },
+ error: function () {
+ layer.alert("绮儏妫�娴嬪嚭鐜板紓甯革紝鎵ц澶辫触锛�");
+ }
+ });
+};
+
+// 鎵归噺绮儏閲囬泦
+function checkGrainBatch() {
+ $('#batchCheckSelect input').each(function () {
+ $(this).prop("checked", false);
+ });
+ form.render();
+ // 寮瑰嚭閫夋嫨妗�
+ layer.open({
+ type: 1,
+ title: '鎵归噺妫�娴嬮�夋嫨浠撳簱',
+ area: ['730px', '450px'],
+ shade: 0,
+ content: $('#batchCheckSelect'),
+ btn: ['鍏ㄩ��', '鍙嶉��', '閲嶉��', '纭畾妫�娴�', '鍙栨秷妫�娴�'],
+ yes: function () {
+ $('#batchCheckSelect input').each(function () {
+ $(this).prop("checked", true);
+ });
+ form.render();
+ },
+ btn2: function () {
+ $('#batchCheckSelect input').each(function () {
+ if ($(this).prop("checked")) {
+ $(this).prop("checked", false);
+ } else {
+ $(this).prop("checked", true);
+ }
+ });
+ form.render();
+ return false;
+ },
+ btn3: function () {
+ $('#batchCheckSelect input').each(function () {
+ $(this).prop("checked", false);
+ });
+ form.render();
+ return false;
+ },
+ btn4: function () {
+ showOrderProgress();
+ return checkBatchTodo();
+ },
+ btn5: function () {
+ layer.close(0);
+ },
+ closeBtn: 0
+ });
+};
+
+/**
+ * 寮�濮嬫墽琛屾壒閲忔娴�
+ */
+function checkBatchTodo() {
+ var depotIds = "";
+ $('#batchCheckSelect input').each(function () {
+ if ($(this).prop("checked")) {
+ depotIds += $(this).val() + ",";
+ }
+ });
+
+ if (depotIds == "") {
+ layer.msg("璇峰厛閫夋嫨闇�瑕佹娴嬬殑浠撳簱鈥︹��");
+ return false;
+ }
+ layer.msg("寮�濮嬫墽琛屾壒閲忔娴嬧�︹��");
+ // 璋冪敤鍚庡彴鎵归噺妫�娴�
+ var data = {
+ depotIds: depotIds
+ };
+ $.ajax({
+ type: "POST",
+ url: "/grain/check-batch",
+ dataType: "json",
+ contentType: "application/json;charset=UTF-8",
+ data: JSON.stringify(data),
+ success: function (result) {
+ if (result.code != "ORDER_SUCCESS") {
+ layer.alert("鎵ц澶辫触锛�" + result.msg);
+ return false;
+ } else {
+ layer.msg("鍛戒护宸茬粡鎴愬姛鍙戦�侊紝寰呯粓绔搷搴斺�︹��");
+ return true;
+ }
+ },
+ error: function () {
+ layer.alert("绮儏妫�娴嬪嚭鐜板紓甯革紝鎵ц澶辫触锛�");
+ return false;
+ }
+ });
+ return true;
+};
+
+/**
+ * 寮瑰嚭鍛戒护鎵ц杩涘害妗�
+ */
+var iframeOrderIndex = 0;
+
+function showOrderProgress() {
+ var domId = "#layui-layer-iframe" + iframeOrderIndex;
+ if ($(domId).length == 0) {
+ iframeOrderIndex = layer.open({
+ type: 2,
+ title: "鎵ц杩涘害鍜岃褰�",
+ icon: 1,
+ shadeClose: true,
+ shade: 0.3,
+ closeBtn: 1,
+ anim: 2,
+ area: ['1000px', '600px'],
+ content: '/grain/order-list?depotId=' + depotId + "&t=" + Math.random()
+ });
+ }
+}
\ No newline at end of file
diff --git a/fzzy-igdss-web/src/main/resources/static/grain/grain-export.js b/fzzy-igdss-web/src/main/resources/static/grain/grain-export.js
new file mode 100644
index 0000000..bd270ee
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/grain/grain-export.js
@@ -0,0 +1,130 @@
+// 绮儏鎵归噺瀵煎嚭EXCEL
+function exportBatch() {
+ // 寮瑰嚭閫夋嫨妗�
+ layer.open({
+ type: 1,
+ title: '鎵归噺瀵煎嚭鎶ヨ〃',
+ area: ['730px', '450px'],
+ shade: 0,
+ content: $('#batchExportSelect'),
+ btn: ['鍏ㄩ��', '鍙嶉��', '閲嶉��', '鎵ц瀵煎嚭', '鍙栨秷瀵煎嚭'],
+ yes: function () {
+ var name;
+ $('#batchExportSelect input').each(function () {
+ name = $(this).prop("name");
+ if (name == "printCheckDate2" || $(this).prop("disabled")) {
+
+ } else {
+ $(this).prop("checked", true);
+ }
+ });
+ form.render();
+ },
+ btn2: function () {
+ var name;
+ $('#batchExportSelect input').each(function () {
+ name = $(this).prop("name");
+ if (name == "printCheckDate2" || $(this).prop("disabled")) {
+ // doNothing
+ } else {
+ if ($(this).prop("checked")) {
+ $(this).prop("checked", false);
+ } else {
+ $(this).prop("checked", false);
+ }
+ }
+ });
+ form.render();
+ return false;
+ },
+ btn3: function () {
+ var name;
+ $('#batchExportSelect input').each(function () {
+ name = $(this).prop("name");
+ if (name == "printCheckDate2" || $(this).prop("disabled")) {
+ // doNothing
+ } else {
+ $(this).prop("checked", false);
+ }
+ });
+ form.render();
+ return false;
+ },
+ btn4: function () {
+ exportBatchTodo();
+ },
+ btn5: function () {
+ layer.close(0);
+ },
+ closeBtn: 0
+ });
+
+ // 榛樿璋冪敤鑾峰彇鏁版嵁鏇存柊
+ if (grainData) {
+ $("#printCheckDate2").prop("value", grainData.receiveDate.substr(0, 10));
+ } else {
+ $("#printCheckDate2").prop("value", dateFtt("yyyy-MM-dd", new Date()));
+ }
+};
+
+function exportBatchTodo() {
+ var depotIds = "";
+ $('#batchExportSelect input').each(function () {
+ if ($(this).prop("checked")) {
+ depotIds += $(this).val() + ",";
+ }
+ });
+
+ if (depotIds == "") {
+ layer.alert("璇烽�夋嫨闇�瑕佸鍑虹殑浠撳簱鈥︹��");
+ return false;
+ }
+
+ layer.load();
+ // 璋冪敤鍚庡彴鎵归噺妫�娴�
+ var checkDate = $("#printCheckDate2").val();
+ var data = {
+ companyId: companyId,
+ deptId: deptId,
+ depotIds: depotIds,
+ checkDate: checkDate
+ };
+
+ $.ajax({
+ type: "POST",
+ url: "/grain/export-batch",
+ dataType: "json",
+ contentType: "application/json;charset=UTF-8",
+ data: JSON.stringify(data),
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code != "ORDER_SUCCESS") {
+ layer.alert("瀵煎嚭妯$増澶辫触锛�" + result.msg);
+ return false;
+ } else {
+ layer.closeAll('loading');
+ downLoadExcel(result.msg);
+ return true;
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.alert("绮儏瀵煎嚭EXCEl鎵ц鍑洪敊锛岃浠庢柊鎵ц");
+ return false;
+ }
+ });
+ return true;
+}
+
+/**
+ * 鍒涘缓涓�涓狝鏍囩鎵ц涓嬭浇
+ * @param fileName
+ */
+function downLoadExcel(fileName) {
+ var url = "../../basic/file/download-temp?companyId=" + companyId + "&fileName=" + fileName;
+ var link = document.createElement('a');
+ link.style.display = 'none';
+ link.href = url;
+ document.body.appendChild(link)
+ link.click();
+}
\ No newline at end of file
diff --git a/fzzy-igdss-web/src/main/resources/static/grain/grain-style.css b/fzzy-igdss-web/src/main/resources/static/grain/grain-style.css
new file mode 100644
index 0000000..c61e677
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/grain/grain-style.css
@@ -0,0 +1,618 @@
+@charset "utf-8";
+
+/*-----------------
+ Author:xq
+ update:2019
+ -------------------*/
+body {
+ font-family: "寰蒋闆呴粦", Arial, sans-serif;
+ font-size: 14px;
+ background: #f3f5f8;
+}
+
+i,em{
+ font-style: normal;
+}
+
+
+.radius-3{
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.radius-4{
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.radius-6,
+.lq-rMenu li{
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ -ms-border-radius: 6px;
+ -o-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.box-shadow{
+ -webkit-box-shadow: 0px 0px 9px 3px rgba(230,230,230,0.6);
+ -moz-box-shadow: 0px 0px 9px 3px rgba(230,230,230,0.6);
+ box-shadow: 0px 0px 9px 3px rgba(230,230,230,0.6);
+}
+
+
+.lq-userbox{
+ min-height: 85px;
+ padding: 6px 6px;
+}
+
+.lq-user{
+ text-align: center;
+ width: 100%;
+}
+
+.lq-user img{
+ width: 85px;
+ /*height: 85px;*/
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+}
+
+.lq-user p{
+ line-height: 30px;
+ font-size: 16px;
+ color: #000;
+ font-weight: bold;
+ margin-top: 5px;
+}
+
+.lq-userItem{
+ height: 34px;
+ background: #eff4f6;
+ overflow: hidden;
+ margin-top: 12px;
+}
+
+.lq-userItem dt,
+.lq-userItem dd{
+ float: left;
+ height: 34px;
+ line-height: 34px;
+
+}
+
+.lq-userItem dt{
+ width: 40%;
+ text-align: center;
+ color: #6c7781;
+ font-size: 16px;
+ font-style: italic;
+}
+
+.lq-userItem dd{
+ font-size: 16px;
+ color: #000;
+}
+
+.lq-userItem dd span{
+ font-family: arial;
+}
+/*lqjc*/
+
+.l-container{
+ width: 100%;
+ /*max-width: 1680px;*/
+ min-width: 1340px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.l-main{
+ margin: 10px;
+ position: relative;
+ padding-right: 110px;
+ overflow: hidden;
+}
+
+.l-icon{
+ width: 24px;
+ height: 24px;
+ display: inline-block;
+ position: relative;
+}
+
+.l-icon img{
+ width: 100%;
+ height: 100%;
+ vertical-align: top;
+}
+
+.fl {
+ float: left;
+}
+.fr {
+ float: right;
+}
+
+.lq-left{
+ /*width: 20%;*/
+ min-width: 260px;
+}
+
+
+.lq-left1{
+ padding: 6% 5%;
+ background: #7b8e9f;
+}
+
+.lq-left1-from{
+ margin-bottom: 20px;
+}
+
+.lq-left1 .lq-left1-from:last-child{
+ margin-bottom: 0;
+}
+
+.lq-left1 .lq-left1-from .layui-form-label{
+ color: #fff;
+ padding: 9px 0;
+ text-align: left;
+ font-size: 16px;
+}
+
+.lq-left1 .lq-left1-from .layui-input-block{
+ margin-left: 80px;
+}
+
+.lq-left1 .layui-form-select .layui-edge{
+ border-top-color: #666;
+}
+
+.lq-left1 .layui-input-block .layui-input{
+ font-size: 16px;
+ color: #000;
+}
+
+.lq-left1 .layui-form-select dl dd.layui-this{
+ background: #7b8e9f;
+}
+.lq-left2{
+ background: #fff;
+ overflow: hidden;
+ /*margin-top: 20px;*/
+ margin-top: 10px;
+}
+.lq-left2-list{
+ width: 100%;
+}
+
+.lq-left2-list li{
+ height: 20px;
+ line-height: 20px;
+ overflow: hidden;
+ position: relative;
+ padding: 3.5% 6%;
+}
+
+.lq-left2-list li h3{
+ float: left;
+ color: #6c7781;
+ font-size: 16px;
+ font-style: italic;
+}
+.lq-left2-list li>em{
+ float: right;
+ color: #000;
+ font-size: 16px;
+}
+
+.lq-left2-list li h3 span{
+ background: #6c7781;
+ width: 4px;
+ height: 4px;
+ margin-right: 10px;
+ position: relative;
+ top: -2px;
+}
+
+.lq-left2-list li:nth-child(2n){
+ background: #f8f9fa;
+}
+
+.lq-center{
+ width: 77%;
+ position: relative;
+ padding-bottom: 50px;
+ overflow: hidden;
+}
+
+.lq-cTop{
+ margin-top: 10px;
+}
+
+.lq-cTop-1,
+.lq-cTop-2,
+.lq-cTop-3,
+.lq-cTop-3-2,
+.lq-cTop-4-2,
+.lq-cTop-4{
+ padding: 10px 0;
+ overflow: hidden;
+ height: 80px;
+ text-align: center;
+ color: #fff;
+}
+
+.lq-cTop-1{
+ background: url(../img/web/grain/lq-c-bg1.png) no-repeat;
+ background-size: 100% 100%;
+ width: 29%;
+}
+
+.lq-cTop-2{
+ background: url(../img/web/grain/lq-c-bg2.png) no-repeat;
+ background-size: 100% 100%;
+ width: 29%;
+}
+
+.lq-cTop-3{
+ background: url(../img/web/grain/lq-c-bg3.png) no-repeat;
+ background-size: 100% 100%;
+ width: 19.5%;
+}
+
+.lq-cTop-3-2{
+ background: url(../img/web/grain/lq-c-bg3.png) no-repeat;
+ background-size: 100% 100%;
+}
+
+.lq-cTop-4{
+ background: url(../img/web/grain/lq-c-bg4.png) no-repeat;
+ background-size: 100% 100%;
+ width: 19.5%;
+}
+
+.lq-cTop-4-2{
+ background: url(../img/web/grain/lq-c-bg4.png) no-repeat;
+ background-size: 100% 100%;
+}
+
+.ml4{
+ margin-left: 1%;
+}
+
+.lq-cTop-item{
+ background: url(../img/web/grain/lq-li-bg.png) right center no-repeat;
+}
+
+.lq-cTop-item:last-child{
+ background: none;
+}
+
+.lq-cTop-item p{
+ height: 40px;
+ line-height: 40px;
+ font-size: 16px;
+ margin-top: 5px;
+ overflow: hidden;
+}
+
+.lq-cTop-item h4{
+ font-size: 14px;
+ line-height: 20px;
+ margin-top: 5px;
+ height: 25px;
+ overflow: hidden;
+}
+
+.lq-cTop-item p span{
+ font-size: 28px;
+}
+
+.lq-wendu{
+ width: 90px;
+ height: 200px;
+ position: absolute;
+ bottom: 0;
+ z-index: 99;
+ left: 0;
+}
+
+.lq-wendu-color,
+.lq-wendu-color img{
+ width: 10px;
+ height: 200px;
+}
+
+.lq-wendu-num{
+ width: 75px;
+}
+
+.lq-wendu-num p{
+ line-height: 20px;
+ color: #000;
+ font-size: 14px;
+ margin-bottom: 70px;
+}
+
+.lq-cPic-box{
+ width: 80%;
+
+ margin: 3% auto 0 auto;
+ text-align: center;
+}
+
+.lq-cPic{
+ width: 100%;
+ margin: 0 auto;
+}
+
+.lq-right{
+ width: 90px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 99;
+ height: 100%;
+}
+
+.lq-r-fx{
+ width: 80px;
+ margin-left: 10px;
+ margin-top: 25px;
+ height: 80px;
+ background: url(../img/web/grain/img-dnxb.png) center no-repeat;
+ overflow: hidden;
+ position: relative;
+}
+
+.lq-r-fx p{
+ line-height: 15px;
+ font-size: 12px;
+ height: 15px;
+ overflow: hidden;
+ color: #000;
+ text-align: center;
+ margin-bottom: 17px;
+ width: 100%;
+}
+
+.lq-rMenu{
+ position: absolute;
+ bottom: 0;
+ width: 90px;
+ z-index: 99;
+}
+.lq-rMenu li{
+ width: 90px;
+ height: 90px;
+ margin-top: 10px;
+ text-align: center;
+ background: #fff;
+}
+.lq-rMenu li a{
+ display: block;
+ width: 100%;
+ height: 100%;
+}
+.lq-rMenu li a span{
+ width: 48px;
+ height: 48px;
+ margin-top: 5px;
+
+}
+
+.lq-rMenu li a p{
+ line-height: 20px;
+ color: #FFF;
+ font-size: 14px;
+ height: 20px;
+ overflow: hidden;
+ font-weight: bold;
+}
+
+.lq-rMenu li .lq-rMenu-icon1{
+ background: url(../img/web/grain/lq-r-icon1.png);
+}
+
+.lq-rMenu li .lq-rMenu-icon2{
+ background: url(../img/web/grain/lq-r-icon2.png);
+}
+.lq-rMenu li .lq-rMenu-icon3{
+ background: url(../img/web/grain/lq-r-icon3.png);
+}
+.lq-rMenu li .lq-rMenu-icon4{
+ background: url(../img/web/grain/lq-r-icon4.png);
+}
+.lq-rMenu li .lq-rMenu-icon5{
+ background: url(../img/web/grain/lq-r-icon5.png);
+}
+
+.lq-rMenu li .lq-rMenu-icon6{
+ background: url(../img/web/grain/lq-r-icon6.png);
+}
+
+.lq-a1{
+ background: url(../img/web/grain/lq-c-bg1.png) no-repeat;
+ background-size: 100% 100%;
+ border-radius: 6px;
+}
+
+.lq-a2{
+ background: url(../img/web/grain/lq-c-bg2.png) no-repeat;
+ background-size: 100% 100%;
+ border-radius: 6px;
+}
+
+.lq-a3{
+ background: url(../img/web/grain/lq-c-bg3.png) no-repeat;
+ background-size: 100% 100%;
+ border-radius: 6px;
+}
+
+.lq-a4{
+ background: url(../img/web/grain/lq-c-bg4.png) no-repeat;
+ background-size: 100% 100%;
+ border-radius: 6px;
+}
+.lq-a5{
+ background: url(../img/web/grain/lq-c-bg5.png) no-repeat;
+ background-size: 100% 100%;
+ border-radius: 6px;
+}
+
+.lq-a6{
+ background: url(../img/web/grain/lq-c-bg6.png) no-repeat;
+ background-size: 100% 100%;
+ border-radius: 6px;
+}
+
+.lq-rMenu li:hover,
+.lq-rMenu li.active{
+ background: #53adce;
+}
+
+
+.lq-rMenu li:hover a p,
+.lq-rMenu li.active a p{
+ color: #fff;
+}
+
+.lq-rMenu li:hover .lq-rMenu-icon1,
+.lq-rMenu li.active .lq-rMenu-icon1{
+ background: url(../img/web/grain/lq-r-icon1-h.png);
+}
+
+.lq-rMenu li:hover .lq-rMenu-icon2,
+.lq-rMenu li.active .lq-rMenu-icon2{
+ background: url(../img/web/grain/lq-r-icon2-h.png);
+}
+.lq-rMenu li:hover .lq-rMenu-icon3,
+.lq-rMenu li.active .lq-rMenu-icon3{
+ background: url(../img/web/grain/lq-r-icon3-h.png);
+}
+.lq-rMenu li:hover .lq-rMenu-icon4,
+.lq-rMenu li.active .lq-rMenu-icon4{
+ background: url(../img/web/grain/lq-r-icon4-h.png);
+}
+.lq-rMenu li:hover .lq-rMenu-icon5,
+.lq-rMenu li.active .lq-rMenu-icon5{
+ background: url(../img/web/grain/lq-r-icon5-h.png);
+}
+
+.lq-rMenu li:hover .lq-rMenu-icon6,
+.lq-rMenu li.active .lq-rMenu-icon6{
+ background: url(../img/web/grain/lq-r-icon6-h.png);
+}
+
+.lq-cLow{
+ background: #fff;
+ height: 30px;
+ padding: 8px 15px;
+ overflow: hidden;
+ width: 740px;
+ left: 140px;
+ bottom: 0px;
+ position: absolute;
+}
+
+.lq-cLow-left{
+ line-height: 24px;
+}
+
+.top5{
+ margin-top: 5px;
+}
+
+.lq-cLow-1{
+ width: 90px;
+ color: #000;
+ font-size: 14px;
+ border-right: 1px solid #eceef0;
+}
+
+.lq-cLow-1 span{
+ color: #37bd34;
+}
+
+.lq-cLow-2{
+ margin-left: 20px;
+}
+
+
+.lq-cLow-left .layui-form-item{
+ margin-bottom: 0;
+ clear: initial;
+}
+
+.lq-cLow-left .layui-form-label{
+ padding: 2px 0;
+ text-align: left;
+ width: auto;
+}
+
+.lq-cLow-left .layui-input-block{
+ min-height: 24px;
+ margin-left: 5px;
+ float: left;
+}
+
+
+.lq-cLow-left .layui-form-switch{
+ margin-top: 0;
+}
+
+.lq-cLow-left .layui-form-switch{
+ padding: 0;
+}
+
+.lq-cLow-left .layui-form-onswitch {
+ border-color: #53adce;
+ background-color: #53adce;
+}
+
+
+.lq-cLow-right .layui-btn{
+ height: 30px;
+ line-height: 30px;
+ /*color: #324251;*/
+ font-size: 14px;
+ /*padding: 0 8px;*/
+ /*background-color: #53adce;*/
+}
+
+.lq-cLow-right .layui-btn:hover{
+ border-color: #7b8e9f;
+ background: #7b8e9f;
+ color: #fff;
+}
+
+
+
+@media all and (max-width: 1650px) {
+ .lq-cPic-box {
+ margin: 5% auto 0 auto;
+ }
+ .lq-center{
+ padding-bottom: 80px;
+
+ }
+ .lq-left2-list li {
+ padding: 3% 6%;
+ }
+
+ .lq-cTop-item p span{
+ font-size: 24px;
+ }
+}
+
+
+
+
+
diff --git a/fzzy-igdss-web/src/main/resources/static/grain/grainPoint1.js b/fzzy-igdss-web/src/main/resources/static/grain/grainPoint1.js
new file mode 100644
index 0000000..2ec2d25
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/grain/grainPoint1.js
@@ -0,0 +1,1348 @@
+/**瀹氫箟鍙橀噺**/
+var listPoints = [];
+var listLays = [];
+var listRows = [];
+/**鍒�**/
+var cols = 9;
+/**灞�**/
+var lays = 4;
+/**琛�**/
+var rows = 5;
+
+var oneWidth;
+var oneHeight;
+//鐭╁舰楂�
+var back_height;
+//鐭╁舰闀�
+var back_width;
+//鏈�澶у
+var rect_max_width;
+var width;
+var height;
+var x;
+var y;
+var display_mode = "all";
+
+var edge_distance = 0;//璁剧疆杈硅窛
+
+var blockWidth = 30;//鑹插潡瀹藉害
+var blockHeight = 15;//鑹插潡楂樺害
+var curType = "z";//鏄剧ず绫诲瀷
+var curVal = 1; //鏄剧ず绫诲瀷鐨勫垪灞傝
+var shift;
+var out_window_top;
+var out_window_left;
+var out_window_width;
+
+//鍒濆鍖栧弬鏁帮紝濡傛灉琛屾暟澶т簬12鍒楋紝闅愯棌宸︿晶鍗$墖淇℃伅锛岃皟鏁村尯鍩熷搴�
+function initCanvasParam() {
+ if (cols > 12) {
+ $("#lq-left2").css("display", "none");
+ $("#lq-center").css("width", "100%");
+ $("#lq-center").css("overflow-x", "auto");
+ var wWidth = window.innerWidth;
+ var wHeight = window.innerHeight;
+ $("#lq-center").css("height", wHeight - 180);
+ if (wWidth < 1600) {
+ $("#canvas").attr("width", 1600);
+ } else {
+ $("#canvas").attr("width", wWidth - 100);
+ }
+ } else {
+ $("#lq-left2").css("display", "block");
+ $("#lq-center").css("width", "80%");
+ $("#canvas").attr("width", "1200");
+ }
+
+ oneWidth = 9 * blockWidth * getRatio();//涓�涓垎鍓插揩鐨勫搴�
+ oneHeight = 6 * blockHeight * getRatio();//涓�涓垎鍓插揩鐨勯珮搴�
+
+ back_height = oneHeight * 2.1 * (2 - rows / 30);
+ back_width = 3 * blockWidth * cols * (2 - cols / 30) / 2;
+ rect_max_width = back_width + 0.5 * oneWidth;
+ width = oneWidth * 4;
+ height = oneHeight * 5;
+ x = back_width / 2 - rect_max_width / 2;
+ y = back_width / 2 - oneHeight * 2.8;
+
+ var canvasParent = $("#canvas_parent");
+ out_window_top = canvasParent.offset().top;
+ out_window_left = canvasParent.offset().left;
+ out_window_width = canvasParent.width();
+};
+
+initCanvasParam();
+
+//鑹插潡棰滆壊甯搁噺
+var color = null;
+var R = 0;
+var G = 0;
+var B = 0;
+
+//琛屻�佸垪銆佸眰瑕佹樉绀虹偣鐨勯泦鍚�
+var x_points = [];
+var y_points = [];
+var z_points = [];
+
+//浜嬩欢(鏄剧ず鏂瑰紡鍒囨崲銆佸脊鍑虹偣鐨勪俊鎭�)鍒ゅ畾鍖哄煙瀵硅薄鐨勯泦鍚�
+var arr = [];
+
+//璁剧疆瀹氭椂鍣�
+var timer;
+var t = -2;
+
+function sleep() {
+ if (timer) {
+ clearInterval(timer);
+ }
+ t++;
+ if (t >= 0) {
+ flash();
+ }
+ timer = setTimeout("sleep()", 400);
+}
+
+//瀹氭椂瑙﹀彂鍑芥暟--鍒囨崲鏋佸�肩偣棰滆壊
+function flash() {
+ var canvas = document.getElementById('canvas');
+ var ctx = canvas.getContext('2d');
+ canvas.height = canvas.height;
+ ctx.strokeStyle = "black";
+ ctx.lineWidth = 1;
+ arr = [];
+ x_points = [];
+ y_points = [];
+ z_points = [];
+
+ //娓呯┖鍥惧舰鐢诲竷
+ canvas.height = canvas.height;
+ //閲嶆柊缁樺埗鍥惧舰鐢诲竷
+
+ createBack(ctx);
+ createLeft(ctx);
+ createBottom(ctx, back_height);
+
+ gainData(listPoints, curType, curVal);
+
+ split(ctx);
+
+ entityBlock(ctx, curType, curVal);
+
+ title(ctx);
+ border(ctx)
+}
+
+//缁樺埗涓荤▼搴�
+function draw() {
+ var canvas = document.getElementById('canvas');
+ var ctx = canvas.getContext('2d');
+
+ shift = out_window_left;
+ if ((out_window_width - canvas.width) > 0) {
+ shift = out_window_left + (out_window_width - canvas.width) / 2;
+ }
+ edge_distance = (canvas.width - (oneWidth / 2 + back_width + 78)) / 2 + 35;//璁剧疆杈硅窛
+
+ ctx.strokeStyle = "black";
+ ctx.lineWidth = 1;
+
+ createBack(ctx);
+ createLeft(ctx);
+ createBottom(ctx, back_height);
+ gainData(listPoints, curType, curVal);
+ split(ctx);
+ entityBlock(ctx, curType, curVal);
+
+ title(ctx);
+ showIndex(canvas, ctx);
+ border(ctx);
+
+};
+
+//缁樺埗鐭╁舰澶栬竟妗�
+function border(ctx) {
+ ctx.beginPath();
+ ctx.lineWidth = 0.5;
+ ctx.strokeStyle = 'black';
+ ctx.moveTo(oneWidth / 2 + back_width + edge_distance, 0 * oneHeight);
+ ctx.lineTo(back_width + edge_distance, 2 * oneHeight);
+ ctx.lineTo(edge_distance, 2 * oneHeight);
+ ctx.moveTo(back_width + edge_distance, 2 * oneHeight + 0.5 * back_height);
+ ctx.lineTo(back_width + edge_distance, 2 * oneHeight);
+ ctx.stroke();
+ ctx.closePath();
+}
+
+//鍒堕�犺櫄褰�
+function split(context) {
+ //璁剧疆鍒楀垏鍒嗚櫄褰�
+ for (i = 0; i <= cols; i++) {
+ var start_x = back_width / cols * i + edge_distance;
+ var start_y = 2 * oneHeight;
+ //璁剧疆閫忔槑搴�
+ context.fillStyle = "rgba(255,255,255,0.1)";
+ context.beginPath();
+ context.moveTo(start_x, start_y);
+ context.lineTo(start_x, start_y + 0.5 * back_height);
+ context.lineTo(start_x + oneWidth / 2, 0.5 * back_height);
+ context.lineTo(start_x + oneWidth / 2, 0);
+ context.lineTo(start_x, start_y);
+ context.fill();
+ context.closePath();
+ }
+
+ //璁剧疆琛屽垏鍒嗚櫄褰�
+ for (i = 0; i <= rows; i++) {
+
+ var start_x = oneWidth / 2 / rows * i + edge_distance;
+ var start_y = (2 * oneHeight) / rows * (rows - i);
+ //璁剧疆閫忔槑搴�
+ context.fillStyle = "rgba(255,255,255,0.1)";
+ // context.fillStyle = "rgba(150,150,150,1)";
+ context.beginPath();
+ context.moveTo(start_x, start_y);
+ context.lineTo(start_x + back_width, start_y);
+ context.lineTo(start_x + back_width, start_y + 0.5 * back_height);
+ context.lineTo(start_x, start_y + 0.5 * back_height);
+ context.lineTo(start_x, start_y);
+ context.fill();
+ context.closePath();
+ }
+
+ //璁剧疆灞傚垏鍒嗚櫄褰�
+ for (i = 0; i <= lays; i++) {
+ var start_x = oneWidth / 2 + edge_distance;
+ var y = (lays - i) * 0.5 * back_height / lays;
+ //璁剧疆閫忔槑搴�
+ context.fillStyle = "rgba(255,255,255,0.2)";
+ context.beginPath();
+ context.moveTo(start_x, y);
+ context.lineTo(start_x + back_width, y);
+ context.lineTo(back_width + edge_distance, 2 * oneHeight + y);
+ context.lineTo(edge_distance, 2 * oneHeight + y);
+ context.lineTo(start_x, y);
+ context.fill();
+ context.closePath();
+ }
+
+}
+
+function textbox(context, x, y, val, obj) {
+ if (val === null || val == -100 || val == -101) {
+ //璁剧疆绌哄�兼椂濉厖棰滆壊
+ context.fillStyle = "rgba(125,146,159,1)";
+ } else {
+ //璁剧疆鏈夊�兼椂濉厖棰滆壊
+ context.fillStyle = "rgba(50,66,81,1)";
+ //灏嗙偣鍑讳簨浠惰Е鍙戝尯鍩熷璞″啓鍏rr闆嗗悎
+ // alert(pointX)
+ arr.push({
+ 'x': x + shift - 10,
+ 'y': y + out_window_top - 10,
+ 'width': 40,
+ 'height': 25,
+ 'type': 'val',
+ 'pointX': obj['x'] + 1,
+ 'pointY': obj['y'] + 1,
+ 'pointZ': obj['z'] + 1,
+ 'val': val,
+ })
+ }
+ context.beginPath();
+ context.lineWidth = 1;
+ context.moveTo(x, y + 12);
+ context.lineTo(x + 5, y + 7);
+ context.arcTo(x + 15, y + 7, x + 15, y + 2, 5);
+ context.lineTo(x + 15, y - 3);
+ context.arcTo(x + 15, y - 8, x + 5, y - 8, 5);
+ context.lineTo(x - 10, y - 8);
+ context.arcTo(x - 15, y - 8, x - 15, y - 3, 5);
+ context.lineTo(x - 15, y + 2);
+ context.arcTo(x - 15, y + 7, x - 10, y + 7, 5);
+ context.lineTo(x - 5, y + 7)
+ context.lineTo(x, y + 12)
+ context.stroke();
+ context.fill();
+ context.textAlign = 'center';
+ context.fillStyle = "rgba(226,228,229,1)";
+
+ if (val === null || val <= -100) {
+ context.fillText("澶囩敤", x, y + 2);
+ } else if (val == -101) {
+ context.fillText("鏁呴殰", x, y + 2);
+ } else {
+ context.fillText(val, x, y + 2);
+ }
+ context.textAlign = 'left';
+ context.closePath();
+}
+
+//鏁版嵁绛涢��
+function gainData(listPoints, curType, curVal) {
+ z_peak = [0, lays - 1];
+ x_peak = [0, cols - 1];
+ y_peak = [0, rows - 1];
+
+ //褰撳眰鏄剧ず鏃讹紝鎶婅鏄剧ず鐨勭偣娣诲姞鍒皕_points
+ if (curType === 'z') {
+ for (var i = 0; i < listPoints.length; i++) {
+ //璁剧疆鍏ㄦ樉绀�
+ if (display_mode === "all") {
+ if (listPoints[i]['z'] + 1 === curVal) {
+ z_points.push(listPoints[i])
+ }
+ // 璁剧疆澶栭儴鏄剧ず
+ } else if (display_mode === "outside") {
+ if ((listPoints[i]['z'] + 1 === curVal)
+ && ((x_peak.includes(listPoints[i]['x'])) || (y_peak
+ .includes(listPoints[i]['y'])))) {
+ z_points.push(listPoints[i]);
+ }
+ //璁剧疆鍐呴儴鏄剧ず
+ } else {
+ if ((listPoints[i]['z'] + 1 === curVal)
+ && (!(x_peak.includes(listPoints[i]['x'])) && !(y_peak
+ .includes(listPoints[i]['y'])))) {
+ z_points.push(listPoints[i]);
+ }
+ }
+ }
+ }
+
+ //褰撳垪鏄剧ず鏃讹紝鎶婅鏄剧ず鐨勭偣娣诲姞鍒皒_points aaaa
+ if (curType === 'x') {
+ for (i = 0; i < listPoints.length; i++) {
+ //璁剧疆鍏ㄦ樉绀�
+ if (display_mode === "all") {
+ if (listPoints[i]['x'] === (cols - curVal)) {
+ x_points.push(listPoints[i])
+ }
+ } else if (display_mode === "outside") {// 璁剧疆澶栭儴鏄剧ず
+ if ((listPoints[i]['x'] === (cols - curVal))
+ && ((z_peak.includes(listPoints[i]['z'])) || (y_peak
+ .includes(listPoints[i]['y'])))) {
+ x_points.push(listPoints[i]);
+ }
+
+ } else {//璁剧疆鍐呴儴鏄剧ず
+ if ((listPoints[i]['x'] === (cols - curVal))
+ && (!(z_peak.includes(listPoints[i]['z'])) && !(y_peak
+ .includes(listPoints[i]['y'])))) {
+ x_points.push(listPoints[i]);
+ }
+ }
+ }
+ }
+
+ //褰撹鏄剧ず鏃讹紝鎶婅鏄剧ず鐨勭偣娣诲姞鍒皔_points
+ if (curType === 'y') {
+ for (i = 0; i < listPoints.length; i++) {
+
+ //璁剧疆鍏ㄦ樉绀�
+ if (display_mode === "all") {
+ if (listPoints[i]['y'] + 1 === curVal) {
+ y_points.push(listPoints[i])
+ }
+ // 璁剧疆澶栭儴鏄剧ず
+ } else if (display_mode === "outside") {
+ if ((listPoints[i]['y'] + 1 === curVal)
+ && ((z_peak.includes(listPoints[i]['z'])) || (x_peak
+ .includes(listPoints[i]['x'])))) {
+ y_points.push(listPoints[i]);
+ }
+ //璁剧疆鍐呴儴鏄剧ず
+ } else {
+ if ((listPoints[i]['y'] + 1 === curVal)
+ && (!(z_peak.includes(listPoints[i]['z'])) && !(x_peak
+ .includes(listPoints[i]['x'])))) {
+ y_points.push(listPoints[i]);
+ }
+ }
+ }
+ }
+}
+
+//鐢熸垚鑹插潡
+function entityBlock(context, curType, curVal) {
+
+ //瀹氫箟琛屽眰鍒楅棿闅�
+ var y_interval = 2 * oneHeight / rows;
+ var x_interval = back_width / cols;
+ var z_interval = 0.5 * back_height / lays;
+
+ //鏄剧ず鏂瑰紡涓哄眰
+ if (curType === 'z') {
+ //鐢熸垚琛�
+ for (i = 1; i <= rows; i++) {
+ var start_x = (oneWidth / 2 / rows) * (i - 1) + edge_distance;
+ var start_y = (2 * oneHeight / rows) * (rows - i + 1) + curVal
+ * z_interval;
+
+ //鐢熸垚鍒�
+ for (j = 1; j <= cols; j++) {
+
+ //澶栭儴鏄剧ず
+ if ((display_mode === "outside") && !y_peak.includes(i - 1)
+ && !x_peak.includes(j - 1)) {
+ start_x += x_interval;
+ continue;
+ //鍐呴儴鏄剧ず
+ } else if ((display_mode === "inner")
+ && (y_peak.includes(i - 1) || x_peak.includes(j - 1))) {
+ start_x += x_interval;
+ continue;
+ }
+
+ //澹版槑鑹插潡鏁板��
+ var val = null;
+ //澹版槑鐐圭殑搴忓垪鍊�
+ var index = null;
+
+ //寰幆閬嶅巻鎵惧埌瀵瑰簲鑹插潡
+ for (k = 0; k < z_points.length; k++) {
+ if ((z_points[k]['y'] + 1 === i)
+ && (z_points[k]['x'] + 1 === j)) {
+ val = z_points[k]['temp']
+ index = k;
+ break;
+ }
+ }
+
+ //缁樺埗鑹插潡
+ context.beginPath();
+ context.lineWidth = 1;
+ context.strokeStyle = 'rgba(224,235,242,1)'
+ context.moveTo(start_x, start_y);
+ context.lineTo(start_x + x_interval, start_y);
+ context.lineTo(start_x + x_interval + (oneWidth / 2 / rows),
+ start_y - y_interval);
+ context.lineTo(start_x + (oneWidth / 2 / rows), start_y
+ - y_interval);
+ context.lineTo(start_x, start_y);
+
+ //璁剧疆瀵瑰簲棰滆壊
+ if (val === null || val == -100 || val == -101) {
+ context.fillStyle = "rgba(155,171,182,1)";
+ // val = "澶囩敤";
+ } else {
+ if (t % 2 === 1) {
+ if (listLays[curVal - 1]['tempMax'] && val == listLays[curVal - 1]['tempMax']) { //姝ょ偣涓烘渶楂樻俯
+ context.fillStyle = "rgba(229,29,29,1)";
+ } else if (listLays[curVal - 1]['tempMin'] && val == listLays[curVal - 1]['tempMin']) { //姝ょ偣涓烘渶浣庢俯
+ context.fillStyle = "rgba(0,255,28,1)";
+ } else {
+ context.fillStyle = getColor(val);
+ }
+ } else {
+ context.fillStyle = getColor(val);
+ }
+ }
+ context.fill();
+ context.stroke();
+ context.closePath();
+
+ //缁樺埗鐐规枃鏈
+ textbox(context, start_x + 0.5 * x_interval + 0.5
+ * (oneWidth / 2 / rows), start_y - 0.5 * y_interval,
+ val, z_points[index]);
+ //淇敼鑹插潡璧峰鍊�
+ start_x += x_interval;
+ }
+ }
+ //鏄剧ず鏂瑰紡涓鸿
+ } else if (curType === 'y') {
+ //鐢熸垚灞�
+ for (var i = 1; i <= lays; i++) {
+ var start_x = (oneWidth / 2 / rows) * (curVal - 1) + edge_distance;
+ var start_y = (2 * oneHeight / rows) * (rows - curVal + 1) + i
+ * z_interval;
+
+ //鐢熸垚鍒�
+ for (var j = 1; j <= cols; j++) {
+
+ //澶栭儴鏄剧ず
+ if ((display_mode === "outside") && !z_peak.includes(i - 1)
+ && !x_peak.includes(j - 1)) {
+ start_x += x_interval;
+ continue;
+ //鍐呴儴鏄剧ず
+ } else if ((display_mode === "inner")
+ && (z_peak.includes(i - 1) || x_peak.includes(j - 1))) {
+ start_x += x_interval;
+ continue;
+ }
+
+ //澹版槑鑹插潡鏁板��
+ var val = null;
+ //澹版槑鐐圭殑搴忓垪鍊�
+ var index = null;
+
+ //寰幆閬嶅巻鎵惧埌瀵瑰簲鑹插潡
+ for (k = 0; k < y_points.length; k++) {
+ if ((y_points[k]['z'] + 1 === i)
+ && (y_points[k]['x'] + 1 === j)) {
+ val = y_points[k]['temp']
+ index = k;
+ break;
+ }
+ }
+
+ ////缁樺埗涓�涓壊鍧�,鏄剧ず鏂瑰紡涓烘瑙嗗浘
+ context.fillStyle = "rgba(155,171,182,1)";
+ context.beginPath();
+ context.lineWidth = 1.5;
+ context.strokeStyle = 'rgba(224,235,242,1)'
+ context.moveTo(start_x, start_y);
+ context.lineTo(start_x + x_interval, start_y);
+ context.lineTo(start_x + x_interval, start_y - z_interval);
+ context.lineTo(start_x, start_y - z_interval);
+ context.lineTo(start_x, start_y);
+
+ //璁剧疆瀵瑰簲棰滆壊
+ if (val === null || val == -100) {
+ context.fillStyle = "rgba(155,171,182,1)";
+ } else {
+ if (t % 2 === 1) {
+ if (val == listRows[curVal - 1]['tempMax']) { //姝ょ偣涓烘渶楂樻俯
+ context.fillStyle = "rgba(229,29,29,1)";
+ } else if (val == listRows[curVal - 1]['tempMin']) { //姝ょ偣涓烘渶浣庢俯
+ context.fillStyle = "rgba(0,255,28,1)";
+ } else {
+ context.fillStyle = getColor(val);
+ }
+ } else {
+ context.fillStyle = getColor(val);
+
+ }
+ }
+
+ context.fill();
+ context.stroke();
+ context.closePath();
+
+ //缁樺埗鐐规枃鏈
+ textbox(context, start_x + 0.4 * x_interval, start_y - 0.5
+ * z_interval, val, y_points[index]);
+
+ //淇敼鑹插潡璧峰鍊�
+ start_x += x_interval;
+ }
+ }
+
+ //鏄剧ず鏂瑰紡涓哄垪
+ } else if (curType === 'x') {
+
+ //鐢熸垚涓�灞�
+ for (var i = lays; i > 0; i--) {
+ var start_x = (cols - curVal) * x_interval + edge_distance;
+ var start_y = (2 * oneHeight / rows) * (rows) + i * z_interval;
+
+ //鐢熸垚涓�琛�
+ for (var j = 1; j <= rows; j++) {
+
+ //澶栭儴鏄剧ず
+ if ((display_mode === "outside") && !z_peak.includes(i - 1)
+ && !y_peak.includes(j - 1)) {
+ start_x += (oneWidth / 2 / rows);
+ start_y -= (2 * oneHeight / rows);
+ continue;
+ //鍐呴儴鏄剧ず
+ } else if ((display_mode === "inner")
+ && (z_peak.includes(i - 1) || y_peak.includes(j - 1))) {
+ start_x += (oneWidth / 2 / rows);
+ start_y -= (2 * oneHeight / rows);
+ continue;
+ }
+
+ //澹版槑鑹插潡鏁板��
+ var val = null;
+ //澹版槑鐐圭殑搴忓垪鍊�
+ var index = null;
+
+ //寰幆閬嶅巻鎵惧埌瀵瑰簲鑹插潡
+ for (var k = 0; k < x_points.length; k++) {
+ if ((x_points[k]['y'] + 1 === j)
+ && (x_points[k]['z'] === (i - 1))) {
+ val = x_points[k]['temp'];
+ index = k;
+ break;
+ }
+ }
+ ;
+
+ //缁樺埗涓�涓壊鍧�,鏄剧ず鏂瑰紡涓轰晶瑙嗗浘
+ context.fillStyle = "rgba(155,171,182,1)";
+ context.beginPath();
+ context.lineWidth = 1.5;
+ context.strokeStyle = 'rgba(224,235,242,1)'
+ context.moveTo(start_x, start_y);
+ context.lineTo(start_x + (oneWidth / 2 / rows), start_y
+ - y_interval);
+ context.lineTo(start_x + (oneWidth / 2 / rows), start_y
+ - y_interval - z_interval);
+ context.lineTo(start_x, start_y - z_interval);
+ context.lineTo(start_x, start_y);
+
+ //璁剧疆瀵瑰簲棰滆壊
+ if (val === null || val == -100) {
+ context.fillStyle = "rgba(155,171,182,1)";
+ } else {
+ context.fillStyle = getColor(val);
+ }
+
+ context.fill();
+ context.stroke();
+ context.closePath();
+
+ //缁樺埗鐐规枃鏈
+ textbox(context, start_x + 0.5 * (oneWidth / 2 / rows), start_y
+ - 0.5 * y_interval - 0.5 * z_interval, val,
+ x_points[index]);
+
+ //淇敼鑹插潡璧峰鍊�
+ start_x += (oneWidth / 2 / rows);
+ start_y -= (2 * oneHeight / rows);
+ }
+ }
+ }
+}
+
+//缁戝畾瑙﹀彂鐨勪簨浠�
+function draws(x, y, canvas, ctx) {
+ //鍒涘缓鐐瑰嚮浜嬩欢鐨勭敾甯冿紙鐢诲竷2锛夐渶瑕佽�冭檻鐖舵鐨勪綅缃�
+ ctx.rect(0, 0, canvas.width, canvas.height);
+ //缁檃rr闆嗗悎涓殑姣忎竴涓璞℃坊鍔犵偣鍑讳簨浠�
+ arr.forEach(function (v, i) {
+ ctx.beginPath();
+ //缁樺埗姣忎竴涓璞$殑鍖哄煙
+ ctx.rect(v.x, v.y, v.width, v.height);
+ ctx.closePath();
+
+ //鍒ゆ柇鐐瑰嚮鐐规槸鍚﹀湪鍖哄煙涓�
+ if (ctx.isPointInPath(x, y)) {
+ //鍒ゆ柇鐐瑰嚮鍖哄煙绫诲瀷
+ if (v.type === 'val') {
+ //绫诲瀷涓簐al锛屽垯寮瑰嚭鐐逛俊鎭�
+ // showData = "x=" + v.pointX + "\ny=" + v.pointY + "\nz=" + v.pointZ;
+ // alert(showData)
+ layer.msg("灞�=" + (v.pointZ) + "\n琛�=" + (v.pointY) + "\n鍒�=" + (cols - v.pointX + 1) + "\n娓╁害="
+ + v.val);
+ } else { //鍏朵粬绫诲瀷鍒欏垏鎹㈡樉绀鸿壊鍧�
+ //娓呯┖鏁版嵁
+ curType = v['type'];
+ curVal = v['num'];
+ if (curType === 'x') {
+ curVal = cols - v['num'] + 1;
+ }
+ arr = [];
+ x_points = [];
+ y_points = [];
+ z_points = [];
+
+ //娓呯┖鍥惧舰鐢诲竷
+ canvas.height = canvas.height;
+ //閲嶆柊缁樺埗
+ createBack(ctx);
+ createLeft(ctx);
+ createBottom(ctx, back_height);
+ gainData(listPoints, curType, curVal);
+ split(ctx);
+ entityBlock(ctx, curType, curVal);
+ title(ctx);
+ border(ctx);
+
+ //鏇存敼Btn鍚嶇О锛屽悓鏃舵洿鏂板眰琛屽垪鐨勯�夋嫨
+ updateGrainBtn(true);
+
+ //鍒囨崲涓哄眰鏄剧ず
+ if (v['type'] === 'z') {
+ //璧峰鐐�
+ start_x = v['start_x'];
+ start_y = v['start_y'];
+
+ //璁捐鐐瑰嚮鏃剁殑娓愬彉
+ var grad = ctx.createLinearGradient(start_x, start_y,
+ start_x + 120, start_y);
+ grad.addColorStop(0, "#2f2fff");
+ grad.addColorStop(0.3, "#5858ff");
+ grad.addColorStop(0.7, "#b3b3ff");
+ grad.addColorStop(1, "#ffffff");
+ ctx.fillStyle = grad;
+
+ //寮�濮嬬粯鍒�
+ ctx.beginPath();
+ ctx.lineWidth = 5;
+ ctx.strokeStyle = 'rgba(214,223,232,1)';
+ ctx.moveTo(start_x, start_y);
+ ctx.lineTo(start_x + 75, start_y);
+ ctx.lineTo(start_x + 75, start_y - 0.5
+ * (back_height / lays));
+ ctx.lineTo(start_x, start_y - 0.5 * (back_height / lays));
+
+ ctx.lineTo(start_x, start_y);
+ ctx.stroke();
+ ctx.fill();
+
+ //鏍囬鏍忔枃鏈�
+ ctx.fillStyle = 'rgba(255,14,0,1)';
+ val = "绗�" + v['num'] + "灞�";
+ ctx.font = "15px Arial";
+ ctx.fillText(val, start_x + 10, start_y + 5 - 0.5
+ * (back_height / lays) / 2);
+
+ //鍒囨崲涓鸿鏄剧ず
+ } else if (v['type'] === 'y') {
+ //璧峰鐐�
+ start_x = v['start_x'];
+ start_y = v['start_y'];
+
+ //璁捐鐐瑰嚮鏃剁殑娓愬彉
+ var grad = ctx.createLinearGradient(start_x, start_y,
+ start_x + 120, start_y);
+ grad.addColorStop(0, "#2f2fff");
+ grad.addColorStop(0.3, "#5858ff");
+ grad.addColorStop(0.7, "#b3b3ff");
+ grad.addColorStop(1, "#ffffff");
+ ctx.fillStyle = grad;
+
+ //寮�濮嬬粯鍒�
+ ctx.beginPath();
+ ctx.lineWidth = 5;
+ ctx.strokeStyle = 'rgba(214,223,232,1)';
+ ctx.moveTo(start_x, start_y);
+ ctx.lineTo(start_x + 75, start_y);
+ ctx.lineTo(start_x + 75 + (oneWidth / 2 / rows), start_y
+ - (2 * oneHeight / rows));
+ ctx.lineTo(start_x + (oneWidth / 2 / rows), start_y
+ - (2 * oneHeight / rows));
+ ctx.lineTo(start_x, start_y);
+ ctx.stroke();
+ ctx.fill();
+
+ //鏍囬鏍忔枃鏈�
+ ctx.fillStyle = 'rgba(255,14,0,1)';
+ val = "绗�" + v['num'] + "琛�";
+
+ if (rows > 10) {
+ ctx.font = "12px Arial";
+ ctx.fillText(val, start_x + 25, start_y - 5);
+ } else {
+ ctx.font = "15px Arial";
+ ctx.fillText(val, start_x + 25, start_y - 9);
+ }
+
+ //鍒囨崲涓哄垪鏄剧ず
+ } else if (v['type'] === 'x') {
+ //璧峰鐐�
+ start_x = v['start_x'];
+ start_y = v['start_y'];
+
+ //璁捐鐐瑰嚮鏃剁殑娓愬彉
+ var grad = ctx.createLinearGradient(start_x, start_y,
+ start_x + 120, start_y);
+ grad.addColorStop(0, "#2f2fff");
+ grad.addColorStop(0.3, "#5858ff");
+ grad.addColorStop(0.7, "#b3b3ff");
+ grad.addColorStop(1, "#ffffff");
+ ctx.fillStyle = grad;
+
+ //寮�濮嬬粯鍒�
+ ctx.beginPath();
+ ctx.lineWidth = 5;
+ ctx.strokeStyle = 'rgba(214,223,232,1)';
+ ctx.moveTo(start_x, start_y);
+ ctx.lineTo(start_x - (oneWidth / 2 / rows), start_y
+ + (2 * oneHeight / rows));
+ ctx.lineTo(start_x + (back_width / cols)
+ - (oneWidth / 2 / rows), start_y
+ + (2 * oneHeight / rows));
+ ctx.lineTo(start_x + (back_width / cols), start_y);
+ ctx.lineTo(start_x, start_y);
+ ctx.stroke();
+ ctx.fill();
+
+ //鏍囬鏍忔枃鏈�
+ ctx.fillStyle = 'rgba(255,14,0,1)';
+ val = "绗�" + (cols - v['num'] + 1) + "鍒�";
+ ctx.font = "15px Arial";
+ ctx.fillText(val, start_x - 0.5 * (oneWidth / 2 / rows),
+ start_y + 0.7 * (2 * oneHeight / rows));
+ }
+ }
+ }
+ });
+}
+
+//缁戝畾浜嬩欢
+function showIndex(canvas, ctx) {
+
+ //鏁翠釜鐢诲竷瀵硅薄娣诲姞鐐瑰嚮浜嬩欢
+ canvas.addEventListener('click', function location(e) {
+ x = e.clientX;
+ y = e.clientY;
+ draws(x, y, canvas, ctx);
+ }, false);
+}
+
+//琛屻�佸垪銆佸眰鏍囬鏍�
+function title(context) {
+
+ //灞傛爣棰樻爮
+ for (i = 1; i <= lays; i++) {
+ //璁剧疆璧峰鐐�
+ start_x = (oneWidth / 2) + back_width + edge_distance + 3;
+ start_y = 0.5 * (back_height / lays) * i;
+
+ //璁剧疆涓洪�夋嫨鏃剁殑娓愬彉濉厖
+ if ((curType === "z") && (curVal === i)) {
+ var grad = context.createLinearGradient(start_x, start_y,
+ start_x + 120, start_y);
+ grad.addColorStop(0, "#2f2fff");
+ grad.addColorStop(0.3, "#5858ff");
+ grad.addColorStop(0.7, "#b3b3ff");
+ grad.addColorStop(1, "#ffffff");
+ //璁剧疆涓烘湭閫夋嫨鏃剁殑娓愬彉濉厖
+ } else {
+ var grad = context.createLinearGradient(start_x, start_y,
+ start_x + 200, start_y);
+ grad.addColorStop(0, "#ffffff");
+ grad.addColorStop(0.8, "#a2baef");
+ }
+ context.fillStyle = grad;
+
+ //缁樺埗
+ context.beginPath();
+ context.lineWidth = 5;
+ context.strokeStyle = 'rgba(214,223,232,1)';
+ context.moveTo(start_x, start_y);
+ context.lineTo(start_x + 75, start_y);
+ context.lineTo(start_x + 75, start_y - 0.5 * (back_height / lays));
+ context.lineTo(start_x, start_y - 0.5 * (back_height / lays));
+ context.lineTo(start_x, start_y);
+ context.stroke();
+ context.fill();
+
+ //璁剧疆涓洪�夋嫨鏃剁殑瀛椾綋濉厖
+ if ((curType === "z") && (curVal === i)) {
+ context.fillStyle = 'rgba(255,14,0,1)';
+ //璁剧疆涓烘湭閫夋嫨鏃剁殑瀛椾綋濉厖
+ } else {
+ context.fillStyle = 'rgba(30,30,30,1)';
+ }
+
+ //璁剧疆鏍囬鏂囨湰
+ val = "绗�" + i + "灞�";
+ context.font = "15px Arial";
+ context.fillText(val, start_x + 10, start_y + 5 - 0.5
+ * (back_height / lays) / 2);
+
+ //灏嗘樉绀烘柟寮忓垏鎹簨浠跺姞鍏rr鏁扮粍
+ arr.push({
+ 'x': start_x + 10 + shift,
+ 'y': start_y - 0.5 * (back_height / lays) / 2 - 22
+ + out_window_top,
+ 'width': 60,
+ 'height': 40,
+ 'type': 'z',
+ 'num': i,
+ 'start_x': start_x,
+ 'start_y': start_y
+ })
+ context.closePath();
+ }
+
+ //琛屾爣棰樻爮
+ for (i = 1; i <= rows; i++) {
+ //璁剧疆璧峰鐐�
+ start_x = back_width + (oneWidth / 2 / rows) * (i - 1) + edge_distance;
+ start_y = (2 * oneHeight + 0.5 * back_height) - (2 * oneHeight / rows)
+ * (i - 1) + 5;
+
+ //璁剧疆涓洪�夋嫨鏃剁殑娓愬彉濉厖
+ if ((curType === "y") && (curVal === i)) {
+ var grad = context.createLinearGradient(start_x, start_y,
+ start_x + 120, start_y);
+ grad.addColorStop(0, "#2f2fff");
+ grad.addColorStop(0.3, "#5858ff");
+ grad.addColorStop(0.7, "#b3b3ff");
+ grad.addColorStop(1, "#ffffff");
+ //璁剧疆涓烘湭閫夋嫨鏃剁殑娓愬彉濉厖
+ } else {
+ var grad = context.createLinearGradient(start_x, start_y,
+ start_x + 200, start_y);
+ grad.addColorStop(0, "#ffffff");
+ grad.addColorStop(0.8, "#a2baef");
+ }
+ context.fillStyle = grad;
+
+ //缁樺埗
+ context.beginPath();
+ context.lineWidth = 5;
+ context.strokeStyle = 'rgba(215,224,230,1)';
+ context.moveTo(start_x, start_y);
+ context.lineTo(start_x + 75, start_y);
+ context.lineTo(start_x + 75 + (oneWidth / 2 / rows), start_y
+ - (2 * oneHeight / rows));
+ context.lineTo(start_x + (oneWidth / 2 / rows), start_y
+ - (2 * oneHeight / rows));
+ context.lineTo(start_x, start_y);
+ context.stroke();
+ context.fill();
+
+ //璁剧疆涓洪�夋嫨鏃剁殑瀛椾綋濉厖
+ if ((curType === "y") && (curVal === i)) {
+ context.fillStyle = 'rgba(255,14,0,1)';
+ //璁剧疆涓烘湭閫夋嫨鏃剁殑瀛椾綋濉厖
+ } else {
+ context.fillStyle = 'rgba(30,30,30,1)';
+ }
+
+ //璁剧疆鏍囬鏂囨湰
+ val = "绗�" + i + "琛�";
+ if (rows > 10) {
+ context.font = "12px Arial";
+ context.fillText(val, start_x + 25, start_y - 5);
+ } else {
+ context.font = "15px Arial";
+ context.fillText(val, start_x + 25, start_y - 9);
+ }
+
+ //灏嗘樉绀烘柟寮忓垏鎹簨浠跺姞鍏rr鏁扮粍
+ arr.push({
+ 'x': start_x + blockWidth + shift,
+ 'y': start_y - blockHeight + out_window_top,
+ 'width': 50,
+ 'height': 20,
+ 'type': 'y',
+ 'num': i,
+ 'start_x': start_x,
+ 'start_y': start_y
+ })
+ context.closePath();
+ }
+
+ //鍒楁爣棰樻爮
+ for (i = 1; i <= cols; i++) {
+ //璁剧疆璧峰鐐�
+ start_x = (back_width / cols) * (i - 1) + edge_distance;
+ start_y = (2 * oneHeight + 0.5 * back_height) + 5;
+
+ //璁剧疆涓洪�夋嫨鏃剁殑娓愬彉濉厖
+ if ((curType === "x") && (curVal === (cols - i + 1))) {
+ var grad = context.createLinearGradient(start_x, start_y,
+ start_x + 120, start_y);
+ grad.addColorStop(0, "#2f2fff");
+ grad.addColorStop(0.3, "#5858ff");
+ grad.addColorStop(0.7, "#b3b3ff");
+ grad.addColorStop(1, "#ffffff");
+ context.strokeStyle = 'rgba(100,100,255,1)';
+ //璁剧疆涓烘湭閫夋嫨鏃剁殑娓愬彉濉厖
+ } else {
+ context.strokeStyle = 'rgba(215,224,230,1)';
+ var grad = context.createLinearGradient(start_x, start_y,
+ start_x + 120, start_y);
+ grad.addColorStop(0, "#ffffff");
+ grad.addColorStop(0.8, "#a2baef");
+ }
+ context.fillStyle = grad;
+
+ //缁樺埗
+ context.beginPath();
+ context.lineWidth = 5;
+ context.moveTo(start_x, start_y);
+ context.lineTo(start_x - (oneWidth / 2 / rows), start_y
+ + (2 * oneHeight / rows));
+ context.lineTo(start_x + (back_width / cols) - (oneWidth / 2 / rows),
+ start_y + (2 * oneHeight / rows));
+ context.lineTo(start_x + (back_width / cols), start_y);
+ context.lineTo(start_x, start_y);
+ context.stroke();
+ context.fill();
+
+ //璁剧疆涓洪�夋嫨鏃剁殑瀛椾綋濉厖
+ if ((curType === "x") && (curVal === (cols - i + 1))) {
+ context.fillStyle = 'rgba(255,14,0,1)';
+ //璁剧疆涓烘湭閫夋嫨鏃剁殑瀛椾綋濉厖
+ } else {
+ context.fillStyle = 'rgba(30,30,30,1)';
+ }
+ val = "绗�" + (cols - i + 1) + "鍒�";
+ context.font = "15px Arial";
+ context.fillText(val, start_x - 0.5 * (oneWidth / 2 / rows), start_y
+ + 0.7 * (2 * oneHeight / rows));
+ //灏嗘樉绀烘柟寮忓垏鎹簨浠跺姞鍏rr鏁扮粍
+ arr.push({
+ 'x': start_x - 0.3 * (oneWidth / 2 / rows) + shift,
+ 'y': start_y + 0.5 * (2 * oneHeight / rows) + out_window_top,
+ 'width': 55,
+ 'height': 25,
+ 'type': 'x',
+ 'num': i,
+ 'start_x': start_x,
+ 'start_y': start_y
+ })
+ context.closePath();
+ }
+
+}
+
+//鍒堕�犲簳鐭╁舰
+function createBottom(context, y) {
+ //璁剧疆濉厖鏍峰紡
+ var gra = context.createRadialGradient(oneWidth, oneHeight, 0,
+ oneWidth / 2, oneHeight / 2, width * 100);
+ gra.addColorStop(0, "#c9dde8");
+ // gra.addColorStop(0.8, "white");
+ gra.addColorStop(1, "#c0deea");
+ var start_x = oneWidth / 2 + edge_distance;
+
+ //缁樺埗鐭╁舰
+ context.fillStyle = "rgba(168,208,225,1)";
+ context.fillStyle = gra;
+ context.beginPath();
+ context.moveTo(start_x, 0.5 * back_height);
+ context.lineTo(edge_distance, 2 * oneHeight + 0.5 * back_height);
+ context.lineTo(edge_distance + back_width, 2 * oneHeight + 0.5
+ * back_height);
+ context.lineTo(start_x + back_width, 0.5 * back_height);
+ context.lineWidth = 1.5;
+ context.fill();
+ context.stroke();
+ context.closePath();
+}
+
+//鍒堕�犺儗鐭╁舰
+function createBack(context) {
+
+ //璁剧疆濉厖鏍峰紡
+ var gra = context.createRadialGradient(oneWidth, oneHeight, 0,
+ oneWidth / 2, oneHeight / 2, width * 100);
+ gra.addColorStop(0, "#a8d0e1");
+ gra.addColorStop(1, "white");
+
+ //缁樺埗
+ var start_x = oneWidth / 2 + edge_distance
+ var start_y = 0
+ context.fillStyle = "rgba(168,208,225,1)";
+ context.fillStyle = gra;
+ context.beginPath();
+ context.moveTo(start_x, start_y);
+
+ context.lineTo(start_x + back_width, start_y);
+ context.lineTo(start_x + back_width, 0.5 * back_height);
+
+ context.lineTo(start_x, 0.5 * back_height);
+ context.lineTo(start_x, start_y);
+ context.lineWidth = 1.5;
+ context.fill();
+ context.stroke();
+ context.closePath();
+}
+
+//鍒堕�犲乏鐭╁舰
+function createLeft(context) {
+ //缁樺埗
+ var start_x = edge_distance;
+ var start_y = 2 * oneHeight;
+ context.fillStyle = "rgba(168,208,225,1)";
+ context.beginPath();
+ context.moveTo(start_x, start_y);
+ context.lineTo(start_x, start_y + 0.5 * back_height);
+ context.lineTo(oneWidth / 2 + start_x, 0.5 * back_height);
+ context.lineTo(oneWidth / 2 + start_x, 0);
+ context.lineTo(start_x, start_y);
+ context.lineWidth = 1.5;
+ context.stroke();
+ context.fill();
+ context.closePath();
+}
+
+//鑾峰彇绾垫í姣�
+function getRatio() {
+ var tmp = 1.3;
+ if (Screen.height > 1050) {
+ tmp = 1.05
+ if (rows <= 5)
+ tmp = 1.3
+ else if ((rows >= 6) && (rows <= 7))
+ tmp = 1.2
+ else if ((rows >= 8) && (rows <= 9))
+ tmp = 1.1
+ } else if ((Screen.height <= 1050) && (Screen.height > 960)) {
+ tmp = 1;
+ if (rows <= 5)
+ tmp = 1.3
+ else if ((rows >= 6) && (rows <= 7))
+ tmp = 1.2
+ else if ((rows >= 8) && (rows <= 9))
+ tmp = 1.1
+ } else if ((Screen.height <= 960) && (Screen.height > 900)) {
+ tmp = 0.9;
+ if (rows <= 7)
+ tmp = 1.2
+ else if (rows === 8)
+ tmp = 1.1
+ else if (rows === 9)
+ tmp = 1
+ } else if ((Screen.height <= 900) && (Screen.height > 800)) {
+ tmp = 0.8;
+ if (rows <= 6)
+ tmp = 1.2
+ else if (rows === 7)
+ tmp = 1.1
+ else if (rows === 8)
+ tmp = 1
+ else if (rows === 9)
+ tmp = 0.9
+ } else if ((Screen.height <= 800) && (Screen.height > 768)) {
+ tmp = 0.75;
+ if (rows <= 6)
+ tmp = 1.2
+ else if (rows === 7)
+ tmp = 1
+ else if (rows === 8)
+ tmp = 0.9
+ else if (rows === 9)
+ tmp = 0.8
+ } else if ((Screen.height <= 768) && (Screen.height > 720)) {
+ tmp = 0.75;
+ if (rows <= 6)
+ tmp = 1.1
+ else if (rows === 7)
+ tmp = 1
+ else if (rows === 8)
+ tmp = 0.9
+ else if (rows === 9)
+ tmp = 0.8
+ back_height = oneHeight * 2.1 * (2 - rows / 10) * 0.7
+ } else if (Screen.height <= 720) {
+ tmp = 0.66;
+ if (rows <= 6)
+ tmp = 1
+ else if (rows === 7)
+ tmp = 0.9
+ else if (rows === 8)
+ tmp = 0.8
+ else if (rows === 9)
+ tmp = 0.7
+ }
+
+ return tmp;
+}
+
+//鏍规嵁娓╁害鑾峰彇RGB
+function getColor(val) {
+ if (val >= 50) {
+ color = "rgba(255,0,0,1)";
+ return color;
+ } else if (val >= 20) {
+ G = Math.round(255 - 255 * ((val - 20) / 30));
+ color = "rgba(255," + G + ",0,1)";
+ return color;
+ } else if (val >= 0) {
+ R = Math.round(100 + (155 / 20) * val);
+ B = Math.round(30 - 1.5 * val);
+ color = "rgba(" + R + ",255," + B + ",1)";
+ return color;
+ } else if (val >= -10) {
+ R = Math.round(100 - 6.6 * (val * (-1)));
+ G = Math.round(255 - 2.2 * (val * (-1)));
+ B = Math.round(30 + 1.2 * (val * (-1)));
+ color = "rgba(" + R + "," + G + "," + B + ",1)";
+ return color;
+ } else {
+ color = "rgba(34,233,42,1)";
+ return color;
+ }
+}
+
+//涓嬩竴涓偣鍑讳簨浠�
+function next() {
+ if (curType === "x") {
+ if (curVal === Number(cols)) {
+ curVal = 1;
+ } else {
+ curVal += 1;
+ }
+ } else if (curType === "y") {
+ if (curVal === Number(rows)) {
+ curVal = 1;
+ } else {
+ curVal += 1;
+ }
+ } else {
+ if (curVal === Number(lays)) {
+ curVal = 1;
+ } else {
+ curVal += 1;
+ }
+ }
+ flash();
+ updateTemp();
+}
+
+//涓婁竴涓偣鍑讳簨浠�
+function last() {
+ if (curType === "x") {
+ if (curVal === 1) {
+ curVal = Number(cols);
+ } else {
+ curVal -= 1;
+ }
+ } else if (curType === "y") {
+ if (curVal === 1) {
+ curVal = Number(rows);
+ } else {
+ curVal -= 1;
+ }
+ } else {
+ if (curVal === 1) {
+ curVal = Number(lays);
+ } else {
+ curVal -= 1;
+ }
+ }
+ flash();
+ updateTemp();
+}
+
+//灞傛樉绀虹偣鍑讳簨浠�
+function lay() {
+ curType = "z";//鏄剧ず绫诲瀷
+ curVal = 1;
+ flash();
+ updateGrainBtn(false);
+
+};
+
+//鍒楁樉绀虹偣鍑讳簨浠�
+function col() {
+ curType = "x";//鏄剧ず绫诲瀷
+ curVal = 1;
+ flash();
+ updateGrainBtn(false);
+};
+
+//琛屾樉绀虹偣鍑讳簨浠�
+function row() {
+ curType = "y";//鏄剧ず绫诲瀷
+ curVal = 1;
+ flash();
+ updateGrainBtn(false);
+};
+
+//鍏ㄩ儴鏄剧ず鐐瑰嚮浜嬩欢
+function display_all() {
+ display_mode = "all";
+ flash();
+}
+
+//澶栭儴鏄剧ず鐐瑰嚮浜嬩欢
+function display_outside() {
+ display_mode = "outside";
+ flash();
+}
+
+//鍐呴儴鏄剧ず鐐瑰嚮浜嬩欢
+function display_inside() {
+ display_mode = "inner";
+ flash();
+}
+
+// 鍒濆鍖栦笁缁寸伯鎯�
+function initGrainChar3d() {
+ draw();
+};
+
+function clearGrainChart3d() {
+ listPoints = [];
+ listLays = [];
+ listRows = [];
+ lays = 4;
+ rows = 5;
+ cols = 8;
+ curType = "z";
+ curVal = 1;
+ initCanvasParam();
+ draw();
+};
+
+//閲嶆柊娓叉煋
+function resetGrainChart3d() {
+ listPoints = grainData.listPoints;
+ listLays = grainData.listLays;
+ listRows = grainData.listRows;
+ var attr = grainData.cable.split("-");
+ lays = attr[0];
+ rows = attr[1];
+ cols = attr[2];
+
+ initCanvasParam();
+
+ draw();
+ sleep();//寮�濮嬮棯鐑�
+ curType = "z";
+ curVal = 1;
+
+ updateTemp();
+}
+
+//鏇存柊Btn鍚嶇О
+function updateGrainBtn(isUpdateSelect) {
+ var btnNext = $("#btn_next");
+ var btnPre = $("#btn_pre");
+ if ("z" === curType) {
+ btnNext.text("涓嬩竴灞�");
+ btnPre.text("涓婁竴灞�");
+ }
+ if ("y" === curType) {// 琛屾煡鐪�
+ btnNext.text("涓嬩竴琛�");
+ btnPre.text("涓婁竴琛�");
+ }
+ if ("x" === curType) {// 鍒楁煡鐪�
+ btnNext.text("涓嬩竴鍒�");
+ btnPre.text("涓婁竴鍒�");
+ }
+
+ //闇�鏀规俯搴�
+ updateTemp();
+
+};
+
+function updateTemp() {
+ //鏇存柊灞傛俯锛岃娓╁害淇℃伅
+ if ("z" === curType) {
+ $.each(listLays, function (index, item) {
+ if (item.z === (curVal - 1)) {
+ // 鏇存柊灞備俊鎭�
+ $("#dynamicAve").text(item.tempAve);
+ $("#dynamicMax").text(item.tempMax);
+ $("#dynamicMin").text(item.tempMin);
+ $("#dynamicAveName").text("灞傚潎娓�");
+ $("#dynamicMaxName").text("灞傞珮娓�");
+ $("#dynamicMinName").text("灞備綆娓�");
+ return;
+ }
+ });
+ }
+ if ("y" === curType) {
+ $.each(listRows, function (index, item) {
+ if (item.y === (curVal - 1)) {
+ $("#dynamicAve").text(item.tempAve);
+ $("#dynamicMax").text(item.tempMax);
+ $("#dynamicMin").text(item.tempMin);
+ $("#dynamicAveName").text("琛屽潎娓�");
+ $("#dynamicMaxName").text("琛岄珮娓�");
+ $("#dynamicMinName").text("琛屼綆娓�");
+ }
+ });
+ }
+ if ("x" === curType) {
+ $("#dynamicAve").text("--");
+ $("#dynamicMax").text("--");
+ $("#dynamicMin").text("--");
+ $("#dynamicAveName").text("鍒楀潎娓�");
+ $("#dynamicMaxName").text("鍒楅珮娓�");
+ $("#dynamicMinName").text("鍒椾綆娓�");
+ }
+};
diff --git a/fzzy-igdss-web/src/main/resources/static/grain/grainPoint4.js b/fzzy-igdss-web/src/main/resources/static/grain/grainPoint4.js
new file mode 100644
index 0000000..eadf57a
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/grain/grainPoint4.js
@@ -0,0 +1,633 @@
+/*==========浠撳簱绫诲瀷涓哄渾绛掍粨==========*/
+//瀹氫箟鏁版嵁
+var listPoints = [
+ {'z': 0, 'x': 0, 'y': 0, 'temp': 0.0},
+ {'z': 1, 'x': 0, 'y': 0, 'temp': 0.0},
+ {'z': 2, 'x': 0, 'y': 0, 'temp': 0.0},
+ {'z': 3, 'x': 0, 'y': 0, 'temp': 0.0},
+ {'z': 4, 'x': 0, 'y': 0, 'temp': 0.0},
+ {'z': 5, 'x': 0, 'y': 0, 'temp': 0.0},
+ {'z': 6, 'x': 0, 'y': 0, 'temp': 0.0},
+ {'z': 7, 'x': 0, 'y': 0, 'temp': 0.0},
+ {'z': 8, 'x': 0, 'y': 0, 'temp': 0.0},
+ {'z': 9, 'x': 0, 'y': 0, 'temp': 0.0}];
+var listLays = [{z: 1, tempMin: 0.0, tempMax: 0.0, tempAve: 0.0}, {
+ z: 2,
+ tempMin: 0.0,
+ tempMax: 0.0,
+ tempAve: 0.0
+}, {z: 3, tempMin: 0.0, tempMax: 0.0, tempAve: 0.0}, {z: 4, tempMin: 0.0, tempMax: 0.0, tempAve: 0.0}, {
+ z: 5,
+ tempMin: 0.0,
+ tempMax: 0.0,
+ tempAve: 0.0
+}, {z: 6, tempMin: 0.0, tempMax: 0.0, tempAve: 0.0}, {z: 7, tempMin: 0.0, tempMax: 0.0, tempAve: 0.0}, {
+ z: 8,
+ tempMin: 0.0,
+ tempMax: 0.0,
+ tempAve: 0.0
+}, {z: 9, tempMin: 0.0, tempMax: 0.0, tempAve: 0.0}, {z: 10, tempMin: 0.0, tempMax: 0.0, tempAve: 0.0}];
+
+var distrList = [1];
+var bottomList = [10];
+//瀹氫箟鏁版嵁鏄剧ず瀹瑰櫒
+var layPoints = [];
+var colPoints = [];
+var cirNum = distrList.length; //鍦堟暟
+var layNum = getLayNum(); //灞傛暟
+var longAxis = 100; //绗竴鍐呭湀鍗婇暱杞�
+var shortAxis = 10; //绗竴鍐呭湀鍗婄煭杞�
+var spaceCir = 35; //涓ゅ湀闂磋窛
+var intervalTop = 20; //璺濈椤剁璺濈
+var spaceLay = 55; //灞傞棿璺�
+var maxSpace = cirNum * spaceCir; //鍐呭鍦堟渶澶у樊鍊�
+var curVal = 1; //灞傛暟鎺у埗鍙橀噺
+var curCol = 0;//褰撳墠鏍癸紝澶т簬0琛ㄧず鎸夌収鏍规墽琛�
+var initAngle = 0; //瑙掑害鎺у埗
+var clockwise = true; //鏃堕拡鎺у埗
+var displayMode = 'all'; //鍐呭鏄剧ず
+var textSize = 16;//鏂囨湰妗嗗ぇ灏�
+
+var center_x;//浠撳績X鍧愭爣
+var center_y;//浠撳績y鍧愭爣
+
+var arr = [];//瀹氫箟缁戝畾浜嬩欢鏁扮粍
+
+//鑹插潡棰滆壊甯搁噺
+var color = null;
+var R = 0;
+var G = 0;
+var B = 0;
+var ctx;
+var timer;
+var t = -2;
+var caseHeight, sum_long;
+
+var isSleep = true;
+
+// 鍒濆鍖栧弬鏁�
+function initCanvasParam() {
+ isSleep = true;
+ cirNum = distrList.length; // 鍦堟暟
+ layNum = getLayNum(); // 灞傛暟
+ maxSpace = cirNum * spaceCir; // 鍐呭鍦堟渶澶у樊鍊�
+ curVal = 1; // 灞傛暟鎺у埗鍙橀噺
+ curCol = 0;
+ displayMode = 'all'; // 鍐呭鏄剧ず
+ arr = [];// 瀹氫箟缁戝畾浜嬩欢鏁扮粍
+};
+//鑾峰彇灞傞厤缃腑鐨勬渶楂樺眰鍊�
+function getLayNum() {
+ var i = 1;
+ bottomList.forEach(function (value, index, array) {
+ if (value > i) i = value;
+ });
+ return i;
+};
+
+
+//缁樺埗涓荤▼搴�
+function draw() {
+ var canvas = document.getElementById('canvas');
+ ctx = canvas.getContext('2d');
+ center_x = canvas.width / 3; //浠撳績X鍧愭爣
+ center_y = shortAxis / 3 + maxSpace + intervalTop; //浠撳績y鍧愭爣
+ ctx.strokeStyle = "black";
+ ctx.lineWidth = 1;
+ autoAdjust();
+ make_ellipse(ctx);
+ gainData(ctx);
+ entityBlock(ctx);
+ make_top_ellipse(ctx);
+ title(ctx);
+ showIndex(canvas, ctx);
+}
+
+//缁樺埗椤堕儴妞渾
+function make_top_ellipse() {
+ //缁樺埗椤堕儴妞渾
+ ctx.beginPath();
+ ctx.strokeStyle = "rgba(0,0,0,0.5)";
+ ctx.ellipse(center_x, center_y, longAxis + maxSpace, shortAxis + maxSpace, 0, 0, Math.PI * 2);
+ ctx.stroke();
+ ctx.closePath();
+}
+
+//楂樺害鑷皟鏁�
+function autoAdjust() {
+ //璁剧疆浠撻珮
+ caseHeight = spaceLay * (layNum - 1);
+ //璁$畻浠撳簱鍗犵敾甯冩�婚珮
+ sum_long = caseHeight + 2 * (maxSpace + shortAxis + intervalTop);
+ //鎬婚珮瓒婄晫杩涜璋冩暣灞傞棿璺�
+ if (eval(canvas.height) < eval(sum_long)) {
+ //浠撶璁剧疆涓烘渶楂�
+ caseHeight = canvas.height - 2 * (maxSpace + shortAxis + intervalTop);
+ //璋冩暣灞傞棿璺�
+ spaceLay = caseHeight / (layNum-1);
+ }
+};
+
+//缁樺埗浠撲綋
+function make_ellipse(ctx) {
+
+ //缁樺埗浠撳乏鍙宠竟鐣�
+ ctx.beginPath();
+ ctx.moveTo(center_x + (longAxis + maxSpace), center_y);
+ ctx.lineTo(center_x + (longAxis + maxSpace), center_y + caseHeight)
+ ctx.moveTo(center_x - (longAxis + maxSpace), center_y);
+ ctx.lineTo(center_x - (longAxis + maxSpace), center_y + caseHeight)
+ ctx.stroke();
+ ctx.closePath();
+
+ //濉厖鑳岄儴
+ var grd = ctx.createRadialGradient(center_x, center_y + caseHeight - longAxis, shortAxis, center_x, center_y + caseHeight - 2 * longAxis, 5 * longAxis);
+ //grd.addColorStop(0, "white");
+ // grd.addColorStop(1, "rgba(115,200,231,1)");
+ grd.addColorStop(0, "rgba(245,222,179)");
+ grd.addColorStop(1, "rgba(240 255 255)");
+
+ ctx.beginPath();
+ ctx.fillStyle = grd;
+ ctx.moveTo(center_x + (longAxis + maxSpace), center_y + caseHeight);
+ ctx.lineTo(center_x + (longAxis + maxSpace), center_y);
+ ctx.ellipse(center_x, center_y, longAxis + maxSpace, shortAxis + maxSpace, 0, 0, Math.PI, true);
+ ctx.lineTo(center_x - (longAxis + maxSpace), center_y + caseHeight);
+
+ ctx.fill();
+ ctx.closePath();
+
+ //缁樺埗搴曢儴妞渾
+ var grd = ctx.createRadialGradient(center_x, center_y + caseHeight - longAxis, shortAxis, center_x, center_y + caseHeight - 2 * longAxis, 5 * longAxis);
+ // grd.addColorStop(0, "white");
+ // grd.addColorStop(1, "rgba(115,200,231,1)");
+ grd.addColorStop(0, "rgba(245,222,179)");
+ grd.addColorStop(1, "rgba(240 255 255)");
+
+ ctx.beginPath();
+ ctx.fillStyle = grd;
+ ctx.ellipse(center_x, center_y + caseHeight, longAxis + maxSpace, shortAxis + maxSpace, 0, 0, Math.PI * 2);
+ ctx.stroke();
+ ctx.fill();
+ ctx.closePath();
+}
+
+//杩囨护鏁版嵁
+function gainData() {
+ for (i = 0; i < listPoints.length; i++) {
+ if (listPoints[i]['z'] + 1 === curVal) {
+ layPoints.push(listPoints[i])
+ }
+ }
+}
+
+//杩囨护鏁版嵁
+function gainData2() {
+ for (i = 0; i < listPoints.length; i++) {
+ if ((listPoints[i]['y'] + 1) == curCol) {
+ colPoints.push(listPoints[i])
+ }
+ }
+}
+
+//杩涜鎺掔嚎锛岀粯鍒惰壊鍧�
+function entityBlock(ctx) {
+ var z_peak = [1, cirNum];
+ var color_list = ["e9e9e9", "bbe5cc", "f8dabc", "f4c8d5", "958a9b", "9f9aa0"];
+
+ var turns = cirNum;
+ // for (i = 0; i < bottomList.length; i++) {
+ // if(curVal > bottomList[i]){
+ // turns = turns - 1;
+ // }
+ // }
+
+ var showMax = turns;
+ //寰幆鐢熸垚姣忓湀
+ for (i = turns; i >= 1; i--) {
+ //鍐呭鏄剧ず閫昏緫鍒ゆ柇
+ if ((displayMode === 'outside') && !(i === cirNum)) {
+ continue;
+ } else if ((displayMode === 'inner') && i === cirNum) {
+ showMax -= 1;
+ continue;
+ }
+
+ var splNum = distrList[i - 1];
+ //鍙湁涓�鍒楁暟鎹椂鍊欐帶鍒朵腑蹇冧綅缃�
+ if(splNum === 1){
+ point = null;
+ //寰幆鎵惧埌瀵瑰簲鐐瑰��
+ for(z = 0;z < layPoints.length; z++){
+ if((layPoints[z]['x'] +1 === i )&&(layPoints[z]['y'] === 0)){
+ point = layPoints[z];
+ break;
+ }
+ }
+ point_x = center_x ;
+ point_y = center_y + (curVal -1) * spaceLay ;
+ textBox(ctx,point,point_x,point_y);
+ continue;
+ }
+
+ ctx.beginPath();
+ ctx.strokeStyle = 'rgba(0,0,0,1)';
+ ctx.ellipse(center_x, center_y + (curVal-1) * spaceLay, longAxis + i * spaceCir, shortAxis + i * spaceCir, 0, 0, Math.PI * 2);
+
+ if (i === 1) {
+ var grd = ctx.createRadialGradient(center_x, center_y + caseHeight - longAxis, shortAxis, center_x, center_y + caseHeight - 2 * longAxis, 5 * longAxis);
+ grd.addColorStop(0, "rgba(245,222,179)");
+ grd.addColorStop(1, "rgba(240 255 255)");
+ ctx.fillStyle = grd;
+ ctx.fill();
+ } else {
+ var grd = ctx.createRadialGradient(center_x, center_y + caseHeight - longAxis, shortAxis, center_x, center_y + caseHeight - 2 * longAxis, 2 * longAxis);
+ grd.addColorStop(0, "white");
+ grd.addColorStop(1, "#" + color_list[i]);
+ ctx.fillStyle = grd;
+ ctx.fill();
+ }
+
+ ctx.stroke();
+ ctx.closePath();
+
+ //璁剧疆鐐瑰�间负null;
+ var point = null;
+
+ //姣忓湀鐨勮捣濮嬩笌鎴鏍�,splNum涓烘墍鍦ㄥ湀鐨勬牴鏁�
+ var startGen = 0, endGen = 0;
+ for(t = 0; t < distrList.length; t++){
+ if(t <= i - 1){
+ endGen += distrList[t];
+ }
+ }
+ startGen = endGen - splNum;
+ //寰幆鐢熸垚鍦堝唴鐐�
+ for (j = startGen; j < endGen; j++) {
+ //寰幆鎵惧埌瀵瑰簲鐐瑰��
+ for (z = 0; z < layPoints.length; z++) {
+ if ((layPoints[z]['x'] === (i - 1)) && (layPoints[z]['y'] === j)) {
+ point = layPoints[z];
+ break;
+ }
+ }
+
+ var angle;
+ //鍒ゆ柇鏄剧ず鏃堕拡
+ if (clockwise) {
+ angle = (2 * Math.PI / splNum) * j + initAngle;
+ } else {
+ angle = (2 * Math.PI / splNum) * (splNum - j) + initAngle;
+ }
+
+ point_x = center_x + (longAxis + i * spaceCir) * Math.cos(angle);
+ point_y = center_y + (curVal-1) * spaceLay + (shortAxis + i * spaceCir) * Math.sin(angle);
+ if(point){
+ textBox(ctx, point, point_x, point_y)
+ }
+ }
+ }
+}
+
+
+//杩涜鎺掔嚎锛岀粯鍒惰壊鍧�
+function entityBlock2(ctx) {
+ //璁剧疆鐐瑰�间负null;
+ var point = null;
+ //寰幆鐢熸垚鍦堝唴鐐�
+ for (j = 0; j < colPoints.length; j++) {
+ point = colPoints[j];
+ point_x = center_x;
+ point_y = center_y + (j + 1) * spaceLay;
+ textBox(ctx, point, point_x, point_y)
+ }
+}
+
+//缁樺埗涓�涓渾褰㈡枃鏈
+function textBox(ctx, point, x, y) {
+ val = point.temp;
+
+ if ((t % 2 === 1)) {
+ if (val == listLays[curVal - 1]['tempMax']) { //姝ょ偣涓烘渶楂樻俯
+ ctx.fillStyle = "rgba(229,29,29,1)";
+ } else if (val == listLays[curVal - 1]['tempMin']) { //姝ょ偣涓烘渶浣庢俯
+ ctx.fillStyle = "rgba(0,255,28,1)";
+ } else {
+ ctx.fillStyle = getColor(val);
+ }
+ } else {
+ ctx.fillStyle = getColor(val);
+ }
+
+ //濡傛灉鏄ˉ鐐癸紝涓嶅仛鐐逛綅娓叉煋
+ if (val == -102) {
+ return;
+ }
+ if ("澶囩敤" != val) {
+ val = val.toFixed(1);
+ }
+
+ if(val <= -100){
+ val = "澶囩敤";
+ }
+
+ ctx.beginPath();
+ ctx.lineWidth = 0.75;
+
+ ctx.arc(x, y, textSize, 0, 2 * Math.PI);
+ ctx.stroke();
+ ctx.fill();
+ ctx.fillStyle = "rgba(0,0,0,1)";
+ ctx.textAlign = 'center';
+
+
+ ctx.font = "600 14px Arial";
+ ctx.fillText(val, x, y + 3);
+ ctx.closePath();
+
+ arr.push({
+ 'x': x - 0.6 * textSize,
+ 'y': y - 0.7 * textSize,
+ 'width': 2.1 * textSize,
+ 'height': 2.2 * textSize,
+ 'type': 'val',
+ 'lay': point['z'],
+ 'val': point['temp'],
+ 'cir': point['x'],
+ 'rows': point['y']
+ })
+}
+
+//鏍规嵁娓╁害鑾峰彇RGB
+function getColor(val) {
+ if (val >= 50) {
+ color = "rgba(255,0,0,1)";
+ return color;
+ } else if (val >= 20) {
+ G = Math.round(255 - 255 * ((val - 20) / 30));
+ color = "rgba(255," + G + ",0,1)";
+ return color;
+ } else if (val >= 0) {
+ R = Math.round(100 + (155 / 20) * val);
+ B = Math.round(30 - 1.5 * val);
+ color = "rgba(" + R + ",255," + B + ",1)";
+ return color;
+ } else if (val >= -10) {
+ R = Math.round(100 - 6.6 * (val * (-1)));
+ G = Math.round(255 - 2.2 * (val * (-1)));
+ B = Math.round(30 + 1.2 * (val * (-1)));
+ color = "rgba(" + R + "," + G + "," + B + ",1)";
+ return color;
+ } else {
+ color = "rgba(34,233,42,1)";
+ return color;
+ }
+}
+
+//鐫$湢
+function sleep() {
+ if(isSleep){
+ t++;
+ if (t >= 0) {
+ flash();
+ }
+ timer = setTimeout("sleep()", 400);
+ }
+}
+
+//闂儊绋嬪簭
+function flash() {
+ var canvas = document.getElementById('canvas');
+ var ctx = canvas.getContext('2d');
+ canvas.height = canvas.height;
+ layPoints = [];
+ arr = [];
+ make_ellipse(ctx);
+ gainData(ctx);
+ entityBlock(ctx);
+ make_top_ellipse(ctx);
+ title(ctx)
+}
+
+//闂儊绋嬪簭
+function flash2() {
+ var canvas = document.getElementById('canvas');
+ var ctx = canvas.getContext('2d');
+ canvas.height = canvas.height;
+ colPoints = [];
+ arr = [];
+
+ make_ellipse(ctx);
+
+ gainData2(ctx);
+
+ entityBlock2(ctx);
+
+ make_top_ellipse(ctx);
+ title(ctx)
+}
+
+//鏍囬鏍�
+function title(ctx) {
+
+ for (i = 1; i <= layNum; i++) {
+
+ start_x = center_x + (longAxis + maxSpace) + 20;
+ start_y = center_y + spaceLay * (i - 1);
+
+ if (curVal === i) {
+ var grad = ctx.createLinearGradient(start_x, start_y, start_x + 2 * spaceLay, start_y);
+ grad.addColorStop(0, "#2f2fff");
+ grad.addColorStop(0.7, "#b3b3ff");
+ grad.addColorStop(1, "#ffffff");
+ //璁剧疆涓烘湭閫夋嫨鏃剁殑娓愬彉濉厖
+ } else {
+ var grad = ctx.createLinearGradient(start_x, start_y, start_x + 2 * spaceLay, start_y);
+ // grad.addColorStop(0, "#a2baef");
+ // grad.addColorStop(0.8, "#ffffff");
+ grad.addColorStop(0, "rgba(245,222,179)");
+ grad.addColorStop(1, "rgba(240 255 255)");
+ }
+
+ ctx.fillStyle = grad;
+ ctx.lineWidth = 1;
+ ctx.strokeStyle = 'rgba(214,223,232,1)';
+ ctx.beginPath();
+ ctx.moveTo(start_x, start_y + 1); //鍘熺偣
+ ctx.lineTo(start_x + 1.8 * spaceLay, start_y + 1); //鍙崇Щ
+ ctx.lineTo(start_x + 1.8 * spaceLay, start_y + spaceLay - 1); //涓嬬Щ
+ ctx.lineTo(start_x, start_y + spaceLay - 1); //宸︾Щ
+ ctx.lineTo(start_x, start_y + 1); //涓婄Щ
+ ctx.stroke();
+ ctx.fill();
+ ctx.closePath();
+ //璁剧疆涓洪�夋嫨鏃剁殑瀛椾綋濉厖
+ if (curVal === i) {
+ ctx.fillStyle = 'rgba(255,14,0,1)';
+ ctx.font = "600 14px Arial";
+ } else {
+ ctx.fillStyle = 'rgba(30,30,30,1)';
+ ctx.font = "14px Arial";
+ }
+ val = "绗�" + i + "灞�";
+ ctx.textAlign = 'center';
+ ctx.fillText(val, start_x + 0.9 * spaceLay, start_y + 0.7 * spaceLay);
+ arr.push({
+ 'x': start_x,
+ 'y': start_y + 1,
+ 'width': 1.8 * spaceLay,
+ 'height': spaceLay,
+ 'num': i,
+ 'type': 'title'
+ })
+ }
+}
+
+//缁戝畾瑙﹀彂鐨勪簨浠�
+function draws(x, y, canvas, ctx) {
+ //鍒涘缓鐐瑰嚮浜嬩欢鐨勭敾甯冿紙鐢诲竷2锛�
+ ctx.rect(0, 0, canvas.width, canvas.height);
+ arr.forEach(function (v, i) {
+ ctx.beginPath();
+ //缁樺埗姣忎竴涓璞$殑鍖哄煙
+ ctx.rect(v.x, v.y, v.width, v.height);
+ ctx.closePath();
+
+ console.log(v);
+
+ //鍒ゆ柇鐐规槸鍚﹀湪鍖哄煙鍐�
+ var showData;
+ if (ctx.isPointInPath(x, y)) {
+ //鐐圭殑绫诲瀷涓哄��
+ if (v.type === 'val') {
+ //绫诲瀷涓簐al锛屽垯寮瑰嚭鐐逛俊鎭�
+ showData = "褰撳墠灞傦細" + (v.lay + 1) + "\n 褰撳墠鐢电紗锛氱" + (v.rows + 1) + "鏍�";
+ alert(showData);
+ } else { //鍏朵粬绫诲瀷鍒欏垏鎹㈡樉绀鸿壊鍧�
+ curVal = v['num'];
+ flash();
+ }
+ }
+ })
+}
+
+//缁戝畾浜嬩欢
+function showIndex(canvas, ctx) {
+ //鏁翠釜鐢诲竷瀵硅薄娣诲姞鐐瑰嚮浜嬩欢
+ canvas.addEventListener('click', function location(e) {
+ x = e.clientX;
+ y = e.clientY;
+ draws(x, y, canvas, ctx);
+ }, false);
+}
+
+// --------------- 鎸夐挳鐐瑰嚮浜嬩欢---------------------
+//涓婁竴琛�
+function last() {
+ if (curVal === 1) {
+ curVal = Number(layNum);
+ } else {
+ curVal -= 1;
+ }
+ flash();
+ renderGrainByLay(curVal);
+}
+
+//涓嬩竴琛�
+function next() {
+ if (curVal === Number(layNum)) {
+ curVal = 1;
+ } else {
+ curVal += 1;
+ }
+ flash();
+
+ renderGrainByLay(curVal);
+}
+
+//鏍规煡鐪�
+function showCol() {
+ isSleep = false;
+
+ curCol = $("#value_col").val();
+ listPoints = grainData.listPoints;
+ listLays = grainData.listLays;
+ distrList = grainData.cable.split("-").map(Number);
+ bottomList = grainData.cableCir.split("-").map(Number);
+
+ flash2();
+
+ $("#switch_all").prop("checked", false);
+ form.render();
+}
+
+//瑙掑害鏃嬭浆
+function rotate() {
+ initAngle += (document.getElementById("rotate").value) * 2 * Math.PI / 360;
+ flash();
+}
+
+//鍏ㄩ儴鏄剧ず鐐瑰嚮浜嬩欢
+function display_all() {
+ isSleep = true;
+ displayMode = 'all';
+ flash();
+}
+
+//澶栭儴鏄剧ず鐐瑰嚮浜嬩欢
+function display_outside() {
+ isSleep = true;
+ displayMode = 'outside';
+ flash();
+}
+
+//鍐呴儴鏄剧ず鐐瑰嚮浜嬩欢
+function display_inside() {
+ isSleep = true;
+ displayMode = 'inner';
+ flash();
+}
+
+// 鍒濆鍖栦笁缁寸伯鎯�
+function initGrainChar3d() {
+ isSleep = true;
+ draw();
+};
+
+function clearGrainChart3d() {
+ initCanvasParam();
+ draw();
+};
+
+//閲嶆柊娓叉煋
+function resetGrainChart3d() {
+ listPoints = grainData.listPoints;
+ listLays = grainData.listLays;
+ distrList = grainData.cable.split("-").map(Number);
+ bottomList = grainData.cableCir.split("-").map(Number);
+
+ initCanvasParam();
+ draw();
+ sleep();//寮�濮嬮棯鐑�
+ curType = "z";
+ curVal = 1;
+ renderGrainByLay(curVal);
+}
+
+// 鏍规嵁鐢ㄦ埛閫夋嫨鐨勫眰锛屾覆鏌撴暟鎹紝浠�1寮�濮�
+function renderGrainByLay(num) {
+ var lay;
+ $.each(listLays, function (index, data) {
+ if (num == data.z) {
+ lay = data;
+ // 鏇存柊灞備俊鎭�
+ $("#dynamicAve").text(lay.tempAve);
+ $("#dynamicMax").text(lay.tempMax);
+ $("#dynamicMin").text(lay.tempMin);
+ $("#dynamicAveName").text("灞傚潎娓�");
+ $("#dynamicMaxName").text("灞傞珮娓�");
+ $("#dynamicMinName").text("灞備綆娓�");
+ return;
+ }
+ });
+};
\ No newline at end of file
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/cpc-pic.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/cpc-pic.png
new file mode 100644
index 0000000..2f43469
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/cpc-pic.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/fenxi-icon.gif b/fzzy-igdss-web/src/main/resources/static/img/web/grain/fenxi-icon.gif
new file mode 100644
index 0000000..c1e098a
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/fenxi-icon.gif
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/fenxi-icon.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/fenxi-icon.png
new file mode 100644
index 0000000..57f111f
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/fenxi-icon.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/img-dnxb.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/img-dnxb.png
new file mode 100644
index 0000000..7c0d7dc
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/img-dnxb.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg1.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg1.png
new file mode 100644
index 0000000..d826ae2
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg1.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg2.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg2.png
new file mode 100644
index 0000000..0a4c46a
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg2.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg3.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg3.png
new file mode 100644
index 0000000..1f72537
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg3.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg4.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg4.png
new file mode 100644
index 0000000..979f76d
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg4.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg5.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg5.png
new file mode 100644
index 0000000..942e648
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg5.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg6.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg6.png
new file mode 100644
index 0000000..333abe4
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg6.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg7.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg7.png
new file mode 100644
index 0000000..6009f24
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-c-bg7.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-color_03.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-color_03.png
new file mode 100644
index 0000000..959e6df
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-color_03.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-li-bg.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-li-bg.png
new file mode 100644
index 0000000..95875ad
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-li-bg.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon1-h.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon1-h.png
new file mode 100644
index 0000000..5e2df50
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon1-h.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon1.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon1.png
new file mode 100644
index 0000000..8d1dd47
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon1.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon2-h.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon2-h.png
new file mode 100644
index 0000000..06e698b
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon2-h.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon2.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon2.png
new file mode 100644
index 0000000..0f1caeb
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon2.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon3-h.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon3-h.png
new file mode 100644
index 0000000..ad2100c
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon3-h.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon3.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon3.png
new file mode 100644
index 0000000..0d312b2
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon3.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon4-h.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon4-h.png
new file mode 100644
index 0000000..924f9b1
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon4-h.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon4.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon4.png
new file mode 100644
index 0000000..419d3e2
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon4.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon5-h.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon5-h.png
new file mode 100644
index 0000000..74e4c0b
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon5-h.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon5.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon5.png
new file mode 100644
index 0000000..2397cac
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon5.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon6-h.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon6-h.png
new file mode 100644
index 0000000..9d45429
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon6-h.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon6.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon6.png
new file mode 100644
index 0000000..4366895
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-r-icon6.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-swt.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-swt.png
new file mode 100644
index 0000000..e223873
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/lq-swt.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/oil-all.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/oil-all.png
new file mode 100644
index 0000000..46e634a
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/oil-all.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/qt-bg4.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/qt-bg4.png
new file mode 100644
index 0000000..78c75f1
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/qt-bg4.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/rkbk-photo_02.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/rkbk-photo_02.png
new file mode 100644
index 0000000..ef6dde0
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/rkbk-photo_02.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/static/img/web/grain/rkbk-photo_03.png b/fzzy-igdss-web/src/main/resources/static/img/web/grain/rkbk-photo_03.png
new file mode 100644
index 0000000..c11a340
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/img/web/grain/rkbk-photo_03.png
Binary files differ
diff --git a/fzzy-igdss-web/src/main/resources/templates/grain/grain-check1.html b/fzzy-igdss-web/src/main/resources/templates/grain/grain-check1.html
new file mode 100644
index 0000000..bcdc81b
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/templates/grain/grain-check1.html
@@ -0,0 +1,575 @@
+<!DOCTYPE html>
+<html lang="zh-cn" xmlns:th=http://www.thymeleaf.org>
+<head>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="renderer" content="webkit">
+ <title>鏅烘収绮簱绠$悊骞冲彴-绮儏妫�娴�</title>
+
+ <link rel="stylesheet" type="text/css" th:href="@{/ajax/libs/layui/css/layui.css}"/>
+ <link rel="stylesheet" type="text/css" th:href="@{/grain/grain-style.css}">
+
+ <!--浣跨敤鎵撳嵃鎻掍欢 闅愯棌褰撳墠鎻掍欢 -->
+ <script th:src="@{/js/plugins/lodop/LodopFuncs.js}"></script>
+
+ <style>
+ .layui-checkbox-disbaled span {
+ background-color: #ed5565 !important;
+ }
+
+ #lq-left2 {
+ min-width: 295px;
+ }
+
+ .lq-left2-list li h3 {
+ float: left;
+ /*color: rgb(108, 119, 129);*/
+ color: #000;
+ font-size: 16px;
+ font-style: italic;
+ }
+
+ @media all and (max-width: 1650px) {
+ .lq-cPic-box {
+ margin: 5% auto 0 auto;
+ }
+
+ .lq-center {
+ /*padding-bottom: 50px;*/
+ padding-bottom: 5px;
+ }
+
+ .lq-left2-list li {
+ padding: 3% 6%;
+ }
+
+ .lq-cTop-item p span {
+ font-size: 24px;
+ }
+ }
+
+ .lq-wendu {
+ width: 90px;
+ height: 200px;
+ position: absolute;
+ bottom: 0;
+ z-index: 99;
+ left: 5px;
+ margin-bottom: 55px;
+ }
+
+ .lq-center {
+ width: 80%;
+ position: relative;
+ padding-bottom: 5px;
+ overflow: hidden;
+ }
+
+ .lq-center2 {
+ position: relative;
+ padding-bottom: 5px;
+ overflow-y: hidden;
+ }
+
+ .lq-cLow-1 {
+ width: 50px;
+ border-right: 1px solid #333;
+ }
+
+ .lq-cLow {
+ width: 850px;
+ }
+
+ .lq-cLow-3 {
+ width: 15px;
+ border-right: 1px solid #333;
+ }
+
+ .lq-rMenu li {
+ height: 80px;
+ }
+
+ .layui-form-checkbox {
+ min-width: 100px;
+ }
+ </style>
+
+ </head>
+
+<body>
+<div class="l-container">
+ <div class="l-main layui-clear">
+
+ <div class="layui-row">
+
+ <div class="lq-left fl">
+ <div class="lq-left1 layui-clear radius-6 box-shadow">
+ <form class="layui-form">
+
+ <div class="layui-form-item lq-left1-from">
+ <label class="layui-form-label">浠撳簱鍒楄〃</label>
+ <div class="layui-input-block">
+ <select name="depotId" id="depotId" lay-filter="select_depotId">
+ <option value=""></option>
+ <option th:each="depot,depotSet:${listDepot}"
+ th:value="${depot.id}" th:text="${depot.name}"
+ th:type="${depot.depotType}"></option>
+ </select>
+ </div>
+ </div>
+
+ <div class="layui-form-item lq-left1-from">
+ <label class="layui-form-label">妫�娴嬫椂闂�</label>
+ <div class="layui-input-block">
+ <select name="batchId" id="batchId" lay-filter="select_batchId">
+ <option value=""></option>
+ </select>
+ </div>
+ </div>
+
+ </form>
+ </div>
+
+ </div>
+ <!-- 涓�-宸� END-->
+
+ <div id="lq-center1" class="lq-center fr">
+ <div class="lq-cTop layui-clear" id="topInfo">
+ <div class="lq-cTop-1 fl">
+ <div class="layui-row">
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="tempAve">--</span>鈩�
+ </p>
+ <h4>绮潎娓�</h4>
+ </div>
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="tempMax">--</span>鈩�
+ </p>
+ <h4>绮珮娓�</h4>
+ </div>
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="tempMin">--</span>鈩�
+ </p>
+ <h4>绮綆娓�</h4>
+ </div>
+ </div>
+ </div>
+ <div class="lq-cTop-2 fl ml4">
+ <div class="layui-row">
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="dynamicAve">--</span>鈩�
+ </p>
+ <h4 id="dynamicAveName">灞傚潎娓�</h4>
+ </div>
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="dynamicMax">--</span>鈩�
+ </p>
+ <h4 id="dynamicMaxName">灞傞珮娓�</h4>
+ </div>
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="dynamicMin">--</span>鈩�
+ </p>
+ <h4 id="dynamicMinName">灞備綆娓�</h4>
+ </div>
+ </div>
+ </div>
+ <div class="lq-cTop-3 fl ml4">
+ <div class="layui-row">
+ <div class="layui-col-lg6 lq-cTop-item">
+ <p>
+ <span id="tempIn">--</span>鈩�
+ </p>
+ <h4>浠撳唴娓�</h4>
+ </div>
+ <div class="layui-col-lg6 lq-cTop-item">
+ <p>
+ <span id="humidityIn">--</span>%
+ </p>
+ <h4>浠撳唴婀�</h4>
+ </div>
+
+ </div>
+ </div>
+ <div class="lq-cTop-4 fl ml4">
+ <div class="layui-row">
+ <div class="layui-col-lg6 lq-cTop-item">
+ <p>
+ <span id="tempOut">--</span>鈩�
+ </p>
+ <h4>浠撳娓�</h4>
+ </div>
+ <div class="layui-col-lg6 lq-cTop-item">
+ <p>
+ <span id="humidityOut">--</span>%
+ </p>
+ <h4>浠撳婀�</h4>
+ </div>
+
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+ <!--涓�-涓�-END-->
+
+ <div class="lq-right fr">
+ <div class="lq-r-fx">
+ <p>鍖�</p>
+ <p>
+ <span class="fl">瑗�</span><span class="fr">涓�</span>
+ </p>
+ <p>鍗�</p>
+ </div>
+ </div>
+ <!--涓�-鍙�-EDN-->
+
+ </div>
+
+ <!-- 涓婇儴鍒� END-->
+
+ <div class="layui-row">
+
+ <div class="lq-left fl" id="lq-left2">
+
+ <!-- 淇濈鍛樹俊鎭� -->
+ <div class="lq-left2 radius-6 box-shadow">
+ <div class="lq-userbox">
+ <div class="lq-user">
+ <img th:src="@{/img/web/grain/rkbk-photo_02.png}"/>
+ <p id="storeKeeperName">淇濈鍛�</p>
+ </div>
+ <dl class="lq-userItem radius-4">
+ <dt>绾у埆</dt>
+ <dd><span id="storeKeeperLevel">楂樼骇淇濈鍛�</span></dd>
+ </dl>
+ <dl class="lq-userItem radius-4">
+ <dt>鐢佃瘽</dt>
+ <dd>
+ <span id="storeKeeperPhone">###</span>
+ </dd>
+ </dl>
+ </div>
+ </div>
+
+
+ <!-- 璐т綅鍗$墖淇℃伅 -->
+ <div class="lq-left2 radius-6 box-shadow">
+ <ul class="lq-left2-list">
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>浠撴埧绫诲瀷 :
+ </h3> <em id="depotTypeName"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>鍏ヤ粨鏃ユ湡 :
+ </h3> <em id="storeDate"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>鍌ㄩ噺(KG) :
+ </h3> <em id="storageReal"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>绮鍝佺 :
+ </h3> <em id="foodVarietyName"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>浠撳簱鐘舵�� :
+ </h3> <em id="depotStatus"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>绮浜у湴 :
+ </h3> <em id="foodLocation"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>姘村垎(%) :
+ </h3> <em id="perWet"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>鏉傝川(%) :
+ </h3> <em id="perImpurity"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>妫�娴嬩汉 :
+ </h3> <em id="checkUser"></em>
+ </li>
+ </ul>
+
+ </div>
+ </div>
+ <!--涓�-宸�- END-->
+
+ <div id="lq-center" class="lq-center2 fr">
+
+ <div style="margin-top: 10px; text-align: center;"
+ id="canvas_parent">
+ <canvas id="canvas" width="1200" height="600"></canvas>
+ </div>
+
+ <div class="lq-cLow layui-clear radius-6">
+ <form class="layui-form">
+ <div class="lq-cLow-left fl top5">
+ <div class="lq-cLow-1 fl">
+ 鎿嶄綔锛�
+ <!--<span>鍦ㄧ嚎</span>-->
+ </div>
+
+ <div class="lq-cLow-2 fl layui-form-item">
+ <label class="layui-form-label">鍏ㄩ儴</label>
+ <div class="layui-input-block">
+ <input type="checkbox" value="all" id="switch_all"
+ lay-skin="switch" lay-filter="filter_switch2" checked>
+ </div>
+ </div>
+ <div class="lq-cLow-2 fl layui-form-item">
+ <label class="layui-form-label">澶栧洿</label>
+ <div class="layui-input-block">
+ <input type="checkbox" value="outer" id="switch_outer"
+ lay-skin="switch" lay-filter="filter_switch2">
+ </div>
+ </div>
+ <div class="lq-cLow-2 fl layui-form-item">
+ <label class="layui-form-label">鍫嗗唴</label>
+ <div class="layui-input-block">
+ <input type="checkbox" value="inner" id="switch_inner"
+ lay-skin="switch" lay-filter="filter_switch2">
+ </div>
+ </div>
+
+ <div class="lq-cLow-3 fl"> </div>
+
+ <div class="lq-cLow-2 fl layui-form-item">
+ <label class="layui-form-label">灞傛樉绀�</label>
+ <div class="layui-input-block">
+ <input type="checkbox" value="lay" id="switch_lay"
+ lay-skin="switch" lay-filter="filter_switch" checked>
+ </div>
+ </div>
+ <div class="lq-cLow-2 fl layui-form-item">
+ <label class="layui-form-label">琛屾樉绀�</label>
+ <div class="layui-input-block">
+ <input type="checkbox" value="row" id="switch_row"
+ lay-skin="switch" lay-filter="filter_switch">
+ </div>
+ </div>
+ <div class="lq-cLow-2 fl layui-form-item">
+ <label class="layui-form-label">鍒楁樉绀�</label>
+ <div class="layui-input-block">
+ <input type="checkbox" value="col" id="switch_col"
+ lay-skin="switch" lay-filter="filter_switch">
+ </div>
+ </div>
+
+ </div>
+ <div class="lq-cLow-right fr">
+ <button type="button"
+ class="layui-btn layui-btn-normal layui-btn-radius"
+ id="btn_pre" onClick="last()">涓婁竴灞�
+ </button>
+
+ <button type="button"
+ class="layui-btn layui-btn-warm layui-btn-radius" id="btn_next"
+ num="1" typeTag="lay" onClick="next()">涓嬩竴灞�
+ </button>
+
+ </div>
+ </form>
+ </div>
+
+
+ </div>
+
+ <!--涓�-涓�- END-->
+
+
+ <div class="lq-right fr">
+ <div class="lq-rMenu">
+ <ul>
+ <li><a href="javascript:;" onClick="checkGrain()"
+ class="lq-a1"> <span class="l-icon lq-rMenu-icon1"></span>
+ <p>鍗曚粨閲囬泦</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="checkGrainBatch()"
+ class="lq-a1"> <span class="l-icon lq-rMenu-icon2"></span>
+ <p>澶氫粨閲囬泦</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="compare()" class="lq-a3">
+ <span class="l-icon lq-rMenu-icon3"></span>
+ <p>绮儏瀵规瘮</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="printSingle()"
+ class="lq-a2"> <span class="l-icon lq-rMenu-icon4"></span>
+ <p>鍗曚粨鎵撳嵃</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="printBatch()"
+ class="lq-a2"> <span class="l-icon lq-rMenu-icon4"></span>
+ <p>澶氫粨鎵撳嵃</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="exportBatch()"
+ class="lq-a4"> <span class="l-icon lq-rMenu-icon5"></span>
+ <p>瀵煎嚭EXCEL</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="showOrderProgress()"
+ class="lq-a4"> <span class="l-icon lq-rMenu-icon6"></span>
+ <p>妫�娴嬭褰�</p>
+ </a></li>
+ </ul>
+ </div>
+ </div>
+ <!--涓�-鍙�- END-->
+ </div>
+
+
+ </div>
+ <!--l-main end-->
+</div>
+<!--l-container end-->
+
+<script th:inline="javascript">
+ //浠撳簱鍒楄〃
+ var listDepot = [[${listDepot}]];
+ //userId
+ var userId = [[${loginUser.loginName}]];
+ var deptId = [[${deptId}]];
+ var companyId = [[${loginUser.companyId}]];
+ var dept = [[${dept}]];
+
+ var DEPOT_TYPE = [[${depotType}]]; //浠撳簱绫诲瀷
+ var depotId = [[${depotId}]];// 褰撳墠浠撳簱id锛屽瓨鍦ㄧ┖鎯呭喌
+ var socket;
+</script>
+<script th:src="@{/ajax/libs/layui/layui.js}"></script>
+<script th:src="@{/js/jquery.min.js}"></script>
+<script th:src="@{/common/constant.js}"></script>
+<script th:src="@{/common/igds-common.js}"></script>
+<script th:src="@{/grain/PrintBuilder-lay.js}"></script>
+<script th:src="@{/grain/grainPoint1.js}"></script>
+<script th:src="@{/grain/grain-export.js}"></script>
+<script th:src="@{/grain/grain-check1.js}"></script>
+</body>
+
+<!-- 鏇村鎵规閫夋嫨 -->
+<div class="layui-tab-content" id="dialogMoreSelect"
+ style="display: none;">
+ <div class="layui-inline" id="checkDateMore"></div>
+</div>
+
+
+<!-- 瀹氫箟鎵归噺鎵撳嵃閫夋嫨鍐呭 -->
+<div class="layui-tab-content" id="batchPrintSelect"
+ style="display: none;">
+ <form class="layui-form layui-form-pane">
+ <div class="layui-form-item">
+ <div class="layui-inline">
+ <label class="layui-form-label">閫夋嫨鏃ユ湡锛�</label>
+ <div class="layui-input-inline left-input">
+ <input type="text" name="printCheckDate" id="printCheckDate" placeholder="骞�-鏈�" autocomplete="off"
+ class="layui-input">
+ </div>
+ </div>
+
+ <div class="layui-inline">
+ <label class="layui-form-label">閫夋嫨鏃堕棿</label>
+ <div class="layui-input-inline">
+ <select id="printCheckHour">
+ <option value="0">涓嶉�夋嫨</option>
+ <option value="6">6鐐�</option>
+ <option value="7">7鐐�</option>
+ <option value="8">8鐐�</option>
+ <option value="9">9鐐�</option>
+ <option value="10">10鐐�</option>
+ <option value="11">11鐐�</option>
+ <option value="12">12鐐�</option>
+ <option value="13">13鐐�</option>
+ <option value="14">14鐐�</option>
+ <option value="15">15鐐�</option>
+ <option value="16">16鐐�</option>
+ <option value="17">17鐐�</option>
+ <option value="18">18鐐�</option>
+ <option value="19">19鐐�</option>
+ <option value="20">20鐐�</option>
+ <option value="21">21鐐�</option>
+ <option value="22">22鐐�</option>
+ </select>
+ </div>
+ <button type="button" onclick="getPrintBatchDepot()"
+ class="layui-btn layui-btn-sm">
+ <i class="layui-icon layui-icon-search"></i>纭
+ </button>
+ </div>
+ </div>
+ <div class="layui-inline">
+ <input type="checkbox" lay-filter="select_print_depot"
+ th:each="depot,depotSet:${listDepot}" th:value="${depot.id}"
+ th:title="${depot.name}" th:disabled="false">
+ </div>
+ </form>
+</div>
+
+<!-- 瀹氫箟姣旇緝鐨勯�夋嫨 -->
+<div class="layui-tab-content" id="compareSelect" style="display: none;">
+ <form class="layui-form layui-form-pane">
+ <div class="layui-inline">
+ <label class="layui-form-label">瀵规瘮鑼冨洿锛�</label>
+ <div class="layui-input-inline left-input">
+ <input type="text" name="compareCheckDate" id="compareCheckDate"
+ placeholder="骞�-鏈�" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </form>
+ <table class="layui-table" id="tableSelect" lay-filter="filterTable"></table>
+</div>
+
+<!-- 瀹氫箟鎵归噺瀵煎嚭閫夋嫨鍐呭 -->
+<div class="layui-tab-content" id="batchExportSelect"
+ style="display: none;">
+ <form class="layui-form layui-form-pane">
+ <div class="layui-inline">
+ <label class="layui-form-label">閫夋嫨鏃堕棿锛�</label>
+ <div class="layui-input-inline left-input">
+ <input type="text" name="printCheckDate2" id="printCheckDate2"
+ placeholder="骞�-鏈�" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ <div class="layui-inline">
+ <input type="checkbox" lay-filter="select_print_depot2"
+ th:each="depot,depotSet:${listDepot}" th:value="${depot.id}"
+ th:title="${depot.name}" th:disabled="false">
+ </div>
+ </form>
+</div>
+
+<!-- 鎵归噺閲囬泦寮瑰嚭妗� -->
+<div class="layui-tab-content" id="batchCheckSelect"
+ style="display: none;">
+ <form class="layui-form layui-form-pane">
+ <div class="layui-inline">
+ <input type="checkbox" lay-filter="select_check_depot"
+ th:each="depot,depotSet:${listDepot}" th:value="${depot.id}"
+ th:title="${depot.name}" th:disabled="false">
+ </div>
+ </form>
+</div>
+
+<!-- 绮儏閲囬泦鐐硅蛋鍔� -->
+<div class="layui-tab-content" id="pointChart" style="display: none;">
+ <div id="pointChartLine" style="width: 1300px; height: 500px;"></div>
+</div>
+
+</html>
\ No newline at end of file
diff --git a/fzzy-igdss-web/src/main/resources/templates/grain/grain-check4.html b/fzzy-igdss-web/src/main/resources/templates/grain/grain-check4.html
new file mode 100644
index 0000000..f61a36d
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/templates/grain/grain-check4.html
@@ -0,0 +1,566 @@
+<!DOCTYPE html>
+<html lang="zh-cn" xmlns:th=http://www.thymeleaf.org>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="renderer" content="webkit">
+ <title>鏅烘収绮簱绠$悊骞冲彴-绮儏妫�娴�-绛掍粨</title>
+
+ <link rel="stylesheet" type="text/css" th:href="@{/ajax/libs/layui/css/layui.css}"/>
+ <link rel="stylesheet" type="text/css" th:href="@{/grain/grain-style.css}">
+
+ <!--浣跨敤鎵撳嵃鎻掍欢 闅愯棌褰撳墠鎻掍欢 -->
+ <script th:src="@{/js/plugins/lodop/LodopFuncs.js}"></script>
+
+ <style>
+ .layui-checkbox-disbaled span {
+ background-color: #ed5565 !important;
+ }
+
+ .lq-rMenu {
+ position: relative;
+ }
+
+ .lq-left2-list li h3 {
+ float: left;
+ /*color: rgb(108, 119, 129);*/
+ color: #000;
+ font-size: 16px;
+ font-style: italic;
+ }
+
+ @media all and (max-width: 1650px) {
+ .lq-cPic-box {
+ margin: 5% auto 0 auto;
+ }
+
+ .lq-center {
+ padding-bottom: 50px;
+ }
+
+ .lq-left2-list li {
+ padding: 3% 6%;
+ }
+
+ .lq-cTop-item p span {
+ font-size: 24px;
+ }
+ }
+
+ .lq-center {
+ width: 79%;
+ position: relative;
+ padding-bottom: 50px;
+ overflow: hidden;
+ }
+
+ .lq-cLow-1 {
+ width: 50px;
+ border-right: 1px solid #333;
+ }
+
+ .lq-cLow {
+ width: 690px;
+ left: 320px;
+ height: 40px;
+ }
+
+ .lq-cLow-right .layui-btn {
+ height: 38px;
+ line-height: 38px;
+ width: 100px;
+ }
+
+ .lq-cLow-3 {
+ width: 15px;
+ border-right: 1px solid #333;
+ }
+
+ .lq-cTop {
+ margin-top: 10px;
+ float: left;
+ width: 28%;
+ }
+
+ .lq-cTop-1 {
+ width: 100%;
+ }
+
+ .lq-cTop-2 {
+ width: 100%;
+ }
+
+ .m-top-30 {
+ margin-top: 30px;
+ }
+
+ .m-top-15 {
+ margin-top: 18px;
+ }
+
+ .lq-right {
+ right: 10px;
+ }
+
+ .lq-rMenu li a p {
+ color: #FFF;
+ }
+
+ .lq-cLow-left {
+ margin-top: 8px;
+ }
+
+ .lq-rMenu li {
+ height: 80px;
+ }
+
+ .layui-form-checkbox {
+ min-width: 100px;
+ }
+
+ .layui-form-switch {
+ height: 30px;
+ line-height: 30px;
+ width: 50px;
+ margin-top: 13px;
+ }
+
+ .layui-form-switch i {
+ margin-top: 3px;
+ }
+
+ .input-root {
+ width: 40px;
+ margin-left: 20px;
+ margin-top: 10px;
+ height: 35px;
+ }
+
+ .btn-next {
+ margin-top: 20px !important;
+ cursor: pointer;
+ }
+
+ .kccz-data-dw {
+ position: absolute;
+ right: 10px;
+ top: 10px;
+ z-index: 9;
+ line-height: 34px;
+ display: block;
+ height: 32px;
+ text-align: center;
+ cursor: pointer;
+ }
+ </style>
+
+</head>
+
+<body>
+<div class="l-container">
+ <div class="l-main layui-clear">
+ <div class="lq-left fl">
+ <div class="lq-left1 layui-clear radius-6 box-shadow">
+ <form class="layui-form" action="">
+
+ <div class="layui-form-item lq-left1-from">
+ <label class="layui-form-label">浠撳簱鍒楄〃</label>
+ <div class="layui-input-block">
+ <select name="depotId" id="depotId" lay-filter="select_depotId">
+ <option value=""></option>
+ <option th:each="depot,depotSet:${listDepot}"
+ th:value="${depot.id}" th:text="${depot.name}"
+ th:type="${depot.depotType}"></option>
+ </select>
+ </div>
+ </div>
+
+ <div class="layui-form-item lq-left1-from">
+ <label class="layui-form-label">妫�娴嬫椂闂�</label>
+ <div class="layui-input-block">
+ <select name="batchId" id="batchId" lay-filter="select_batchId">
+ <option value=""></option>
+ </select>
+ </div>
+ </div>
+
+ </form>
+ </div>
+
+ <!-- 娣诲姞淇濈鍛樹俊鎭�-->
+ <div class="lq-left2 radius-6 box-shadow">
+ <div class="lq-userbox">
+ <div class="lq-user">
+ <img th:src="@{/img/web/grain/rkbk-photo_02.png}"/>
+ <p id="storeKeeperName">淇濈鍛�</p>
+ </div>
+ <dl class="lq-userItem radius-4">
+ <dt>绾у埆</dt>
+ <dd>楂樼骇淇濈鍛�</dd>
+ </dl>
+ <dl class="lq-userItem radius-4">
+ <dt>鐢佃瘽</dt>
+ <dd>
+ <span id="storeKeeperPhone">###</span>
+ </dd>
+ </dl>
+ </div>
+ </div>
+
+ <div class="lq-left2 radius-6 box-shadow" id="mainLeft">
+ <ul class="lq-left2-list">
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>浠撴埧绫诲瀷 :
+ </h3> <em id="depotTypeName"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>鍏ヤ粨鏃ユ湡 :
+ </h3> <em id="storeDate"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>鍌ㄩ噺(KG) :
+ </h3> <em id="storageReal"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>绮鍝佺 :
+ </h3> <em id="foodVarietyName"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>浠撳簱鐘舵�� :
+ </h3> <em id="depotStatus"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>绮浜у湴 :
+ </h3> <em id="foodLocation"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>姘村垎(%) :
+ </h3> <em id="perWet"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>鏉傝川(%) :
+ </h3> <em id="perImpurity"></em>
+ </li>
+ <li>
+ <h3>
+ <span class="layui-badge-dot"></span>妫�娴嬩汉 :
+ </h3> <em id="checkUser"></em>
+ </li>
+ </ul>
+
+ </div>
+ <!--lq-left2 end-->
+
+ </div>
+ <!--lq-left end-->
+ <div id="lq-center" class="lq-center fr">
+ <div class="lq-cTop layui-clear" id="topInfo">
+ <div class="lq-cTop-1">
+ <div class="layui-row">
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="tempAve">--</span>鈩�
+ </p>
+ <h4>绮潎娓�</h4>
+ </div>
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="tempMax">--</span>鈩�
+ </p>
+ <h4>绮珮娓�</h4>
+ </div>
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="tempMin">--</span>鈩�
+ </p>
+ <h4>绮綆娓�</h4>
+ </div>
+ </div>
+ </div>
+ <div class="lq-cTop-2 m-top-15">
+ <div class="layui-row">
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="dynamicAve">--</span>鈩�
+ </p>
+ <h4 id="dynamicAveName">灞傚潎娓�</h4>
+ </div>
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="dynamicMax">--</span>鈩�
+ </p>
+ <h4 id="dynamicMaxName">灞傞珮娓�</h4>
+ </div>
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p>
+ <span id="dynamicMin">--</span>鈩�
+ </p>
+ <h4 id="dynamicMinName">灞備綆娓�</h4>
+ </div>
+ </div>
+ </div>
+ <div class="lq-cTop-3-2 m-top-15">
+ <div class="layui-row">
+ <div class="layui-col-lg6 lq-cTop-item">
+ <p>
+ <span id="tempIn">--</span>鈩�
+ </p>
+ <h4>浠撳唴娓�</h4>
+ </div>
+ <div class="layui-col-lg6 lq-cTop-item">
+ <p>
+ <span id="humidityIn">--</span>%
+ </p>
+ <h4>浠撳唴婀�</h4>
+ </div>
+
+ </div>
+ </div>
+ <div class="lq-cTop-4-2 m-top-15">
+ <div class="layui-row">
+ <div class="layui-col-lg6 lq-cTop-item">
+ <p>
+ <span id="tempOut">--</span>鈩�
+ </p>
+ <h4>浠撳娓�</h4>
+ </div>
+ <div class="layui-col-lg6 lq-cTop-item">
+ <p>
+ <span id="humidityOut">--</span>%
+ </p>
+ <h4>浠撳婀�</h4>
+ </div>
+
+ </div>
+ </div>
+
+ <form class="layui-form" action="">
+ <div class="lq-cTop-1 m-top-15">
+ <div class="layui-row">
+ <div class="layui-col-lg4 lq-cTop-item">
+ <div>
+ <input type="checkbox" checked="" id="switch_all" value="all"
+ lay-skin="switch" lay-filter="filter_switch2" lay-text="寮�|鍏�">
+ </div>
+ <h4>鍏ㄥ眰鏌ョ湅</h4>
+ </div>
+
+ <div class="layui-col-lg4 lq-cTop-item">
+ <div>
+ <input type="checkbox" value="outer" id="switch_outer"
+ lay-skin="switch" lay-filter="filter_switch2" lay-text="寮�|鍏�">
+ </div>
+ <h4>鏌ョ湅澶栧湀</h4>
+ </div>
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p class="btn-next" onClick="last()" id="btn_pre">
+ <span>涓婁竴灞�</span>
+ </p>
+ </div>
+
+ </div>
+ </div>
+
+
+ <div class="lq-cTop-1 m-top-15">
+ <div class="layui-row">
+ <div class="layui-col-lg4 lq-cTop-item">
+ <div>
+ <input type="checkbox" value="inner" id="switch_inner"
+ lay-skin="switch" lay-filter="filter_switch2" lay-text="寮�|鍏�">
+ </div>
+ <h4>鏌ョ湅鍐呭湀</h4>
+ </div>
+
+ <div class="layui-col-lg4 lq-cTop-item">
+ <div>
+ <input type="text"
+ class="layui-input input-root" id="value_col">
+ <em class="kccz-data-dw" onclick="showCol()">纭畾</em>
+ </div>
+ <h4>鍗曟牴鏌ョ湅</h4>
+ </div>
+ <div class="layui-col-lg4 lq-cTop-item">
+ <p class="btn-next" onClick="next()" id="btn_next" num="1" typeTag="lay">
+ <span>涓嬩竴灞�</span>
+ </p>
+ </div>
+
+ </div>
+ </div>
+
+ </form>
+
+ </div>
+
+ <div style="margin-top: 10px; width: 70%; float: left;" id="canvas_parent">
+ <canvas id="canvas" width="950" height="720"></canvas>
+ </div>
+
+ </div>
+ </div>
+ <!--lq-center end-->
+
+ <div class="lq-right fr">
+ <div class="lq-r-fx">
+ <p>鍖�</p>
+ <p>
+ <span class="fl">瑗�</span><span class="fr">涓�</span>
+ </p>
+ <p>鍗�</p>
+ </div>
+ <div class="lq-rMenu">
+ <ul>
+ <li><a href="javascript:;" onClick="checkGrain()"
+ class="lq-a1"> <span class="l-icon lq-rMenu-icon1"></span>
+ <p>鍗曚粨閲囬泦</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="checkGrainBatch()"
+ class="lq-a2"> <span class="l-icon lq-rMenu-icon2"></span>
+ <p>澶氫粨閲囬泦</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="compare()" class="lq-a3">
+ <span class="l-icon lq-rMenu-icon3"></span>
+ <p>绮儏瀵规瘮</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="printSingle()"
+ class="lq-a4"> <span class="l-icon lq-rMenu-icon4"></span>
+ <p>鍗曚粨鎵撳嵃</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="printBatch()"
+ class="lq-a5"> <span class="l-icon lq-rMenu-icon5"></span>
+ <p>澶氫粨鎵撳嵃</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="exportBatch()"
+ class="lq-a4"> <span class="l-icon lq-rMenu-icon5"></span>
+ <p>瀵煎嚭EXCEL</p>
+ </a></li>
+ <li><a href="javascript:;" onClick="showOrderProgress()"
+ class="lq-a6"> <span class="l-icon lq-rMenu-icon6"></span>
+ <p>妫�娴嬭褰�</p>
+ </a></li>
+ </ul>
+ </div>
+
+ </div>
+ <!--lq-right end-->
+
+</div>
+<!--l-main end-->
+</div>
+<!--l-container end-->
+
+<script th:inline="javascript">
+ //浠撳簱鍒楄〃
+ var listDepot = [[${listDepot}]];
+ //userId
+ var userId = [[${loginUser.loginName}]];
+ var deptId = [[${deptId}]];
+ var companyId = [[${loginUser.companyId}]];
+ var dept = [[${dept}]];
+ var DEPOT_TYPE = [[${depotType}]]; //浠撳簱绫诲瀷
+ var depotId = [[${depotId}]];// 褰撳墠浠撳簱id锛屽瓨鍦ㄧ┖鎯呭喌
+ var socket;
+</script>
+
+<script th:src="@{/ajax/libs/layui/layui.js}"></script>
+<script th:src="@{/js/jquery.min.js}"></script>
+<script th:src="@{/common/constant.js}"></script>
+<script th:src="@{/common/igds-common.js}"></script>
+<script th:src="@{/grain/PrintBuilder-lay.js}"></script>
+<script th:src="@{/grain/grainPoint4.js}"></script>
+<script th:src="@{/grain/grain-export.js}"></script>
+<script th:src="@{/grain/grain-check1.js}"></script>
+</body>
+
+<!-- 鏇村鎵规閫夋嫨 -->
+<div class="layui-tab-content" id="dialogMoreSelect"
+ style="display: none;">
+ <div class="layui-inline" id="checkDateMore"></div>
+</div>
+
+
+<!-- 瀹氫箟鎵归噺鎵撳嵃閫夋嫨鍐呭 -->
+<div class="layui-tab-content" id="batchPrintSelect"
+ style="display: none;">
+ <form class="layui-form layui-form-pane">
+ <div class="layui-inline">
+ <label class="layui-form-label">閫夋嫨鏃堕棿锛�</label>
+ <div class="layui-input-inline left-input">
+ <input type="text" name="printCheckDate" id="printCheckDate"
+ placeholder="骞�-鏈�" autocomplete="off" class="layui-input">
+ </div>
+ <button type="button" onclick="getPrintBatchDepot()"
+ class="layui-btn layui-btn-radius layui-btn-sm">
+ <i class="layui-icon layui-icon-search"></i>纭鏌ヨ
+ </button>
+ </div>
+ <div class="layui-inline">
+ <input type="checkbox" lay-filter="select_print_depot"
+ th:each="depot,depotSet:${listDepot}" th:value="${depot.id}"
+ th:title="${depot.name}" th:disabled="false">
+ </div>
+ </form>
+</div>
+
+<!-- 瀹氫箟姣旇緝鐨勯�夋嫨 -->
+<div class="layui-tab-content" id="compareSelect" style="display: none;">
+ <form class="layui-form layui-form-pane">
+ <div class="layui-inline">
+ <label class="layui-form-label">瀵规瘮鑼冨洿锛�</label>
+ <div class="layui-input-inline left-input">
+ <input type="text" name="compareCheckDate" id="compareCheckDate"
+ placeholder="骞�-鏈�" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </form>
+ <table class="layui-table" id="tableSelect" lay-filter="filterTable"></table>
+</div>
+
+<!-- 瀹氫箟鎵归噺瀵煎嚭閫夋嫨鍐呭 -->
+<div class="layui-tab-content" id="batchExportSelect"
+ style="display: none;">
+ <form class="layui-form layui-form-pane">
+ <div class="layui-inline">
+ <label class="layui-form-label">閫夋嫨鏃堕棿锛�</label>
+ <div class="layui-input-inline left-input">
+ <input type="text" name="printCheckDate2" id="printCheckDate2"
+ placeholder="骞�-鏈�" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ <div class="layui-inline">
+ <input type="checkbox" lay-filter="select_print_depot2"
+ th:each="depot,depotSet:${listDepot}" th:value="${depot.id}"
+ th:title="${depot.name}" th:disabled="false">
+ </div>
+ </form>
+</div>
+
+
+<!-- 鎵归噺閲囬泦寮瑰嚭妗� -->
+<div class="layui-tab-content" id="batchCheckSelect"
+ style="display: none;">
+ <form class="layui-form layui-form-pane">
+ <div class="layui-inline">
+ <input type="checkbox" lay-filter="select_check_depot"
+ th:each="depot,depotSet:${listDepot}" th:value="${depot.id}"
+ th:title="${depot.name}" th:disabled="false">
+ </div>
+ </form>
+</div>
+
+<!-- 绮儏閲囬泦鐐硅蛋鍔� -->
+<div class="layui-tab-content" id="pointChart" style="display: none;">
+ <div id="pointChartLine" style="width: 1300px; height: 500px;"></div>
+</div>
+
+</html>
diff --git a/fzzy-igdss-web/src/main/resources/templates/grain/order-list.html b/fzzy-igdss-web/src/main/resources/templates/grain/order-list.html
new file mode 100644
index 0000000..dcbd4fe
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/templates/grain/order-list.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html>
+<html lang="zh-cn" xmlns:th=http://www.thymeleaf.org>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="renderer" content="webkit">
+ <title>Layui</title>
+
+ <link rel="stylesheet" type="text/css" th:href="@{/ajax/libs/layui/css/layui.css}"/>
+
+ <style>
+ body {
+ font-family: "寰蒋闆呴粦", Arial, sans-serif;
+ font-size: 14px;
+ background: #f3f5f8;
+ }
+
+ table {
+ overflow-x: hidden;
+ }
+
+ .progress {
+ padding: 15px;
+ }
+
+ .progress-r {
+ padding-left: 15px;
+ }
+
+ .progress-r span {
+ font-size: 16px;
+ font-weight: bold;
+ }
+
+ .layui-progress {
+ background-color: #666;
+ }
+
+ .layui-table {
+ color: #0C0C0C;
+ }
+
+ .layui-table thead tr {
+ border-bottom: 3px solid #53adce;
+ }
+
+ .layui-table thead th {
+ font-weight: bold;
+ }
+
+ .remark {
+ padding: 0px 15px 0px 15px;
+ height: 22px;
+ line-height: 22px;
+ color: #FF5722;
+ font-size: 12px;
+ font-weight: bold;
+ float: left;
+ }
+
+ .btn-clean {
+ background-color: #FF5722;
+ color: #FFF;
+ }
+
+ .s-error {
+ font-weight: bold;
+ color: #FF5722;
+ }
+
+ .s-complete {
+ font-weight: bold;
+ color: #5FB878;
+ }
+
+ .s-none {
+ font-weight: bold;
+ }
+ </style>
+</head>
+
+<body>
+<div class="layui-clear">
+
+ <div class="layui-row progress">
+
+ <div class="layui-col-md6">
+ <div class="layui-progress layui-progress-big"
+ lay-filter="filter-progress" lay-showpercent="yes">
+ <div class="layui-progress-bar" lay-percent="0%"
+ id="filter-progress"></div>
+ </div>
+ </div>
+
+ <div class="layui-col-md6">
+ <div class="progress-r">
+ 鍏辨墽琛屽懡浠わ細<span id="check_sumNum">0</span>涓�
+ 宸叉墽琛岋細<span id="check_completeNum">0</span>涓�
+ 澶辫触锛�<span id="check_errorNum">0</span>涓�
+ </div>
+ </div>
+
+ </div>
+
+ <div class="layui-row">
+ <table class="layui-hide" id="tableOrder"
+ lay-data="{id: 'tableOrder'}"></table>
+ </div>
+
+ <div class="layui-row">
+ <span class="remark">娉細鏁版嵁涓哄綋鍓嶅簱鍖鸿繎8涓皬鏃跺唴鎵ц璁板綍鍜岀粺璁★紝鍙互娓呴櫎锛屼笉褰卞搷鎵ц鏃ュ織</span>
+ <button type="button"
+ class="layui-btn layui-btn-primary btn-clean layui-btn-xs"
+ onclick="clean()">鐐瑰嚮娓呴櫎
+ </button>
+
+ <button type="button"
+ class="layui-btn layui-btn-primary btn-clean layui-btn-xs"
+ id="btn-auto" onclick="autoFlush()">鑷姩鍒锋柊涓�
+ </button>
+ </div>
+
+</div>
+<script th:src="@{/ajax/libs/layui/layui.js}"></script>
+<script th:src="@{/js/jquery.min.js}"></script>
+<script th:inline="javascript">
+ //涓氬姟绫诲瀷
+ var bizType = [[${bizType}]];
+ //userId
+ var userId = [[${loginUser.loginName}]];
+ var companyId = [[${loginUser.companyId}]];
+ var deptId = [[${deptId}]];//褰撳墠浜烘墍鍦ㄩ儴闂↖D
+
+ var orderList;
+
+ var autoTag = true;
+
+ var table;
+ var element;
+
+ layui.use(['table', 'element'], function () {
+ table = layui.table;
+ element = layui.element;
+ table.render({
+ elem: '#tableOrder',
+ url: '/grain/query-order-list?deptId=' + deptId,
+ width: 980,
+ height: 460,
+ cols: [
+ [
+ {field: 'exeTime', width: 170, title: '鎵ц鏃堕棿', sort: true, align: 'center'},
+ {field: 'depotName', width: 150, title: '鎵�灞炰粨搴�', sort: true, align: 'center'},
+ {field: 'exeUser', width: 130, title: '妫�娴嬩汉', align: 'center'},
+ {
+ field: 'status', width: 120, title: '鎵ц鐘舵��', align: 'center', templet: function (d) {
+ if ('IN_PROGRESS' == d.status) {
+ return "<span class='s-none'>鎵ц涓�</span>";
+ } else if ('SEND_ERROR' == d.status) {
+ return "<span class='s-error'>鍙戦�佸け璐�</span>";
+ } else if ('ANALYSIS_ERROR' == d.status) {
+ return "<span class='s-error'>瑙f瀽澶辫触</span>";
+ } else if ("TIMEOUT_ERROR" == d.status) {
+ return "<span class='s-error'>澶勭悊瓒呮椂</span>";
+ } else {
+ return "<span class='s-complete'>鎴愬姛瀹屾垚</span>";
+ }
+ }
+ },
+ {field: 'errorMsg', title: '鎵ц璇存槑', align: 'center'}
+ ]
+ ],
+ page: false,
+ done: function (res, cuur, count) {
+ orderList = res.data;
+ exeProgress();
+ }
+ });
+ });
+
+ function exeProgress() {
+ //console.log("--------------exeProgress----------------");
+ //console.log(orderList);
+ var sumNum = 0, completeNum = 0, errorNum = 0, per = 0;
+ if (orderList) {
+ $.each(orderList, function (index, data) {
+ sumNum = orderList.length;
+ if ("SEND_ERROR" == data.status || "ANALYSIS_ERROR" == data.status || "TIMEOUT_ERROR" == data.status) {
+ completeNum++;
+ errorNum++;
+ }
+ if ("COMPLETE" == data.status) {
+ completeNum++;
+ }
+ });
+ }
+
+ if (sumNum > 0) {
+ per = (completeNum / sumNum * 100).toFixed(1);
+ }
+ // console.log("-------per------"+per);
+ element.progress('filter-progress', per + "%");
+ //璧嬪��
+ $("#check_sumNum").text(sumNum);
+ $("#check_completeNum").text(completeNum);
+ $("#check_errorNum").text(errorNum);
+ }
+
+ /**
+ *娓呴櫎鏃ュ織
+ */
+ function clean() {
+ var data = {
+ deptId: deptId,
+ companyId: companyId,
+ bizType: bizType
+ };
+ $.ajax({
+ type: "POST",
+ url: "/grain/clean-order-list",
+ dataType: "json",
+ contentType: "application/json;charset=UTF-8",
+ data: JSON.stringify(data),
+ success: function (result) {
+ if (result.code != "0000") {
+ layer.alert(result.data);
+ } else {
+ layer.msg("鏃ュ織娓呴櫎瀹屾垚锛�");
+ }
+ },
+ error: function () {
+ layer.alert("绯荤粺鍚庡彴鎵ц澶辫触锛岃鍒锋柊閲嶈瘯锛�");
+ }
+ });
+ }
+
+ function autoFlush() {
+ if (autoTag) {
+ autoTag = false;
+ $("#btn-auto").text("宸插仠姝㈠埛鏂�");
+ } else {
+ autoTag = true;
+ $("#btn-auto").text("鑷姩鍒锋柊涓�");
+ }
+ }
+
+ //璁剧疆鑷姩鍒锋柊
+ var iframeTimer;
+ window.onload = function () {
+ if (iframeTimer) {
+ clearInterval(iframeTimer);
+ }
+ iframeTimer = setInterval(function () {
+ if (autoTag) {
+ table.reload("tableOrder", {
+ url: '/grain/query-order-list?deptId=' + deptId
+ });
+ }
+ }, 6000);
+ };
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index b5d2091..a8ecfbb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,6 +18,7 @@
<module>fzzy-igdss-view</module>
<module>fzzy-igdss-web</module>
<module>fzzy-igdss-doc</module>
+ <module>fzzy-igdss-io</module>
</modules>
--
Gitblit v1.9.3