From 516d7cb99b7f0fa205859c692d3acdc55b94b65d Mon Sep 17 00:00:00 2001 From: zhu-mengmeng <15588200382@163.com> Date: Sun, 20 Jul 2025 12:22:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=A7=A3=E5=86=B3=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E4=BF=9D=E5=AD=98=E7=BA=BF=E5=BE=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/inspection_dao.py | 2 +- db/jtDB.db | Bin 192512 -> 192512 bytes from pymodbus.py | 6 ++-- ui/main_window_ui.py | 2 +- widgets/main_window.py | 64 +++++++++++++++++------------------------ 5 files changed, 32 insertions(+), 42 deletions(-) diff --git a/dao/inspection_dao.py b/dao/inspection_dao.py index 98a64b2..24ffa41 100644 --- a/dao/inspection_dao.py +++ b/dao/inspection_dao.py @@ -863,7 +863,7 @@ class InspectionDAO: """ try: sql = """ - SELECT t1.order_id, CASE WHEN t1.position = 12 THEN 'mzl' ELSE name END AS name, value + SELECT t1.order_id, CASE t1.position WHEN 12 THEN 'mzl' when 2 then 'xj' ELSE name END AS name, value FROM wsbz_inspection_data t1 LEFT JOIN main.wsbz_inspection_config wic ON t1.config_id = wic.id WHERE gc_note = ? AND t1.order_id = ? diff --git a/db/jtDB.db b/db/jtDB.db index 6ce237efca01cca85a2b380e8d0fcae9c07659e0..4765c2899daf0010048ec0eb2b7578cb815c4927 100644 GIT binary patch delta 5585 zcmcIoYiu0V6`p%%y|0R z68}ghPE^YLKyf_4piuFU2qcKmH2Y&vLlKcERRt1G6lhADG*Z>_N?L&;s)Ahg%QC4@r!Y4fr@_(OI<8sEu@LX}vd0EC~dd zCPs(}F@M|bz5Tqz$}G=zaE}b`P7ge|XW*wi%S#=s+`+TW9IwJZpWHpVd(XhnD*!>s z0lob_>-*PdXA+XqrvBWlTtebG@b*3!**_x|NojlabzlQRQ70QPX5+jdxSKM~_+3mH z*4Ks!4X7R6XBciJGL{Ayx19h-jIyhUkTrye0 zQ$!<)-<^gaM)Z3ML=2ORvvR3JMMTy3V-ww7AfoAHT;%78D6OwD#&<=vtR~!oR-G?{ z`duIiNOVq;$Wv}8%OTb2!H!>#9lxD3iclP#V-=Ni79Oke!fe8mNAx=jGz_D->VcJ2 z7vas3W~EJ&O&2t+xT>K_njyXWW_y?Wv2zHk^DV7+%_6`my&BY4%ql;g)r!k(m5h7! zA7=hU&~f_PGvcjcT7<%tBMYSROHPY^L+y=Cgi>P58SC~I$=wv zoI1;_RZYEHU!GG>MK1wfQpnj3XmPXe`5 z2L~R{fwP#hU7Z`}h%V$ZPF6~aEhUFt$*LU4#X&~^@G9%5qkN~B;5n8RM|8eG<6eKN zrWw*XW8tpY7SPAMxRKUbNG>r=B+2=R(xBd%6F@~}gViY_Ts_^vR~@hsJziKBhDo?C zKbv$cI9Yz4tE_8^Tv&cVNeCl)M}dZ>WtW1(s#Veq>C2{GD@O z{h;1Hr{zz5Zw{SFdm^-l*++!8hu#b|F#9r*gAX(0SW}DfzsKt}&h6a~dSt%4^-^T# znhRfbx88QSv*G!-$~rDc3w&Hoa-1Z)AqnSBsqiED4#gv9G3)hiY+QZ z+*2+*$-txe5RNr1p2Z@28*<%?PB*{v?D4;MH>Q5OUFzCj#tWWuaaoiEL2yG{ia`EJ zk0gjv=9?o_q>*@^2;UwO=?m1J;7DN9cf)(2CP4lY{eyVl==$;0=g46QTR%x2YP;>s=SvYaW*ITxh#Zd8PPfGn;XXb#?C8$CoE(=L`hcB6<3@V;Ok?-4LPMyN_U0{b@JUCT? zcXO6k5>oLTen7jDjE68VW@H*Jw>&zub z@oQ*-HF*@bAhYLbyvkUAoi^_@@Og8<#2d_kC-J-H{%7FV{-^M}sMdr#?=sR~Q0AY1 nfiIY+jsY_D7$9Nmz%w|CP{@R1pV^_~cgRBv80+<8cmeu98V!^Z delta 3752 zcmc&%YfKbZ6rOu$VP7*li@>f6K~SQy;x0QgJ2ShB4+w1x+C;RZ&{!49(^@GMRE)-D zAu(eMsdbu+#+ay$;^RkKw#m|_woPg@{%8xvq%TdZu>u-GX{bLiw7tVFy0EjBDyBQR znb|pW?|063@44r@ZMTeVw~U9%F&Aeu0uiRz+krjsVS?qTeenDF>Y=!&}Jg?-@7V3zr| z2Hz>JklLy(D`~HTB?#8(VVK=D+v@6Tsu>rlG_@#wM-v^_V_r}v7-!1 zXVg@F`Vp)j0r_Vl8I5y|ME;G{PYX$y3@HrcpTn3c#FXjWIiAR!N0}G@%!yIRo3zyI zP$REGoTr8nkG051u|ZBj_*EtdO-MW22*Ts^#^LH2QJTc6$vL7F;x_R{BmF$MYZPCXGT*Y5@i_iG zhVN?dbyrqTEE#IOJ~0-ZSga4N43>AY z9)@LvcosJoyB$aOoU#WJ=9w^SYBHtO78cqHZMub(&DFJ);XQ$43&7>>k>fp%sXG(M zm@j2_=J`FGmo1>eUKSXnmM`AeKOXIi+vjro7?+cCv2M;C&*I@@y^QYZL8+r;4qC}B zEYrU9k(UzPxzOa{X{JCM@c~MpE2WGRd>rd^3oJ`d17&@WElgz4Xs4#xBbgN-Ev89O zl9X~gbIJr%qoS%F>caaN&dGbd0vFdJs6-guQxJmV?-|YMAPqB}B4uKw;jV$yr)hf= zKTEg>(ll$}H7UtFPIhpH+@y@$WGtH`7fax5iXq=_wOX@NF>JAvd3G5w(A_)GecVR~c5)8J$r+@tPUo1{6>eN}r?+e9199l^sXM*L z<^7$oL%P*%kn`H11#f?wkOF5cA!ird0)R0XIMWR9z#hGv^c!3+f7b%f z+^P-j-3coJNR)5xf`5PnxoKg3=f@ah2;S1V5p@T>d>oAKt>%F1&?0v zf}W2xW)n`0B5{K)ryf!dsL^0j)@>?r!4mXlS#bP&(wu>#M@0hVpk|LeFGu$UN<-V5 zRU6D7xT?b&G}k3<-%a%9cO17KE|x~eEFHsRq2V!LJ+^>EGQhN-xMBRpa6vEW_G+sV z3lr>`Bsc=T#rhG&AE5wkN`Mc+d^vCrz95wh6Y}P}upd|-|Mw5Te)$&>Zj?_A!pk64 z-Y^I^$e$0v%d&F-z9==`H_CnY;5E5q5PdUo0KKmtLQljn`Z_86wc{YXB%insOXU?K z@Dko`p+bQUXaRUfrb(ea_}9sIkunOt^PwMTN#h8XqF*9wPe3~g?ST%yRxaN>2h&4E z=irxohM^TR8nhU7lyaG_n6{9AlAQ)EX(LV>HyD0G9ftJl8$@ro(nN}yeX6J_sxEeO zn~j`Ho+0OqSFuXO;bv55Rz4DpB&lTLQwqj;GZ5xXiOzH#t)d&q^&dAjiTUBWqDGTy zm6;7wGvjC!eWNsRumLD6(gnzLS3>wy=<=)`RV#Id_I_aG0oPB zoEj32#}COLbIh65QKVLMt0BeHyYb2Mhl`?`ZV#V;sznwdA#FLOdc*9+kLbSzq? 0: - # 下料模式 - 开始下料操作 - # 确保寄存器3(下料启动)设为1,寄存器4已在handle_output中设置了当前层数 - success2 = modbus.write_register_until_success(client, 2, 1) - success3 = modbus.write_register_until_success(client, 3, 1) - - if success2 and success3: - logging.info(f"开始下料操作:当前层数 {self._current_unload_num}/{self._total_unload_num}") - QMessageBox.information(self, "操作提示", f"开始下料操作:当前第{self._current_unload_num}层") - # 填充按钮样式 - # self.fill_start_button_style() - else: - QMessageBox.warning(self, "错误", "开始下料操作失败") - else: - # 上料模式 - 默认操作 - # 写入当前层数到D0寄存器 - success0 = modbus.write_register_until_success(client, 0, self._current_stow_num) - success2 = modbus.write_register_until_success(client, 2, 1) - - if success0 and success2: - self._is_loading_active = True # 标记上料任务已开始 - logging.info(f"开始上料操作:当前层数 {self._current_stow_num}") - # 填充按钮样式 - # self.fill_start_button_style() - else: - QMessageBox.warning(self, "错误", "开始上料操作失败") + # 下料模式 - 开始下料操作 + # 确保寄存器3(下料启动)设为1,寄存器4已在handle_output中设置了当前层数 + success2 = modbus.write_register_until_success(client, 2, 1) + success3 = modbus.write_register_until_success(client, 3, 1) + if success2 and success3: + logging.info(f"开始下料操作:当前层数 {self._current_unload_num}/{self._total_unload_num}") + QMessageBox.information(self, "操作提示", f"开始下料操作:当前第{self._current_unload_num}层") + else: + QMessageBox.warning(self, "错误", "开始下料操作失败") + except Exception as e: logging.error(f"开始操作失败: {str(e)}") QMessageBox.critical(self, "错误", f"开始操作失败: {str(e)}") @@ -2299,12 +2283,10 @@ class MainWindow(MainWindowUI): info['pono'] = self._current_order_code info["dycz"] = info.get("cz") info['qd'] = self._current_gc_qd - - # 4. 添加sc_gch信息 - if hasattr(self, '_current_gc_sc_gch') and self._current_gc_sc_gch: - info['sc_gch'] = self._current_gc_sc_gch - else: - info['sc_gch'] = "" + # 4. 添加sc_gch信息 - 直接使用前端获取到的工程号作为sc_gch + # 避免使用全局的_current_gc_sc_gch,因为可能在称重过程中被其他扫码操作更新 + info['sc_gch'] = gc_note + logging.info(f"使用前端工程号 {gc_note} 作为sc_gch") # 5. 从数据库获取其他信息作为补充 order_others_info = inspection_dao.get_order_others_info(gc_note, self._current_order_code, tray_id) @@ -3184,7 +3166,7 @@ class MainWindow(MainWindowUI): bccd, tccd = inspection_dao.get_xj_range(self._current_order_code) if bccd is not None and tccd is not None: - if float(bccd) - 0.5 <= final_value <= float(tccd) + 0.5: + if float(bccd) - 0.02 <= final_value <= float(tccd) + 0.02: # 使用set_inspection_value保存数据 self.set_inspection_value('xj', xj_config, final_value) logging.info(f"已将稳定的线径值 {final_value:.3f} 保存到工程号 {gc_note} (行 {data_row})") @@ -3974,9 +3956,15 @@ class MainWindow(MainWindowUI): else: new_value = "" - # 智能更新逻辑:如果新值不为空且与当前值不同,则更新;如果新值为空但当前值不为空,则保持当前值 - if new_value and new_value != current_value: - # 有新值且与当前值不同,进行更新 + # 智能更新逻辑:强度字段允许空值覆盖,其他字段空值不覆盖 + should_update = False + if field_name == "强度": # 强度字段允许空值覆盖 + should_update = new_value != current_value + else: # 其他字段:只有新值不为空且与当前值不同时才更新 + should_update = new_value and new_value != current_value + + if should_update: + # 进行更新 try: if isinstance(self.info_values[field_name], QTextEdit): self.info_values[field_name].setPlainText(new_value) @@ -4009,8 +3997,8 @@ class MainWindow(MainWindowUI): # 其他异常也记录并跳过 logging.warning(f"更新控件文本失败,字段: {field_name}, 错误: {str(e)}") continue - elif not new_value and current_value: - # 新值为空但当前值不为空,保持当前值 + elif not new_value and current_value and field_name != "强度": + # 新值为空但当前值不为空,且不是强度字段,保持当前值 logging.debug(f"保持字段 '{field_name}' 的当前值: '{current_value}' (API返回空值)") elif not new_value and not current_value: # 新值和当前值都为空,无需操作