From 81b0ad0124847f083990d574dc8d20961ec6e713 Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期三, 01 四月 2026 14:12:55 +0800
Subject: [PATCH] feat(参数调节): 添加优化版挤出机参数调节页面

---
 app/pages/comprehensive_dashboard.py |  119 ++++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 84 insertions(+), 35 deletions(-)

diff --git a/app/pages/comprehensive_dashboard.py b/app/pages/comprehensive_dashboard.py
index 3f1097e..1cd4002 100644
--- a/app/pages/comprehensive_dashboard.py
+++ b/app/pages/comprehensive_dashboard.py
@@ -14,7 +14,7 @@
     main_process_service = MainProcessService()
 
     # 椤甸潰鏍囬
-    st.title("澶氱淮缁煎悎鍒嗘瀽")
+    st.title("鏉¢噸缁煎悎鍒嗘瀽")
 
     # 鍒濆鍖栦細璇濈姸鎬佺敤浜庢棩鏈熷悓姝�
     if 'comp_start_date' not in st.session_state:
@@ -23,6 +23,8 @@
         st.session_state['comp_end_date'] = datetime.now().date()
     if 'comp_quick_select' not in st.session_state:
         st.session_state['comp_quick_select'] = "鏈�杩�7澶�"
+    if 'time_offset' not in st.session_state:
+        st.session_state['time_offset'] = 0
 
     # 瀹氫箟鍥炶皟鍑芥暟
     def update_dates(qs):
@@ -93,8 +95,22 @@
                 on_change=on_date_change
             )
 
-        with cols[7]:
-            query_button = st.button("馃殌 鏌ヨ", key="comp_query", width='stretch')
+        # 鍦ㄧ浜岃娣诲姞鏃堕棿鍋忕Щ閰嶇疆
+        st.markdown("---")
+        offset_cols = st.columns([2, 4, 2])
+        with offset_cols[0]:
+            st.write("鈴憋笍 **鐢熶骇瀵归綈閰嶇疆**")
+        with offset_cols[1]:
+            time_offset = st.slider(
+                "鎸ゅ嚭/涓绘祦绋嬫暟鎹悜鍚庡亸绉� (鍒嗛挓)", 
+                min_value=0, 
+                max_value=60, 
+                value=st.session_state['time_offset'],
+                help="鐢变簬鑳庨潰浠庢尋鍑哄埌鍒嗘嫞闇�瑕佹椂闂达紝灏嗕笂娓告暟鎹悜鍚庣Щ鍔紝浣垮叾涓庡垎鎷g绉や笂鐨勯噸閲忔暟鎹湪鏃堕棿杞翠笂瀵归綈銆�"
+            )
+            st.session_state['time_offset'] = time_offset
+        with offset_cols[2]:
+            query_button = st.button("馃殌 寮�濮嬪垎鏋�", key="comp_query", width='stretch')
 
     # 杞崲涓篸atetime瀵硅薄
     start_dt = datetime.combine(start_date, datetime.min.time())
@@ -103,20 +119,32 @@
     # 鏌ヨ澶勭悊
     if query_button:
         with st.spinner("姝e湪鑱氬悎澶氭簮鏁版嵁..."):
-            # 1. 鑾峰彇鍒嗘嫞纾呯Г鏁版嵁
+            # 鑾峰彇鍋忕Щ閲�
+            offset_delta = timedelta(minutes=st.session_state['time_offset'])
+            
+            # 1. 鑾峰彇鍒嗘嫞纾呯Г鏁版嵁 (浣滀负鍩哄噯锛屼笉鍋忕Щ)
             df_sorting = sorting_service.get_sorting_scale_data(start_dt, end_dt)
-            # 2. 鑾峰彇鎸ゅ嚭鏈烘暟鎹�
+            
+            # 2. 鑾峰彇鎸ゅ嚭鏈烘暟鎹� (搴旂敤鍋忕Щ)
             df_extruder = extruder_service.get_extruder_data(start_dt, end_dt)
-            # 3. 鑾峰彇涓绘祦绋嬫帶鍒舵暟鎹�
+            if df_extruder is not None and not df_extruder.empty:
+                df_extruder['time'] = df_extruder['time'] + offset_delta
+                
+            # 3. 鑾峰彇涓绘祦绋嬫帶鍒舵暟鎹� (搴旂敤鍋忕Щ)
             df_main_speed = main_process_service.get_cutting_setting_data(start_dt, end_dt)
+            if df_main_speed is not None and not df_main_speed.empty:
+                df_main_speed['time'] = df_main_speed['time'] + offset_delta
+                
             df_temp = main_process_service.get_temperature_control_data(start_dt, end_dt)
+            if df_temp is not None and not df_temp.empty:
+                df_temp['time'] = df_temp['time'] + offset_delta
 
             # 妫�鏌ユ槸鍚︽湁鏁版嵁
             has_data = any([
                 df_sorting is not None and not df_sorting.empty,
                 df_extruder is not None and not df_extruder.empty,
                 df_main_speed is not None and not df_main_speed.empty,
-                df_temp is not None and not df_temp.empty
+                df_temp is not None and not df_temp.empty       
             ])
 
             if not has_data:
@@ -207,14 +235,14 @@
 
             # 娣诲姞鎸ゅ嚭鏈虹背閲�
             if df_extruder is not None and not df_extruder.empty:
