From 00ad010a45f2f58807eb0f4f70e2dcf66ef35085 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 20 六月 2024 12:26:29 +0800
Subject: [PATCH] 车轮信息追溯

---
 代码管理/PCS/WCS_Server/WIDESEA_WCS/WCSClient/Siemens/SiemensPLCClient.cs |    2 
 代码管理/PCS/WCS_Client/src/api/http.js                                   |    2 
 代码管理/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/VK4Job.cs              |    7 
 代码管理/PCS/WCS_Client/src/views/widesea_wcs/wcs/dt_info_trace.vue       |   89 ++++++++
 代码管理/PCS/WCS_Server/WIDESEA_WCS/Common/equipment/Wheel_info_trace.cs  |  256 +++++++++++++++++++++++++
 代码管理/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/VK5Job.cs              |    7 
 代码管理/PCS/WCS_Client/src/extension/widesea_wcs/wcs/dt_info_trace.js    |   75 +++++++
 代码管理/PCS/WCS_Client/src/router/viewGird.js                            |    6 
 代码管理/PCS/WCS_Server/WIDESEA_Comm/PLCDBItem/Wheel_trace.cs             |  102 ++++++++++
 9 files changed, 543 insertions(+), 3 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/api/http.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/api/http.js"
index f6b7a14..a3bcc6a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/api/http.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/api/http.js"
@@ -12,7 +12,7 @@
 let loadingInstance;
 let loadingStatus = false;
 if (process.env.NODE_ENV == 'development') {
-    axios.defaults.baseURL = 'http://192.168.12.101:8099/';
+    axios.defaults.baseURL = 'http://192.168.12.118:8099/';
 }
 else if (process.env.NODE_ENV == 'debug') {
     axios.defaults.baseURL = 'http://192.168.12.101:8099/';
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/extension/widesea_wcs/wcs/dt_info_trace.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/extension/widesea_wcs/wcs/dt_info_trace.js"
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/extension/widesea_wcs/wcs/dt_info_trace.js"
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/router/viewGird.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/router/viewGird.js"
index 6cbf1d0..9d3747c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/router/viewGird.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/router/viewGird.js"
@@ -225,6 +225,10 @@
         path: '/VV_Workinfo_hty',
         name: 'VV_Workinfo_hty',
         component: () => import('@/views/widesea_wcs/tomes/VV_Workinfo_hty.vue')
-    }]
+    }    ,{
+      path: '/dt_info_trace',
+      name: 'dt_info_trace',
+      component: () => import('@/views/widesea_wcs/wcs/dt_info_trace.vue')
+  }]
 
 export default viewgird
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/views/widesea_wcs/wcs/dt_info_trace.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/views/widesea_wcs/wcs/dt_info_trace.vue"
new file mode 100644
index 0000000..5b3cb82
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Client/src/views/widesea_wcs/wcs/dt_info_trace.vue"
@@ -0,0 +1,89 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/wcs/dt_info_trace.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/widesea_wcs/wcs/dt_info_trace.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'trace_id',
+                footer: "Foots",
+                cnName: '杞﹁疆淇℃伅杩芥函',
+                name: 'wcs/dt_info_trace',
+                url: "/dt_info_trace/",
+                sortName: "trace_online_time"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({"trace_SN":"","trace_status":"","trace_workOrder":"","trace_drawingNo":"","trace_heatID":"","trace_billetID":"","trace_line_number":"","trace_mach_number":"","trace_mach_statu":"","trace_process":"","trace_operator":"","trace_tcvm_number":""});
+            const searchFormOptions = ref([[{"title":"杞﹁疆SN鍙�","field":"trace_SN","type":"like"},{"title":"宸ヤ綔浠ゅ彿","field":"trace_workOrder","type":"like"},{"title":"浜у搧鍥惧彿","field":"trace_drawingNo","type":"like"}],[{"dataKey":"trace_status","data":[],"title":"鐘舵��","field":"trace_status","type":"select"},{"title":"鐐変唬鍙�","field":"trace_heatID","type":"like"},{"title":"閽㈠澂鍙�","field":"trace_billetID","type":"like"}],[{"title":"鐢熶骇绾跨紪鍙�","field":"trace_line_number","type":"like"},{"title":"鏈哄簥缂栧彿","field":"trace_mach_number","type":"like"},{"title":"瑙嗚妫�娴嬬紪鍙�","field":"trace_tcvm_number","type":"like"}],[{"title":"鍔犲伐璐ㄩ噺鐘舵��","field":"trace_mach_statu","type":"like"},{"title":"瀹屾垚鎯呭喌","field":"trace_process","type":"like"},{"title":"鎿嶄綔浜哄憳","field":"trace_operator","type":"like"}]]);
+            const columns = ref([{field:'ID',title:'ID',type:'int',width:80,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'trace_id',title:'涓婚敭',type:'guid',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'trace_SN',title:'杞﹁疆SN鍙�',type:'string',width:110,require:true,align:'left',sort:true},
+                       {field:'trace_status',title:'鐘舵��',type:'string',bind:{ key:'trace_status',data:[]},width:80,align:'left'},
+                       {field:'trace_workOrder',title:'宸ヤ綔浠ゅ彿',type:'string',width:120,align:'left'},
+                       {field:'trace_productName',title:'浜у搧鍚嶇О',type:'string',width:80,align:'left'},
+                       {field:'trace_drawingNo',title:'浜у搧鍥惧彿',type:'string',width:80,align:'left'},
+                       {field:'trace_heatBatchID',title:'鐔旂偧鐐夊彿',type:'string',width:100,align:'left'},
+                       {field:'trace_heatID',title:'鐐変唬鍙�',type:'string',width:60,align:'left'},
+                       {field:'trace_billetID',title:'閽㈠澂鍙�',type:'string',width:60,align:'left'},
+                       {field:'trace_line_number',title:'鐢熶骇绾跨紪鍙�',type:'string',width:100,align:'left'},
+                       {field:'trace_online_time',title:'涓婄嚎鏃堕棿',type:'datetime',width:150,align:'left',sort:true},
+                       {field:'trace_mach_number',title:'鏈哄簥缂栧彿',type:'string',sort:true,width:110,align:'left'},
+                       {field:'trace_mach_start_time',title:'鍔犲伐寮�濮嬫椂闂�',type:'datetime',sort:true,width:150,align:'left',sort:true},
+                       {field:'trace_mach_finish_time',title:'鍔犲伐瀹屾垚鏃堕棿',type:'datetime',sort:true,width:150,align:'left',sort:true},
+                       {field:'trace_mach_statu',title:'鍔犲伐璐ㄩ噺鐘舵��',type:'int',width:80,align:'left'},
+                       {field:'trace_process',title:'瀹屾垚鎯呭喌',type:'int',width:80,align:'left'},
+                       {field:'trace_operator',title:'鎿嶄綔浜哄憳',type:'string',width:110,align:'left'},
+                       {field:'trace_shift',title:'鐝粍',type:'string',width:110,align:'left'},
+                       {field:'trace_manufacturer',title:'閽㈤敪鍘傚',type:'string',width:120,align:'left'},
+                       {field:'trace_offline_time',title:'涓嬬嚎鏃堕棿',type:'datetime',sort:true,width:150,align:'left',sort:true},
+                       {field:'trace_tcvm_number',title:'瑙嗚妫�娴嬬紪鍙�',type:'string',width:110,align:'left'},
+                       {field:'trace_tcvm_start_time',title:'瑙嗚妫�娴嬪紑濮嬫椂闂�',type:'datetime',sort:true,width:150,align:'left',sort:true},
+                       {field:'trace_tcvm_finish_time',title:'瑙嗚妫�娴嬪畬鎴愭椂闂�',type:'datetime',sort:true,width:150,align:'left',sort:true},
+                       {field:'trace_tcvm_statu',title:'妫�娴嬭川閲忕姸鎬�',type:'int',width:80,align:'left'},
+                       {field:'trace_liquoring_time',title:'鍠烽槻閿堟恫鏃堕棿',type:'datetime',width:150,align:'left',sort:true},
+                       {field:'trace_bait_number',title:'涓嬫枡浣嶇紪鍙�',type:'string',width:110,align:'left'},
+                       {field:'trace_baiting_time',title:'涓嬫枡鏃堕棿',type:'datetime',sort:true,width:150,align:'left',sort:true},
+                       {field:'trace_direction',title:'鍘诲悜(寰呮搴�,澶栧崗搴�)',type:'string',width:110,align:'left'},
+                       {field:'trace_in_time',title:'鍏ュ簱鏃堕棿',type:'datetime',sort:true,width:150,align:'left',sort:true},
+                       {field:'trace_load_number',title:'涓婃枡浣嶇紪鍙�',type:'string',width:110,align:'left'},
+                       {field:'trace_loading_time',title:'涓婃枡鏃堕棿',type:'datetime',sort:true,width:150,align:'left',sort:true},
+                       {field:'trace_defect',title:'缂洪櫡鎻忚堪',type:'string',width:110,align:'left'},
+                       {field:'trace_remark',title:'澶囨敞锛氭敞鎰忎簨椤�',type:'string',width:110,align:'left'}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/PLCDBItem/Wheel_trace.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/PLCDBItem/Wheel_trace.cs"
new file mode 100644
index 0000000..c46a571
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/PLCDBItem/Wheel_trace.cs"
@@ -0,0 +1,102 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Comm
+{
+    public class Wheel_trace
+    {
+        /// <summary>
+        /// 杞﹁疆涓婄嚎锛圖B610锛�
+        /// </summary>
+        public class Wheel_online
+        {
+            /// <summary>
+            /// 鍚嶇О
+            /// </summary>
+            public string Name { get; set; }
+            /// <summary>
+            /// 杞﹁疆SN鍙�
+            /// </summary>
+            public string o_wp_id { get; set; }
+            /// <summary>
+            /// 涓婄嚎鏃堕棿
+            /// </summary>
+            public string o_online_time { get; set; }
+            /// <summary>
+            /// 鐢宠
+            /// </summary>
+            public byte oi_on { get; set; }
+        }
+        /// <summary>
+        /// 杞﹁疆鍔犲伐锛圖B611锛�
+        /// </summary>
+        public class Wheel_Machine
+        {
+            /// <summary>
+            /// 鍚嶇О
+            /// </summary>
+            public string Name { get; set; }
+            /// <summary>
+            /// 杞﹁疆SN鍙�
+            /// </summary>
+            public string o_wp_id { get; set; }
+            /// <summary>
+            /// 鍔犲伐寮�濮嬫椂闂�
+            /// </summary>
+            public string o_mach_start_time { get; set; }
+            /// <summary>
+            /// 鍔犲伐瀹屾垚鏃堕棿
+            /// </summary>
+            public string o_mach_finish_time { get; set; }
+            /// <summary>
+            /// 鎿嶄綔浜�
+            /// </summary>
+            public string o_operator { get; set; }
+            /// <summary>
+            /// 鐝粍
+            /// </summary>
+            public string o_shift { get; set; }
+            /// <summary>
+            /// 鍔犲伐璐ㄩ噺鐘舵��
+            /// </summary>
+            public Int16 o_wp_status { get; set; }
+            /// <summary>
+            /// 瀹屾垚鎯呭喌
+            /// </summary>
+            public Int16 o_wp_process { get; set; }
+            /// <summary>
+            /// 鐢宠
+            /// </summary>
+            public byte oi_on { get; set; }
+        }
+        /// <summary>
+        /// 杞﹁疆涓嬬嚎锛圖B612锛�
+        /// </summary>
+        public class Wheel_offline
+        {
+            /// <summary>
+            /// 鍚嶇О
+            /// </summary>
+            public string Name { get; set; }
+            /// <summary>
+            /// 杞﹁疆SN鍙�
+            /// </summary>
+            public string o_wp_id { get; set; }
+            /// <summary>
+            /// 涓嬬嚎鏃堕棿
+            /// </summary>
+            public string o_offline_time { get; set; }
+            /// <summary>
+            /// 鍘诲悜
+            /// </summary>
+            public byte o_direction { get; set; }
+            /// <summary>
+            /// 鐢宠
+            /// </summary>
+            public byte oi_on { get; set; }
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/equipment/Wheel_info_trace.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/equipment/Wheel_info_trace.cs"
new file mode 100644
index 0000000..b9cc677
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/equipment/Wheel_info_trace.cs"
@@ -0,0 +1,256 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Comm;
+using WIDESEA_Core.EFDbContext;
+using WIDESEA_Entity.DomainModels;
+using WIDESEA_WCS.IRepositories;
+using WIDESEA_WCS.Repositories;
+using WIDESEA_WCS.WCSClient;
+using WIDESEA_WMS.IRepositories;
+using WIDESEA_WMS.Repositories;
+using static WIDESEA_Comm.Wheel_trace;
+
+namespace WIDESEA_WCS
+{
+    public class Wheel_info_trace
+    {
+        /// <summary>
+        /// 鏌ヨ杞﹁疆涓婄嚎
+        /// </summary>
+        /// <param name="client"></param>
+        public static void Wheel_online(PLCClient client)
+        {
+            VOLContext context = new VOLContext();
+            Idt_info_traceRepository traceRepository = new dt_info_traceRepository(context);
+            IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context);
+            PropertyInfo[] propertyInfos = typeof(Wheel_online).GetProperties();
+            var groups = client.itemGroups.Where(x => x.opratortype == "trace_online").OrderBy(x => x.Methods).ThenBy(x => x.name).GroupBy(x => x.Methods).ToList();
+            foreach (var key in groups)
+            {
+                try
+                {
+                    Wheel_online StackerDBItem = new Wheel_online();
+                    foreach (var propertyInfo in propertyInfos)
+                    {
+                        if (propertyInfo.Name == "Name")
+                        {
+                            StackerDBItem.Name = key.Key;
+                        }
+                        else
+                        {
+                            DBItemGroup group = key.FirstOrDefault(x => x.name == propertyInfo.Name);
+                            if (group != null)
+                            {
+                                var readData = DBExtension.Read(group, client);
+                                switch (propertyInfo.Name)
+                                {
+                                    case "oi_on":
+                                        StackerDBItem.oi_on = Convert.ToByte(readData);
+                                        break;
+                                    case "o_wp_id":
+                                        StackerDBItem.o_wp_id = Convert.ToString(readData);
+                                        break;
+                                    case "o_online_time":
+                                        StackerDBItem.o_online_time = readData.ToString();
+                                        break;
+                                }
+                            }
+                        }
+                    }
+                    #region 鏇挎崲鑰丳CS鏃朵娇鐢�
+                    if (/*StackerDBItem.oi_on == 1*/true)
+                    {
+                        if (string.IsNullOrEmpty(StackerDBItem.o_wp_id)) throw new Exception($"{StackerDBItem.Name}锛歋N鍙蜂负绌�");
+                        if (string.IsNullOrEmpty(StackerDBItem.o_online_time)) throw new Exception($"{StackerDBItem.Name}锛氫笂绾挎椂闂翠负绌�");
+                        var info = traceRepository.Find(x => x.trace_SN == StackerDBItem.o_wp_id).FirstOrDefault();
+                        if (info != null) throw new Exception();
+                        info = new dt_info_trace();
+                        info.trace_SN = StackerDBItem.o_wp_id;
+                        var time = DateTime.ParseExact(StackerDBItem.o_online_time, "yyyyMMddHHmmss", CultureInfo.CurrentCulture);
+                        //var time1 = DateTime.ParseExact(StackerDBItem.o_online_time, "yyyyMMddHHmmss", new CultureInfo("zh-CN", true));
+                        info.trace_status = "寰呭姞宸�";
+                        info.trace_online_time = time;
+                        info.trace_line_number = StackerDBItem.Name;
+                        var Work = workinfoRepository.Find(x => x.SN == info.trace_SN && x.processCode == "17").FirstOrDefault();
+                        if (Work != null)
+                        {
+                            info.trace_workOrder = Work.workOrder;
+                            info.trace_productName = Work.productName;
+                            info.trace_drawingNo = Work.drawingNo;
+                            info.trace_heatBatchID = Work.heatBatchID;
+                            info.trace_heatID = Work.heatID;
+                            info.trace_billetID = Work.billetID.ToString();
+                        }
+                        traceRepository.Add(info, true);
+                        //client.Write(key.FirstOrDefault(x => x.name == "oi_on").dbAddress, (byte)0);//淇″彿澶嶄綅
+                    }
+                    #endregion
+                }
+                catch (Exception ex)
+                {
+                    //client.Write(key.FirstOrDefault(x => x.name == "oi_on").dbAddress, (byte)0);//淇″彿澶嶄綅
+                }
+            }
+        }
+        /// <summary>
+        /// 鏌ヨ杞﹁疆鍔犲伐
+        /// </summary>
+        /// <param name="client"></param>
+        public static void Wheel_machine(PLCClient client)
+        {
+            VOLContext context = new VOLContext();
+            Idt_info_traceRepository traceRepository = new dt_info_traceRepository(context);
+            PropertyInfo[] propertyInfos = typeof(Wheel_Machine).GetProperties();
+            var groups = client.itemGroups.Where(x => x.opratortype == "trace_Machine").OrderBy(x => x.Methods).ThenBy(x => x.name).GroupBy(x => x.Methods).ToList();
+            foreach (var key in groups)
+            {
+                try
+                {
+                    Wheel_Machine StackerDBItem = new Wheel_Machine();
+                    foreach (var propertyInfo in propertyInfos)
+                    {
+                        if (propertyInfo.Name == "Name")
+                        {
+                            StackerDBItem.Name = key.Key;
+                        }
+                        else
+                        {
+                            DBItemGroup group = key.FirstOrDefault(x => x.name == propertyInfo.Name);
+                            if (group != null)
+                            {
+                                var readData = DBExtension.Read(group, client);
+                                switch (propertyInfo.Name)
+                                {
+                                    case "oi_on":
+                                        StackerDBItem.oi_on = Convert.ToByte(readData);
+                                        break;
+                                    case "o_wp_id":
+                                        StackerDBItem.o_wp_id = Convert.ToString(readData);
+                                        break;
+                                    case "o_mach_start_time":
+                                        StackerDBItem.o_mach_start_time = readData.ToString();
+                                        break;
+                                    case "o_mach_finish_time":
+                                        StackerDBItem.o_mach_finish_time = readData.ToString();
+                                        break;
+                                    case "o_operator":
+                                        StackerDBItem.o_operator = readData.ToString();
+                                        break;
+                                    case "o_shift":
+                                        StackerDBItem.o_shift = readData.ToString();
+                                        break;
+                                    case "o_wp_status":
+                                        StackerDBItem.o_wp_status = Convert.ToInt16(readData);
+                                        break;
+                                    case "o_wp_process":
+                                        StackerDBItem.o_wp_process = Convert.ToInt16(readData);
+                                        break;
+                                }
+                            }
+                        }
+                    }
+                    #region 鏇挎崲鑰丳CS鏃朵娇鐢�
+                    if (/*StackerDBItem.oi_on == 1*/true)
+                    {
+                        if (string.IsNullOrEmpty(StackerDBItem.o_wp_id)) throw new Exception($"{StackerDBItem.Name}锛歋N鍙蜂负绌�");
+                        var info = traceRepository.Find(x => x.trace_SN == StackerDBItem.o_wp_id).FirstOrDefault();
+                        if (info != null)
+                        {
+                            if (!string.IsNullOrEmpty(StackerDBItem.o_mach_start_time))
+                                info.trace_mach_start_time = DateTime.ParseExact(StackerDBItem.o_mach_start_time, "yyyyMMddHHmmss", CultureInfo.CurrentCulture);
+                            if (!string.IsNullOrEmpty(StackerDBItem.o_mach_finish_time))
+                                info.trace_mach_finish_time = DateTime.ParseExact(StackerDBItem.o_mach_finish_time, "yyyyMMddHHmmss", CultureInfo.CurrentCulture);
+                            if (!string.IsNullOrEmpty(StackerDBItem.o_operator)) info.trace_operator = StackerDBItem.o_operator;
+                            if (!string.IsNullOrEmpty(StackerDBItem.o_shift)) info.trace_shift = info.trace_shift;
+                            info.trace_mach_statu = StackerDBItem.o_wp_status;
+                            info.trace_process = StackerDBItem.o_wp_process;
+                            info.trace_mach_number = StackerDBItem.Name;
+                            traceRepository.Update(info, x => new { x.trace_mach_start_time, x.trace_mach_finish_time, x.trace_operator, x.trace_shift, x.trace_mach_statu, x.trace_process, x.trace_mach_number }, true);
+                        }
+                        //client.Write(key.FirstOrDefault(x => x.name == "oi_on").dbAddress, (byte)0);//淇″彿澶嶄綅
+                    }
+                    #endregion
+                }
+                catch (Exception ex)
+                {
+                    //client.Write(key.FirstOrDefault(x => x.name == "oi_on").dbAddress, (byte)0);//淇″彿澶嶄綅
+                }
+            }
+        }
+        /// <summary>
+        /// 鏌ヨ杞﹁疆涓嬬嚎
+        /// </summary>
+        /// <param name="client"></param>
+        public static void Wheel_offline(PLCClient client)
+        {
+            VOLContext context = new VOLContext();
+            Idt_info_traceRepository traceRepository = new dt_info_traceRepository(context);
+            PropertyInfo[] propertyInfos = typeof(Wheel_offline).GetProperties();
+            var groups = client.itemGroups.Where(x => x.opratortype == "trace_offline").OrderBy(x => x.Methods).ThenBy(x => x.name).GroupBy(x => x.Methods).ToList();
+            foreach (var key in groups)
+            {
+                try
+                {
+                    Wheel_offline StackerDBItem = new Wheel_offline();
+                    foreach (var propertyInfo in propertyInfos)
+                    {
+                        if (propertyInfo.Name == "Name")
+                        {
+                            StackerDBItem.Name = key.Key;
+                        }
+                        else
+                        {
+                            DBItemGroup group = key.FirstOrDefault(x => x.name == propertyInfo.Name);
+                            if (group != null)
+                            {
+                                var readData = DBExtension.Read(group, client);
+                                switch (propertyInfo.Name)
+                                {
+                                    case "oi_on":
+                                        StackerDBItem.oi_on = Convert.ToByte(readData);
+                                        break;
+                                    case "o_wp_id":
+                                        StackerDBItem.o_wp_id = Convert.ToString(readData);
+                                        break;
+                                    case "o_offline_time":
+                                        StackerDBItem.o_offline_time = readData.ToString();
+                                        break;
+                                    case "o_direction":
+                                        StackerDBItem.o_direction = Convert.ToByte(readData);
+                                        break;
+                                }
+                            }
+                        }
+                    }
+                    #region 鏇挎崲鑰丳CS鏃朵娇鐢�
+                    if (/*StackerDBItem.oi_on == 1*/true)
+                    {
+                        if (string.IsNullOrEmpty(StackerDBItem.o_wp_id)) throw new Exception($"{StackerDBItem.Name}锛歋N鍙蜂负绌�");
+                        var info = traceRepository.Find(x => x.trace_SN == StackerDBItem.o_wp_id).FirstOrDefault();
+                        if (info != null)
+                        {
+                            if (!string.IsNullOrEmpty(StackerDBItem.o_offline_time))
+                                info.trace_offline_time = DateTime.ParseExact(StackerDBItem.o_offline_time, "yyyyMMddHHmmss", CultureInfo.CurrentCulture);
+                            info.trace_direction = StackerDBItem.o_direction.ToString();
+                            //info.trace_line_number = info.trace_line_number + StackerDBItem.Name;
+                            traceRepository.Update(info, x => new { x.trace_offline_time, x.trace_direction }, true);
+                        }
+                        //client.Write(key.FirstOrDefault(x => x.name == "oi_on").dbAddress, (byte)0);//淇″彿澶嶄綅
+                    }
+                    #endregion
+                }
+                catch (Exception ex)
+                {
+                    //client.Write(key.FirstOrDefault(x => x.name == "oi_on").dbAddress, (byte)0);//淇″彿澶嶄綅
+                }
+            }
+        }
+
+
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/VK4Job.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/VK4Job.cs"
index d5b1976..c96c3c0 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/VK4Job.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/VK4Job.cs"
@@ -39,10 +39,17 @@
                 client.Connect();
                 return;
             }
+            #region MyRegion
+            Wheel_info_trace.Wheel_online(client);
+            Wheel_info_trace.Wheel_machine(client);
+            Wheel_info_trace.Wheel_offline(client);
+            #endregion
+            #region 淇℃伅閲囬泦
             WheelDBItem.VK4WheelDBItem = GetDate.GetWheelDate(client);
             VKDBItem.VK4DBItem = GetDate.GetVKDate(client);
             GantryDBItem.VK4GantryDBItem = GetDate.GetGantryDate(client);
             MachineDBItem.VK4MachineDBItem = GetDate.GetMachineDate(client);
+            #endregion
         }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/VK5Job.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/VK5Job.cs"
index bca36fe..a265a27 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/VK5Job.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/VK5Job.cs"
@@ -35,10 +35,17 @@
                 client.Connect();
                 return;
             }
+            #region MyRegion
+            Wheel_info_trace.Wheel_online(client);
+            Wheel_info_trace.Wheel_machine(client);
+            Wheel_info_trace.Wheel_offline(client);
+            #endregion
+            #region 淇℃伅閲囬泦
             WheelDBItem.VK5WheelDBItem = GetDate.GetWheelDate(client);
             VKDBItem.VK5DBItem = GetDate.GetVKDate(client);
             GantryDBItem.VK5GantryDBItem = GetDate.GetGantryDate(client);
             MachineDBItem.VK5MachineDBItem = GetDate.GetMachineDate(client);
+            #endregion
         }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/WCSClient/Siemens/SiemensPLCClient.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/WCSClient/Siemens/SiemensPLCClient.cs"
index 51ab901..7e42f5b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/WCSClient/Siemens/SiemensPLCClient.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/WCSClient/Siemens/SiemensPLCClient.cs"
@@ -139,7 +139,7 @@
                 //string str = DataParse.GetStr(bytes, 0);
                 //return (DataType)(str as object);
                 var str = GetContent(siemensPLCClient.ReadString(dbAddress, (ushort)len), dbAddress).ToString();
-                str = str.Replace("\0", "")?.Replace("\\", "")?.Replace("\u0014", "")?.Replace("?\u0006", "")?.Replace("\n", "")?.Replace("?", "")?.Trim();
+                str = str.Replace("\0", "")?.Replace("\\", "")?.Replace("\u0014", "")?.Replace("?\u0006", "")?.Replace("\u000e\u000e", "")?.Replace("\n", "")?.Replace("?", "")?.Trim();
                 return (DataType)(str as object);
             }
             else

--
Gitblit v1.9.3