From 7f31ec8add89ec624f4d6e3279a81ee4cce659de Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 28 Jul 2025 14:58:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=89=A9=E6=96=99=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=8F=8A=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/mtm/services.py | 26 ++++++++++++++------------ media/default/template/material.xlsx | Bin 9780 -> 9552 bytes 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/apps/mtm/services.py b/apps/mtm/services.py index 6ed55575..8f4155f1 100644 --- a/apps/mtm/services.py +++ b/apps/mtm/services.py @@ -51,8 +51,8 @@ def daoru_material(path: str): '辅助材料': 40, '加工工具': 50, '辅助工装': 60, '办公用品': 70} from apps.utils.snowflake import idWorker from openpyxl import load_workbook - wb = load_workbook(path) - sheet = wb['物料'] + wb = load_workbook(path, read_only=True) + sheet = wb.active process_l = Process.objects.all() process_d = {p.name: p for p in process_l} i = 3 @@ -62,22 +62,24 @@ def daoru_material(path: str): type_str = sheet[f'b{i}'].value.replace(' ', '') try: type = type_dict[type_str] + cate = sheet[f'c{i}'].value.replace(' ', '') if sheet[f'c{i}'].value else "" number = str(sheet[f'a{i}'].value).replace(' ', '') if sheet[f'a{i}'].value else None - if sheet[f'c{i}'].value: - name = str(sheet[f'c{i}'].value).replace(' ', '') + if sheet[f'd{i}'].value: + name = str(sheet[f'd{i}'].value).replace(' ', '') else: raise ParseError(f'{i}行物料信息错误: 物料名称必填') - specification = str(sheet[f'd{i}'].value).replace( - '×', '*').replace(' ', '') if sheet[f'd{i}'].value else None - model = str(sheet[f'e{i}'].value).replace(' ', '') if sheet[f'e{i}'].value else None - unit = sheet[f'f{i}'].value.replace(' ', '') - count_safe = float(sheet[f'h{i}'].value) if sheet[f'h{i}'].value else None - unit_price = float(sheet[f'i{i}'].value) if sheet[f'i{i}'].value else None + specification = str(sheet[f'e{i}'].value).replace( + '×', '*').replace(' ', '') if sheet[f'e{i}'].value else None + model = str(sheet[f'f{i}'].value).replace(' ', '') if sheet[f'f{i}'].value else None + unit = sheet[f'g{i}'].value.replace(' ', '') + count_safe = float(sheet[f'i{i}'].value) if sheet[f'i{i}'].value else None + unit_price = float(sheet[f'j{i}'].value) if sheet[f'j{i}'].value else None + bin_number_main = sheet[f'k{i}'].value.replace(' ', '') if sheet[f'k{i}'].value else None except Exception as e: raise ParseError(f'{i}行物料信息错误: {e}') if type in [20, 30]: try: - process = process_d[sheet[f'g{i}'].value.replace(' ', '')] + process = process_d[sheet[f'h{i}'].value.replace(' ', '')] except Exception as e: raise ParseError(f'{i}行物料信息错误: {e}') try: @@ -87,7 +89,7 @@ def daoru_material(path: str): filters['process'] = process default = {'type': type, 'name': name, 'specification': specification, 'model': model, 'unit': unit, 'number': number if number else f'm{type}_{ranstr(6)}', 'id': idWorker.get_id(), - 'count_safe': count_safe, 'unit_price': unit_price} + 'count_safe': count_safe, 'unit_price': unit_price, 'cate': cate, 'bin_number_main': bin_number_main} material, is_created = Material.objects.get_or_create( **filters, defaults=default) if not is_created: diff --git a/media/default/template/material.xlsx b/media/default/template/material.xlsx index db0a83ff482c965703913cfb8c8b03832155e0ce..291a3067cc9d7b36058a7d9a95d73017483397ee 100644 GIT binary patch literal 9552 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 literal 9780 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 W9sx>^-?o~d0=l5dQJ4C+PyY`iyJ%tn