-                fig.add_trace(go.Scatter(
-                    x=df_extruder['time'], 
-                    y=df_extruder['metered_weight'],
-                    name='鎸ゅ嚭鏈虹背閲� (g/m)',
-                    mode='lines',
-                    line=dict(color='green', width=1.5),
-                    yaxis='y2'
-                ))
+                # fig.add_trace(go.Scatter(
+                #     x=df_extruder['time'], 
+                #     y=df_extruder['metered_weight'],
+                #     name='鎸ゅ嚭鏈虹背閲� (Kg/m)',
+                #     mode='lines',
+                #     line=dict(color='green', width=1.5),
+                #     yaxis='y2'
+                # ))
                 # 娣诲姞鎸ゅ嚭鏈哄疄闄呰浆閫�
                 fig.add_trace(go.Scatter(
                     x=df_extruder['time'], 
@@ -235,14 +263,26 @@
                     line=dict(color='red', width=1.5),
                     yaxis='y3' # 鍏辩敤閫熷害杞�
                 ))
+                
+                # 娣诲姞瑁佸垏璁℃暟
+                if 'cutting_count' in df_main_speed.columns:
+                    fig.add_trace(go.Scatter(
+                        x=df_main_speed['time'], 
+                        y=df_main_speed['cutting_count'],
+                        name='瑁佸垏璁℃暟',
+                        mode='lines',
+                        line=dict(color='purple', width=1.5),
+                        yaxis='y5'
+                    ))
 
             # 娣诲姞娓╁害璁惧畾鍊�
             if df_temp is not None and not df_temp.empty:
                 temp_fields = {
-                    'nakata_extruder_screw_set_temp': '铻烘潌璁惧畾 (掳C)',
-                    'nakata_extruder_rear_barrel_set_temp': '鍚庢満绛掕瀹� (掳C)',
-                    'nakata_extruder_front_barrel_set_temp': '鍓嶆満绛掕瀹� (掳C)',
-                    'nakata_extruder_head_set_temp': '鏈哄ご璁惧畾 (掳C)'
+                    'nakata_extruder_screw_display_temp': '铻烘潌鏄剧ず (掳C)',
+                    'nakata_extruder_rear_barrel_display_temp': '鍚庢満绛掓樉绀� (掳C)',
+                    'nakata_extruder_front_barrel_display_temp': '鍓嶆満绛掓樉绀� (掳C)',
+                    'nakata_extruder_head_display_temp': '鏈哄ご鏄剧ず (掳C)'
+                  
                 }
                 colors = ['#FF4B4B', '#FF8C00', '#FFD700', '#DA70D6']
                 for i, (field, label) in enumerate(temp_fields.items()):
@@ -257,7 +297,7 @@
 
             # 璁剧疆澶氬潗鏍囪酱甯冨眬
             fig.update_layout(
-                title='澶氱淮缁煎悎瓒嬪娍鍒嗘瀽',
+                title='鏉¢噸缁煎悎瓒嬪娍鍒嗘瀽',
                 xaxis=dict(
                     title='鏃堕棿',
                     rangeslider=dict(visible=True),
@@ -269,7 +309,7 @@
                     tickfont=dict(color='blue')
                 ),
                 yaxis2=dict(
-                    title='绫抽噸 (g/m)',
+                    title='绫抽噸 (Kg/m)',
                     title_font=dict(color='green'),
                     tickfont=dict(color='green'),
                     overlaying='y',
@@ -293,6 +333,15 @@
                     anchor='free',
                     position=0.15
                 ),
+                yaxis5=dict(
+                    title='瑁佸垏璁℃暟',
+                    title_font=dict(color='purple'),
+                    tickfont=dict(color='purple'),
+                    overlaying='y',
+                    side='right',
+                    anchor='free',
+                    position=0.7
+                ),
                 legend=dict(
                     orientation="h",
                     yanchor="bottom",
@@ -309,21 +358,21 @@
             st.plotly_chart(fig, width='stretch', config={'scrollZoom': True})
             
             # 鏁版嵁鎽樿
-            st.subheader("馃搳 鏁版嵁鎽樿")
-            summary_cols = st.columns(4)
+            # st.subheader("馃搳 鏁版嵁鎽樿")
+            # summary_cols = st.columns(4)
             
-            with summary_cols[0]:
-                if df_sorting is not None and not df_sorting.empty:
-                    st.metric("骞冲潎閲嶉噺", f"{df_sorting['weight'].mean():.2f} kg")
+            # with summary_cols[0]:
+            #     if df_sorting is not None and not df_sorting.empty:
+            #         st.metric("骞冲潎閲嶉噺", f"{df_sorting['weight'].mean():.2f} kg")
             
-            with summary_cols[1]:
-                if df_extruder is not None and not df_extruder.empty:
-                    st.metric("骞冲潎绫抽噸", f"{df_extruder['metered_weight'].mean():.2f} g/m")
+            # with summary_cols[1]:
+            #     if df_extruder is not None and not df_extruder.empty:
+            #         st.metric("骞冲潎绫抽噸", f"{df_extruder['metered_weight'].mean():.2f} Kg/m")
             
-            with summary_cols[2]:
-                if df_main_speed is not None and not df_main_speed.empty:
-                    st.metric("骞冲潎涓婚��", f"{df_main_speed['process_main_speed'].mean():.2f} M/Min")
+            # with summary_cols[2]:
+            #     if df_main_speed is not None and not df_main_speed.empty:
+            #         st.metric("骞冲潎涓婚��", f"{df_main_speed['process_main_speed'].mean():.2f} M/Min")
             
-            with summary_cols[3]:
-                if df_temp is not None and not df_temp.empty:
-                    st.metric("骞冲潎铻烘潌娓╂帶", f"{df_temp['nakata_extruder_screw_set_temp'].mean():.1f} 掳C")
+            # with summary_cols[3]:
+            #     if df_temp is not None and not df_temp.empty:
+            #         st.metric("骞冲潎铻烘潌娓╂帶", f"{df_temp['nakata_extruder_screw_set_temp'].mean():.1f} 掳C")

--
Gitblit v1.9.3