From 4495b1683d9ad7e653bfbc67cc54a297e8fed6c1 Mon Sep 17 00:00:00 2001 From: zhu-mengmeng <15588200382@163.com> Date: Mon, 14 Jul 2025 15:44:16 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E6=96=B0=E5=A2=9E=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E6=BB=A1=E6=89=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apis/gc_api.py | 42 ++++++++++++++++++++++++++++++- config/app_config.json | 3 ++- db/jtDB.db | Bin 151552 -> 151552 bytes from pymodbus.py | 6 ++--- ui/main_window_ui.py | 55 ++++++++++++++++++++++++++++++++--------- widgets/main_window.py | 54 +++++++++++++++++++++++++++++++++++++++- 6 files changed, 143 insertions(+), 17 deletions(-) diff --git a/apis/gc_api.py b/apis/gc_api.py index b1529cb..d97fa1a 100644 --- a/apis/gc_api.py +++ b/apis/gc_api.py @@ -2,10 +2,50 @@ from utils.api_utils import ApiUtils import logging import json class GcApi: + """工程API接口类""" + def __init__(self): - """初始化托盘API工具类""" + """初始化API接口""" self.api_utils = ApiUtils() + + + def ismt_option(self, params): + """ + 标记是否满托 + Args: + ismt: 是否满托 + corp_id: 公司ID + tray_id: 托盘ID + ip: 机器IP + + Returns: + dict: 返回结果 + """ + try: + # API 配置中的键名 + api_key = "ismt_option" + # 构建 form-data 格式的数据 + data = { + "ismt": params.get("ismt", False), + "xpack":params.get("tray_id", ""), + "nw_ip":params.get("ip", ""), + "data_corp":params.get("corp_id", ""), + } + # 将工程号作为参数传递,使用 data 参数传递 form-data 格式数据 + response = self.api_utils.post(api_key, data=data) + + # 请求失败时返回空数据 + if not response.get("status", False): + return { + "success": False, + "message": "标记是否满托失败", + "data": None + } + return response + except Exception as e: + logging.error(f"标记是否满托失败: {str(e)}") + return None def get_gc_info(self, gc_code): """ 获取GC信息 diff --git a/config/app_config.json b/config/app_config.json index d8c69c4..c03db90 100644 --- a/config/app_config.json +++ b/config/app_config.json @@ -15,7 +15,8 @@ "get_gc_info": "/jsjt/xcsc/tprk/getBZGCInfoToWsbz.do", "get_order_info": "/jsjt/xcsc/tprk/getXsddBzrkGridListToWsbz.do", "add_order_info": "/jsjt/xcsc/tprk/bzrkAdd01.do", - "get_xpack": "/jsjt/xcsc/tprk/getXpackToWsbz.do" + "get_xpack": "/jsjt/xcsc/tprk/getXpackToWsbz.do", + "ismt_option": "/jsjt/xcsc/tprk/ismtOptioTonWsbz.do" }, "database": { "default": "sqlite", diff --git a/db/jtDB.db b/db/jtDB.db index c36012f1e6ae61490dca5d8b62033898a79f3a61..ea9f9201ad9af20daee8263868637af9bb47009d 100644 GIT binary patch delta 10256 zcmb`NZH!da8OQIvv+m67%$-?Shs*LJyC5zIJDhW0=H;R+3o6uZE7fglSG3EP7j?Up ziq+Cqj-+0UO?wwzTSyucs~=lUWm{2`YQLD6w6RT0V{AW|7!gbw)5Ip!rm21IIdkva zx#zhHSP3w|k8}Rd`Jd;!&qGh;A9^Z(d|7GnVMS5a!Y}^gv2`_V@!{tu|GGsj&TSr9 zt>qzn!Xmb2N>(f-l? z+_-5|N{Bs7$G7hq-(@MbXC_A<4L?m{I>V$sOzi<`yH?Y+ ztg2PF?HWxX4s{M4K6Kx{8Iv%ys6%VwKO9|FxU}df9eMNo8*eXpWJCCwh=ICJy=pay zL(G7%Sm35hNR^Ui&9TDpI--ks&1^-tw5O!3M7)bRN1Bmy5ZixG{N$#0Ht!8T6YVE8 z*Rrd2)3i(;TsyWlaR?S$jMFf-d@?rCf$`WHRV2Y!%2k7A74M90~GntNQWZf^-W%6WY|ZYgOAK1mcRNA*hCg zTCH3{dBGyos*AAZpZ@XGnv9WsW-j~dpolrCy>&~jJESbcvC2s^GqG`@$}QJ!x|CKMU~$7vRxZ=8O~DH# zqsz4*zDgM1a)__LudlCvC65n6US2VjxwqcfIk);x?`C}Ui4)mf>L*uZ6zzTOkJ>5i zq;^ExtKFy(ZHf9H^eYNS%|72&r+h0U-`2S4)J!M9I;53Bl^a$vT7x7lsfbT(}A$!iBY+ zgbh##4W>k}`^rwliEv>JLWB#e5h7d|M2K);ldJ5SZuBbA>l#=DI{FD93jGm zK7|C# zsEr~5)fAVT<9@$YF77C&&*cy-@G3V}Z$G=mV~!Z#5jT$o0P zaN+KNu=v6Y83&U|&G7F+3c=7LhJU9_VD$)sJAe@3!hVDZ7xs0r#M%!Npm1R?Qb@S) z4TK06rVt`r*n<%60`n(j1S^39+5L5dG&s2fB?QXcj*uEJvl}6n%N*12Z$psj24n&u zaPR~2HG~jOZj}j4>Oq;W%7nqJ9-yzth}1dxGD4t5P-Yw7_yZwJ>h+FE;}`^{nzPV)4U1ff4# zk)#Ob?^O1~0eyXd)s*oeeKpqF=!gZa4BB5 zJ0Yd%cX?Yo`;~QcES1F|AFT%3u`t=T?h0`+I^&I|+8gw%1^vpTOj<~gv~B@Y1gE^~ zKro-zbvbKO(v<}l+#NT_7xYk>@wTP5D@dE5T^HLdIHbUIbb)q3x^(UJuIHjy+cKHd zHl%`z8viJMlM<>wX0$vwX3%9u3}hwI)jc?mI_i-roC%3>Q#xQcChbcnF_%BE?lm8F6dl}WD-D%eDntf?8Qb$I3Rdsga%Qc+_VkPQsAI=78Ej!%x^P0w70eUwMFW$)a}Y&lmlXcQl`BccPq9u zw-zT|H>(tz=lG!~nQL$rYrAk8OIr_Lc$3U&&q=Fku)}l%>AA% zazPrdXle(ixn#pyN+C#T*A(+Cp>*NY{y$VaGetyW$<+SzDw7@sm5WI2xJ2wI26@mX zDSl0Rgtr7sJ6eSoGp(2SyGpcwBfqrjS);Zn9 zK#Izww*gcxoOiLB+7f*JiIEhIY42*@l6c;UH}90`4(=7;z6gI&Z@{g6*gLWLrx7i9 zkaz1-)TJDv?N(cl@0VL|D7Bc2e*wur^3hne^6zN@w1Qrli&+1GcbV`@Ac8 zOQO81gmwjaXWI4TdFn`V zbDc2N*ih6WWR6>?HNiJT!ci1U>!2~ay+JM#Wm%+=Ofs9LxfQdq?N+N1yS;&w`jhz; ztEIE=L%`sBR8svD9(*ezo>@`+cqRP1SnZ=~hig*hW8M{Ir5qkbPOs?E&N-Rm>iW~! zty)24+OXEAeyqNuzNY?CeN25oyPF^n?zVOX9jrdP28c@!;%B zPv}5`>oT|+l-|$*iR-fX8+vO1Q*m9kO1@4Ep7`PFOL{_w+QfC4^n?z?5<=1&Iw1by V>_>0t;X^r)z=hL0wrMZv{{vl>hW`Kn delta 378 zcmXAku}cC`9LL{#C!S~b-t#)8o+7Cs7NMM{XJL`jVy%r05m93p*wPX<)TD56gjv`?avFUq*~%_f}0PIt#(IlFCra4w@F8C+vGtcIHl_=T1wC80KkDI zJ)80KFpAN@TmVEdW*CPrJF?eU);=~@a( zfUyh%z*9M`oE#pd^-R{t>6&gNwOmp+BI)J4mdmHJlXyIeALI~6(cmZbN&=H6VdvX* z?2+l+xDjv2dvKO7X;A0B47W_d? 已切换到实时相机模式") except Exception as e: - logging.error(f"处理本地图像模式变更时发生错误: {e}") \ No newline at end of file + logging.error(f"处理本地图像模式变更时发生错误: {e}") + + def handle_tray_complete(self): + """处理托盘完成按钮点击事件""" + try: + # 获取托盘号 + tray_id = self.tray_edit.currentText() + if not tray_id: + QMessageBox.warning(self, "提示", "请先选择托盘号") + return + + # 确认对话框 + reply = QMessageBox.question( + self, + "确认完成", + f"确认将托盘 {tray_id} 标记为已满托?", + QMessageBox.Yes | QMessageBox.No, + QMessageBox.No + ) + + if reply != QMessageBox.Yes: + return + + # 调用接口 + from apis.gc_api import GcApi + gc_api = GcApi() + + # 准备参数 + params = { + 'ismt': True, + 'corp_id': self.corp_id, + 'tray_id': tray_id, + 'ip': '192.168.1.246' + } + + # 调用接口 + response = gc_api.ismt_option(params) + + # 处理响应 + if response.get('status', False): + QMessageBox.information(self, "成功", "托盘已标记为完成") + logging.info(f"托盘 {tray_id} 已标记为完成") + else: + error_msg = response.get('message', '未知错误') + QMessageBox.warning(self, "失败", f"标记托盘完成失败: {error_msg}") + logging.error(f"标记托盘 {tray_id} 完成失败: {error_msg}") + + except Exception as e: + logging.error(f"处理托盘完成失败: {str(e)}") + QMessageBox.critical(self, "错误", f"处理托盘完成失败: {str(e)}") \ No newline at end of file