diff --git a/sf_warehouse/models/sync_common.py b/sf_warehouse/models/sync_common.py index e6392d66..15b632f6 100644 --- a/sf_warehouse/models/sync_common.py +++ b/sf_warehouse/models/sync_common.py @@ -6,7 +6,6 @@ import requests from odoo import models from odoo.exceptions import ValidationError - _logger = logging.getLogger(__name__) @@ -16,9 +15,91 @@ class MrsShelfLocationDataSync(models.Model): def _cron_shelf_location_datasync(self): try: + # 建立对应关系的函数 + def align_data(my_data, their_data): + paired_data = list(zip(my_data, their_data)) + return paired_data + + shelf_1_obj = self.env['sf.shelf'].search([('name', '=', '一号线边刀架')], limit=1) + tool_location_objs_1 = self.env['sf.shelf.location'].search([('shelf_id', '=', shelf_1_obj.id)], order='id') + + location_codes_1 = [location.barcode for location in tool_location_objs_1] + print(location_codes_1) + # 对方的数据列表 + their_data_1 = [f"ToolCab1-{i:02}" for i in range(1, 73)] + + # 执行对齐 + aligned_data_1 = align_data(location_codes_1, their_data_1) + + # 2 + shelf_2_obj = self.env['sf.shelf'].search([('name', '=', '二号线边刀架')], limit=1) + tool_location_objs_2 = self.env['sf.shelf.location'].search([('shelf_id', '=', shelf_2_obj.id)], order='id') + + location_codes_2 = [location.barcode for location in tool_location_objs_2] + print(location_codes_2) + # 对方的数据列表 + their_data_2 = [f"ToolCab2-{i:02}" for i in range(1, 73)] + + # 执行对齐 + aligned_data_2 = align_data(location_codes_2, their_data_2) + + # 4 + shelf_4_obj = self.env['sf.shelf'].search([('name', '=', '一号线边料架')], limit=1) + tool_location_objs_4 = self.env['sf.shelf.location'].search([('shelf_id', '=', shelf_4_obj.id)], order='id') + + location_codes_4 = [location.barcode for location in tool_location_objs_4] + print(location_codes_4) + # 对方的数据列表 + their_data_4 = [f"PartCab4-{i:02}" for i in range(1, 17)] + + # 执行对齐 + aligned_data_4 = align_data(location_codes_4, their_data_4) + + # 3 + shelf_3_obj = self.env['sf.shelf'].search([('name', '=', '一号线边料架')], limit=1) + tool_location_objs_3 = self.env['sf.shelf.location'].search([('shelf_id', '=', shelf_3_obj.id)], order='id') + + location_codes_3 = [location.barcode for location in tool_location_objs_3] + print(location_codes_3) + # 对方的数据列表 + their_data_3 = [f"PartCab3-{i:02}" for i in range(1, 13)] + + # 执行对齐 + aligned_data_3 = align_data(location_codes_3, their_data_3) + + # 5 + shelf_5_obj = self.env['sf.shelf'].search([('name', '=', '一号线边料架')], limit=1) + tool_location_objs_5 = self.env['sf.shelf.location'].search([('shelf_id', '=', shelf_5_obj.id)], order='id') + + location_codes_5 = [location.barcode for location in tool_location_objs_5] + print(location_codes_5) + # 对方的数据列表 + their_data_5 = [f"PartCab5-{i:02}" for i in range(1, 13)] + + # 执行对齐 + aligned_data_5 = align_data(location_codes_5, their_data_5) + + total_data = aligned_data_1 + aligned_data_2 + aligned_data_3 + aligned_data_4 + aligned_data_5 + print(total_data) + logging.info(f"total_data: {total_data}") + + def find_their_code(my_code, aligned_data): + for code_pair in aligned_data: + if code_pair[0] == my_code: + return code_pair[1] + return None # 如果没有找到对应的值,返回None或适当的默认值 + + def find_our_code(their_code, aligned_data): + for code_pair in aligned_data: + if code_pair[1] == their_code: + return code_pair[0] + return None # 如果没有找到对应的值,返回None或适当的默认值 + shelfinfo = self.env['sf.shelf.location'].get_sf_shelf_location_info() + print('shelfinfo:', shelfinfo) for item in shelfinfo: - location_id = self.env['sf.shelf.location'].search([('barcode', '=', item['Postion'])], limit=1) + shelf_barcode = find_our_code(item['Postion'], total_data) + location_id = self.env['sf.shelf.location'].search([('barcode', '=', shelf_barcode)], limit=1) if location_id: stock_lot_obj = self.env['stock.lot'].search([('rfid', '=', item['RfidCode'])], limit=1) if stock_lot_obj: @@ -29,4 +110,4 @@ class MrsShelfLocationDataSync(models.Model): logging.info('货架已获取信息:%s' % item) except Exception as e: logging.info("捕获错误信息:%s" % e) - raise ValidationError("数据错误导致同步失败,请联系管理员") \ No newline at end of file + raise ValidationError("数据错误导致同步失败,请联系管理员")