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)