From 4048393750de17cfa2ae59fec1380a81ea2b2a6b Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期一, 02 二月 2026 09:47:24 +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