factory/apps/mtm/services.py

75 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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, Process
from rest_framework.exceptions import ParseError
from apps.utils.tools import ranstr
def get_mgroup_goals(mgroupId, year, reload=False):
"""
获取工段某年的全部目标值, 以字典形式返回, 带缓存
"""
goals = Goal.objects.filter(
Q(mgroup__id=mgroupId) | Q(mgroup__name=mgroupId), year=year)
key = f'mgroup_{mgroupId}_goals'
if reload is False:
mgroup_goals = cache.get(key, None)
if mgroup_goals is not None:
return mgroup_goals
mgroup_goals = {}
for goal in goals:
mgroup_goals[f'{goal.goal_cate.code}_year'] = goal.goal_val
for i in range(12):
mgroup_goals[f'{goal.goal_cate.code}_{i+1}'] = getattr(
goal, f'goal_val_{i+1}')
cache.set(key, mgroup_goals, 10)
return mgroup_goals
def daoru_material(path: str):
"""
导入物料信息
"""
type_dict = {'主要原料': 30, '半成品': 20, '成品': 10,
'辅助材料': 40, '加工工具': 50, '辅助工装': 60, '办公用品': 70}
from apps.utils.snowflake import idWorker
from openpyxl import load_workbook
wb = load_workbook(path)
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]
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=default,
**filters
)
except Exception as e:
raise ParseError(f'{i}行物料有误, 导入失败--{e}')
i = i + 1
print(type, name, specification, model, unit, '导入成功')