27 lines
1003 B
Python
27 lines
1003 B
Python
from apps.mtm.models import Material
|
|
from typing import List
|
|
from django.db.models import Sum
|
|
from apps.inm.models import MaterialBatch
|
|
from apps.wpm.models import WMaterial
|
|
|
|
def cal_material_count(materialId_list: List[str]=None):
|
|
"""
|
|
计算物料总数量
|
|
"""
|
|
if materialId_list is None:
|
|
materialId_list = []
|
|
if materialId_list:
|
|
objs = Material.objects.filter(id__in=set(materialId_list))
|
|
else:
|
|
objs = Material.objects.all()
|
|
for material in objs:
|
|
mb_count = MaterialBatch.objects.filter(material=material, state=10).aggregate(total=Sum("count"))["total"] or 0
|
|
wm_count = WMaterial.objects.filter(material=material, state=10).aggregate(total=Sum("count"))["total"] or 0
|
|
if mb_count is None:
|
|
mb_count = 0
|
|
if wm_count is None:
|
|
wm_count = 0
|
|
Material.objects.filter(id=material.id).update(
|
|
count_wm=wm_count,
|
|
count_mb=mb_count,
|
|
count=mb_count + wm_count) |