from typing import List 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 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) # 更新子计划状态 # 更新子计划主产品数 instance = SubProductionProgress.objects.get(subproduction_plan=wproduct.subproduction_plan, is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT) instance.count_ok = instance.count_ok + 1 # 这个地方可能会有问题 instance.save() else:# 如果不合格 wproduct.act_state = WProduct.WPR_ACT_STATE_NOTOK # 需要走不合格品审理的工单 wproduct.update_by = user wproduct.test = None wproduct.save()