feat: 物料信息导入功能
This commit is contained in:
parent
1c802eafb1
commit
fcc613170e
|
@ -1,7 +1,7 @@
|
||||||
from apps.mtm.models import Goal, Mgroup
|
from apps.mtm.models import Goal, Mgroup
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.db.models import Q
|
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 rest_framework.exceptions import ParseError
|
||||||
from apps.utils.tools import ranstr
|
from apps.utils.tools import ranstr
|
||||||
|
|
||||||
|
@ -36,23 +36,37 @@ def daoru_material(path: str):
|
||||||
from apps.utils.snowflake import idWorker
|
from apps.utils.snowflake import idWorker
|
||||||
from openpyxl import load_workbook
|
from openpyxl import load_workbook
|
||||||
wb = load_workbook(path)
|
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
|
i = 3
|
||||||
while sheet[f'a{i}'].value is not None:
|
while sheet[f'a{i}'].value is not None:
|
||||||
type_str = sheet[f'a{i}'].value.replace(' ', '')
|
type_str = sheet[f'a{i}'].value.replace(' ', '')
|
||||||
try:
|
try:
|
||||||
type = type_dict[type_str]
|
type = type_dict[type_str]
|
||||||
except KeyError:
|
name = sheet[f'b{i}'].value.replace(' ', '')
|
||||||
raise ParseError(f'{i}行物料类型错误')
|
specification = sheet[f'c{i}'].value.replace(
|
||||||
name = sheet[f'b{i}'].value
|
'×', '*').replace(' ', '')
|
||||||
specification = sheet[f'c{i}'].value
|
model = sheet[f'd{i}'].value.replace(' ', '')
|
||||||
model = sheet[f'd{i}'].value
|
unit = sheet[f'e{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:
|
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(
|
Material.objects.update_or_create(
|
||||||
defaults={'type': type, 'name': name, 'specification': specification,
|
defaults=default,
|
||||||
'model': model, 'unit': unit, 'id': idWorker.get_id(), 'number': f'm{type}_{ranstr(6)}'},
|
**filters
|
||||||
type=type, name=name, specification=specification, model=model, unit=unit
|
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise ParseError(f'{i}行物料有误, 导入失败--{e}')
|
raise ParseError(f'{i}行物料有误, 导入失败--{e}')
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue