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) |