diff --git a/apis/gc_api.py b/apis/gc_api.py index 674a4e9..10ca510 100644 --- a/apis/gc_api.py +++ b/apis/gc_api.py @@ -103,6 +103,28 @@ class GcApi: except Exception as e: logging.error(f"获取订单信息失败: {str(e)}") return None + def get_spakc_info(self, order_code,corp_id,tray_id): + """ + 获取订单信息 + """ + try: + # API 配置中的键名 + api_key = "get_spack_info" + # 构建 form-data 格式的数据 + order_dict = {"orderId":order_code,"data_corp":corp_id,"trayId":tray_id} + data = { + "parms": json.dumps(order_dict), # 必须将数据序列化为JSON字符串 + "pageIndex": 0, + "pageSize": 10, + "sortField": "", + "sortOrder": "" + } + # 将工程号作为参数传递,使用 data 参数传递 form-data 格式数据 + response = self.api_utils.post(api_key, data=data) + return response + except Exception as e: + logging.error(f"获取订单信息失败: {str(e)}") + return None def add_order_info(self, info): """ 添加订单信息 @@ -398,6 +420,33 @@ class GcApi: } response = self.api_utils.get(api_key, params=params) return response + except Exception as e: + logging.error(f"获取托盘包装统计数据失败: {str(e)}") + return {"status": False, "message": str(e)} + + def get_spack_info(self, order_id, tray_id, corp_id): + """ + 获取托盘包装统计数据 + + Args: + order_id: 订单号 + tray_id: 托盘号 + corp_id: 公司ID + + Returns: + dict: 包含托盘完成轴数和托盘完成数量的字典 + """ + try: + # API 配置中的键名 + api_key = "get_spack_info" + # 构建URL参数 + params = { + "orderId": order_id, + "trayId": tray_id, + "data_corp": corp_id + } + response = self.api_utils.get(api_key, params=params) + return response except Exception as e: logging.error(f"获取托盘包装统计数据失败: {str(e)}") return {"status": False, "message": str(e)} \ No newline at end of file diff --git a/config/app_config.json b/config/app_config.json index 4dce8f8..f1b5f6c 100644 --- a/config/app_config.json +++ b/config/app_config.json @@ -7,7 +7,7 @@ "enable_keyboard_listener": false, "enable_camera": false }, - "base_url": "https://jsjtnew.tengzhicn.com/", + "base_url": "http://localhost:8085", "mode": "api" }, "apis": { @@ -22,7 +22,8 @@ "get_luno": "/common/luno/getLunoListWsbz.do", "get_order_info_by_xpack": "/jsjt/xcsc/tprk/getXsddBzrkGridListByXpackToWsbz.do", "get_package_statistics": "/jsjt/xcsc/tprk/getBzNumByOrderidWszb.do", - "get_tray_package_statistics": "/jsjt/xcsc/tprk/getBzNumByTrayWszb.do" + "get_tray_package_statistics": "/jsjt/xcsc/tprk/getBzNumByTrayWszb.do", + "get_spack_info": "/jsjt/xcsc/tprk/getSpackWszb.do" }, "database": { "default": "sqlite", diff --git a/dao/inspection_dao.py b/dao/inspection_dao.py index 8c39d6d..03d9e9b 100644 --- a/dao/inspection_dao.py +++ b/dao/inspection_dao.py @@ -1332,71 +1332,94 @@ class InspectionDAO: except Exception as e: logging.error(f"查询检验数据失败: {str(e)}") return None - def get_package_statistics(self, order_id=None): - """获取包装记录的统计数据 + # def get_package_statistics(self, order_id=None): + # """获取包装记录的统计数据 + + # Args: + # order_id: 订单号,如果为None则获取所有订单的统计 + + # Returns: + # dict: 包含当前订单和所有订单的统计数据 + # { + # 'count': 当前订单的记录数量, + # 'weight': 当前订单的总重量, + # 'count_all': 所有订单的记录数量, + # 'weight_all': 所有订单的总重量 + # } + # """ + # try: + # # 构建SQL查询 + # sql = """ + # SELECT SUM(weight) weight, + # SUM(count) count, + # SUM(count_all) count_all, + # SUM(weight_all) weight_all + # FROM ( + # SELECT COUNT(gc_note) AS count, + # SUM(weight) AS weight, + # '' AS count_all, + # '' AS weight_all + # FROM wsbz_inspection_pack_data + # WHERE order_id = ? + # UNION ALL + # SELECT '', '', + # COUNT(gc_note) AS count_all, + # SUM(weight) AS weight_all + # FROM wsbz_inspection_pack_data + # ) a + # """ + + # with SQLUtils('sqlite', database='db/jtDB.db') as db: + # # 执行查询 + # db.cursor.execute(sql, (order_id or '',)) + + # # 获取结果 + # row = db.cursor.fetchone() + + # # 如果有结果,转换为字典 + # if row: + # return { + # 'weight': float(row[0] or 0), + # 'count': int(row[1] or 0), + # 'count_all': int(row[2] or 0), + # 'weight_all': float(row[3] or 0) + # } + # else: + # return { + # 'weight': 0, + # 'count': 0, + # 'count_all': 0, + # 'weight_all': 0 + # } + + # except Exception as e: + # logging.error(f"获取包装记录统计数据失败: {str(e)}") + # return { + # 'weight': 0, + # 'count': 0, + # 'count_all': 0, + # 'weight_all': 0 + # } + def get_spack_by_order_id(self, order_id,tray_id): + """根据订单号和托盘号获取箱号(spack) Args: - order_id: 订单号,如果为None则获取所有订单的统计 + order_id: 订单号 + tray_id: 托盘号 Returns: - dict: 包含当前订单和所有订单的统计数据 - { - 'count': 当前订单的记录数量, - 'weight': 当前订单的总重量, - 'count_all': 所有订单的记录数量, - 'weight_all': 所有订单的总重量 - } + str: 箱号(spack),如果不存在则返回空字符串 """ + try: - # 构建SQL查询 - sql = """ - SELECT SUM(weight) weight, - SUM(count) count, - SUM(count_all) count_all, - SUM(weight_all) weight_all - FROM ( - SELECT COUNT(gc_note) AS count, - SUM(weight) AS weight, - '' AS count_all, - '' AS weight_all - FROM wsbz_inspection_pack_data - WHERE order_id = ? - UNION ALL - SELECT '', '', - COUNT(gc_note) AS count_all, - SUM(weight) AS weight_all - FROM wsbz_inspection_pack_data - ) a - """ - with SQLUtils('sqlite', database='db/jtDB.db') as db: - # 执行查询 - db.cursor.execute(sql, (order_id or '',)) - - # 获取结果 + db.cursor.execute("SELECT package_id FROM wsbz_inspection_data WHERE order_id = ? AND tray_id = ? LIMIT 1", (order_id, tray_id)) row = db.cursor.fetchone() + if row: + return row[0] + else: + return None - # 如果有结果,转换为字典 - if row: - return { - 'weight': float(row[0] or 0), - 'count': int(row[1] or 0), - 'count_all': int(row[2] or 0), - 'weight_all': float(row[3] or 0) - } - else: - return { - 'weight': 0, - 'count': 0, - 'count_all': 0, - 'weight_all': 0 - } - except Exception as e: - logging.error(f"获取包装记录统计数据失败: {str(e)}") - return { - 'weight': 0, - 'count': 0, - 'count_all': 0, - 'weight_all': 0 - } \ No newline at end of file + logging.error(f"获取箱号(spack)失败: {str(e)}") + return None \ No newline at end of file diff --git a/db/jtDB.db b/db/jtDB.db index e53d788..29d5926 100644 Binary files a/db/jtDB.db and b/db/jtDB.db differ diff --git a/from pymodbus.py b/from pymodbus.py index cf52f8c..464498d 100644 --- a/from pymodbus.py +++ b/from pymodbus.py @@ -2,7 +2,7 @@ from pymodbus.client import ModbusTcpClient import time client = ModbusTcpClient('localhost', port=5020) client.connect() -client.write_registers(address=11, values=[4762]) +client.write_registers(address=11, values=[5062]) # client.write_registers(address=3, values=[0]) # time.sleep(2) # client.write_registers(address=0, values=[0]) @@ -13,7 +13,7 @@ client.write_registers(address=11, values=[4762]) # 贴标完成 # client.write_registers(address=24, values=[1]) # client.write_registers(address=2, values=[0]) -client.write_registers(address=13, values=[1]) +client.write_registers(address=13, values=[0]) # time.sleep(2) # client.write_registers(address=20, values=[0]) # time.sleep(3) diff --git a/widgets/loading_dialog_widget.py b/widgets/loading_dialog_widget.py index 9447cef..ad43b5d 100644 --- a/widgets/loading_dialog_widget.py +++ b/widgets/loading_dialog_widget.py @@ -372,16 +372,20 @@ class LoadingDialog(LoadingDialogUI): Returns: dict: 上料数据字典 """ - # 获取spack值,如果order_data中有则使用,否则默认使用tray_id + order_id = self.order_input.text().strip() + tray_id = self.tray_input.text().strip() spack = "" - if self.order_data and isinstance(self.order_data, dict) and 'spack' in self.order_data: - spack = self.order_data['spack'] + + gc_api = GcApi() + response = gc_api.get_spack_info(order_id, tray_id, self.corp_id) + if response and response.get("status", False): + spack = response.get("data", {}).get("spack", "") else: - spack = self.tray_input.text().strip() + spack = "" return { - "order_id": self.order_input.text().strip(), - "tray_id": self.tray_input.text().strip(), + "order_id": order_id, + "tray_id": tray_id, "spack": spack, # 添加spack字段 "pallet_tier": self.pallet_tier_value.text().strip(), "order_data": self.order_data if self.order_data else {} diff --git a/widgets/main_window.py b/widgets/main_window.py index d848db8..8f6ed04 100644 --- a/widgets/main_window.py +++ b/widgets/main_window.py @@ -673,10 +673,9 @@ class MainWindow(MainWindowUI): loading_data = dialog.get_loading_data() order_code = loading_data.get("order_id", "").strip() tray_code = loading_data.get("tray_id", "").strip() - spack = loading_data.get("spack", tray_code).strip() if loading_data.get("spack") else tray_code.strip() - + spack = loading_data.get("spack") + self._current_spack = spack or self._current_spack or tray_code # 保存spack到全局变量 self._current_order_code = order_code - self._current_spack = spack # 保存spack到全局变量 self.tray_edit.setText(tray_code) logging.info(f"从上料对话框获取数据: order_code={order_code}, tray_code={tray_code}, spack={spack}") @@ -1155,10 +1154,10 @@ class MainWindow(MainWindowUI): 'status': 'init', # 设置初始状态 'remark': '', 'tray_id': tray_id, - 'package_id': self._current_spack + 'package_id': self._current_spack or tray_id }] inspection_dao.save_inspection_data(self._current_order_code,gc_note, data) - package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else None + package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else tray_id # 为贴标和称重也创建空记录 for position in [11, 12, 13]: # 11是贴标,12是毛重,13是净重 data = [{ @@ -1378,7 +1377,7 @@ class MainWindow(MainWindowUI): # 构建数据 # 如果没有提供package_id,则使用当前的_current_spack if package_id is None: - package_id = getattr(self, '_current_spack', '') + package_id = getattr(self, '_current_spack', '') or tray_id data = [{ 'position': position, @@ -1523,7 +1522,7 @@ class MainWindow(MainWindowUI): inspection_dao = InspectionDAO() # 获取箱号 - package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else None + package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else tray_id # 使用get_inspection_data_unfinished获取未完成的数据 unfinished_data = inspection_dao.get_inspection_data_unfinished(tray_id, package_id) @@ -1776,7 +1775,7 @@ class MainWindow(MainWindowUI): return # 获取箱号 - package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else None + package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else tray_id # 读取已包装的记录信息 package_record = inspection_dao.get_package_record(tray_id, package_id) @@ -1989,7 +1988,7 @@ class MainWindow(MainWindowUI): # 添加查询数据库菜单项 check_action = menu.addAction("检查数据库记录") - package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else None + package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else tray_id check_action.triggered.connect(lambda: self.check_database_record(order_id, position, tray_id, package_id)) # 显示菜单 @@ -2012,7 +2011,7 @@ class MainWindow(MainWindowUI): inspection_dao = InspectionDAO() # 如果没有提供package_id,则使用当前的_current_spack - package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else None + package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else tray_id # 获取检验数据 inspection_data = inspection_dao.get_inspection_data_by_order(order_id, order_id, tray_id, package_id) @@ -2868,7 +2867,7 @@ class MainWindow(MainWindowUI): # 写入单元格 self.process_table.setItem(data_row, label_col, label_item) logging.info(f"已将贴标数据 {axios_num} 写入表格单元格 [{data_row}, {label_col}]") - package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else None + package_id = self._current_spack if hasattr(self, '_current_spack') and self._current_spack else tray_id # 在这里添加保存贴标数据到数据库的代码 self.save_inspection_data(self._current_order_code, gc_note, tray_id, 11, 11, str(axios_num), "pass", package_id) logging.info(f"已将贴标数据 {axios_num} 保存到数据库") @@ -3564,16 +3563,16 @@ class MainWindow(MainWindowUI): # 添加当前测量值到列表 self._diameter_measurements.append(xj_value) - # 保留最近的10个测量值,增加缓冲区大小以便更快收集足够的数据 + # 保留最近的6个测量值,增加缓冲区大小以便更快收集足够的数据 if len(self._diameter_measurements) > 6: self._diameter_measurements.pop(0) # 显示临时值到状态栏 - if len(self._diameter_measurements) < 5: - self.statusBar().showMessage(f"线径数据收集中: {xj_value:.3f} ({len(self._diameter_measurements)}/5)", 2000) + if len(self._diameter_measurements) < 3: + self.statusBar().showMessage(f"线径数据收集中: {xj_value:.3f} ({len(self._diameter_measurements)}/3)", 2000) return - # 检查稳定性 - 使用最近的5个测量值 + # 检查稳定性 - 使用最近的3个测量值 measurements = self._diameter_measurements[-3:] min_value = min(measurements) max_value = max(measurements)