70 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
from typing import List
 | 
						|
 | 
						|
from django.db.models.expressions import F
 | 
						|
from apps.pm.models import SubProductionPlan, SubProductionProgress
 | 
						|
from apps.mtm.models import Material, Step, SubprodctionMaterial
 | 
						|
from apps.qm.models import TestRecord
 | 
						|
from apps.system.models import User
 | 
						|
from apps.wpm.models import WProduct
 | 
						|
from utils.tools import ranstr
 | 
						|
class WpmServies(object):
 | 
						|
 | 
						|
    @classmethod    
 | 
						|
    def get_next_step(cls, subproduction_plan:SubProductionPlan, nowstep:Step):
 | 
						|
        """
 | 
						|
        获取下一步骤
 | 
						|
        """
 | 
						|
        stepIds = [i['id'] for i in subproduction_plan.steps]
 | 
						|
        pindex = stepIds.index(nowstep.id)
 | 
						|
        if pindex + 1 < len(stepIds):
 | 
						|
            return Step.objects.get(pk=stepIds[pindex+1]), True
 | 
						|
        else:
 | 
						|
            return nowstep, False
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def get_subplans_queryset_from_wproducts(cls, wproducts:List):
 | 
						|
        """
 | 
						|
        通过半成品列表获取所属子计划
 | 
						|
        """
 | 
						|
        splans = SubProductionPlan.objects.filter(is_deleted=False, wproduct_subplan__in=wproducts)
 | 
						|
        return splans
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def get_subplans_queyset_from_step(cls, step:Step):
 | 
						|
        """
 | 
						|
        通过当前操作获取所有正在进行的子计划
 | 
						|
        """
 | 
						|
        splans = SubProductionPlan.objects.filter(is_deleted=False, 
 | 
						|
                subproduction__usedstep_subproduction__step=step, state=SubProductionPlan.SUBPLAN_STATE_WORKING)
 | 
						|
        return splans
 | 
						|
    
 | 
						|
    @classmethod
 | 
						|
    def update_wproduct_by_test(cls, test:TestRecord, user:User):
 | 
						|
        """
 | 
						|
        根据检验结果更新玻璃及相关状态
 | 
						|
        """
 | 
						|
        is_testok = test.is_testok
 | 
						|
        wproduct = test.wproduct
 | 
						|
        if is_testok:
 | 
						|
            if wproduct.act_state == WProduct.WPR_ACT_STATE_TORETEST: # 复检
 | 
						|
                wproduct.act_state = WProduct.WPR_ACT_STATE_DOWAIT
 | 
						|
                wproduct.ng_sign = None # 把不合格标记去除
 | 
						|
            elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOTEST and wproduct.material.type == Material.MA_TYPE_GOOD: # 成品检验
 | 
						|
                wproduct.act_state = WProduct.WPR_ACT_STATE_TOFINALTEST 
 | 
						|
            else:
 | 
						|
                wproduct.act_state = WProduct.WPR_ACT_STATE_OK
 | 
						|
            if wproduct.number is None: # 产生半成品编号
 | 
						|
                wproduct.number = 'WP'+ranstr(7)
 | 
						|
 | 
						|
            # 更新子计划合格进度
 | 
						|
            ins = SubProductionProgress.objects.get(subproduction_plan=wproduct.subproduction_plan, 
 | 
						|
            is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT)
 | 
						|
            ins.count_ok = ins.count_ok + 1
 | 
						|
            ins.save()
 | 
						|
        else:# 如果不合格
 | 
						|
            wproduct.act_state = WProduct.WPR_ACT_STATE_NOTOK
 | 
						|
            # 需要走不合格品审理的工单
 | 
						|
        wproduct.update_by = user
 | 
						|
        wproduct.test = None
 | 
						|
        wproduct.save()
 |