From fcc613170e1b03607c0fca2e998baecd5597afd4 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 4 Mar 2024 09:58:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/mtm/services.py | 36 +++++++++++++++++++-------- media/default/template/material.xlsx | Bin 0 -> 9725 bytes 2 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 media/default/template/material.xlsx diff --git a/apps/mtm/services.py b/apps/mtm/services.py index 547d2fda..1f32e264 100644 --- a/apps/mtm/services.py +++ b/apps/mtm/services.py @@ -1,7 +1,7 @@ from apps.mtm.models import Goal, Mgroup from django.core.cache import cache from django.db.models import Q -from apps.mtm.models import Material +from apps.mtm.models import Material, Process from rest_framework.exceptions import ParseError from apps.utils.tools import ranstr @@ -36,23 +36,37 @@ def daoru_material(path: str): from apps.utils.snowflake import idWorker from openpyxl import load_workbook wb = load_workbook(path) - sheet = wb.get_sheet_by_name('物料批次') + sheet = wb.get_sheet_by_name('物料') + process_l = Process.objects.all() + process_d = {p.name: p for p in process_l} i = 3 while sheet[f'a{i}'].value is not None: type_str = sheet[f'a{i}'].value.replace(' ', '') try: type = type_dict[type_str] - except KeyError: - raise ParseError(f'{i}行物料类型错误') - name = sheet[f'b{i}'].value - specification = sheet[f'c{i}'].value - model = sheet[f'd{i}'].value - unit = sheet[f'e{i}'].value.replace(' ', '') + name = sheet[f'b{i}'].value.replace(' ', '') + specification = sheet[f'c{i}'].value.replace( + '×', '*').replace(' ', '') + model = sheet[f'd{i}'].value.replace(' ', '') + unit = sheet[f'e{i}'].value.replace(' ', '') + except Exception as e: + raise ParseError(f'{i}行物料信息错误: {str(e)}') + if type in [20, 30]: + try: + process = process_d[sheet[f'f{i}'].value.replace(' ', '')] + except Exception as e: + raise ParseError(f'{i}行物料信息错误: {str(e)}') try: + filters = {'type': type, 'name': name, 'specification': specification, + 'model': model, 'unit': unit} + if type in [20, 30]: + filters['process'] = process + default = filters + default['number'] = f'm{type}_{ranstr(6)}' + default['id'] = idWorker.get_id() Material.objects.update_or_create( - defaults={'type': type, 'name': name, 'specification': specification, - 'model': model, 'unit': unit, 'id': idWorker.get_id(), 'number': f'm{type}_{ranstr(6)}'}, - type=type, name=name, specification=specification, model=model, unit=unit + defaults=default, + **filters ) except Exception as e: raise ParseError(f'{i}行物料有误, 导入失败--{e}') diff --git a/media/default/template/material.xlsx b/media/default/template/material.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5d151b6e447be40016972ca2d0ebc6749da486f7 GIT binary patch literal 9725 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 S_+!rqHlPFH99bCu`1F6$)lruK literal 0 HcmV?d00001