from apps.ecm.tasks import opl_task from apps.opm.models import Operation, Opl, OplWorker from apps.third.models import TDevice from apps.wf.models import Ticket, Transition def get_op_charger(state, ticket, new_ticket_data, handler): """_summary_ Args: state (_type_): 工作流节点实例 ticket (_type_): 工单实例 new_ticket_data (_type_): 提交的工单数据 handler (_type_): 处理人实例 """ opl = Opl.objects.filter(ticket=ticket).first() if opl: return [opl.charger.id] def get_op_workers(state, ticket, new_ticket_data, handler): opl = Opl.objects.filter(ticket=ticket).first() if opl: return list(OplWorker.objects.filter(opl=opl).values_list('worker__id', flat=True)) def get_op_monitor(state, ticket, new_ticket_data, handler): opl = Opl.objects.filter(ticket=ticket).first() if opl: return [opl.monitor.id] def bind_opl(ticket: Ticket, transition: Transition, new_ticket_data: dict): opl = Opl.objects.get(id=new_ticket_data['opl']) ticket_data = ticket.ticket_data ticket_data.update({ 'operation': opl.operation.id, # operation id值 'level': opl.level, 'monitor': opl.monitor.id, 'workers': list(OplWorker.objects.filter(opl=opl).values_list('worker__id', flat=True)), 'charger': opl.charger.id, 'dept_ter': opl.operation.dept_ter.id, 'dept_bus': opl.operation.dept_bus.id }) ticket.ticket_data = ticket_data ticket.create_by = opl.create_by ticket.save() opl.ticket = ticket opl.number = ticket.sn opl.save() op = opl.operation if op.state == Operation.OP_CREATE: op.state = Operation.OP_AUDIT op.save() def opl_audit_end(ticket: Ticket): # 任务执行1 opl = Opl.objects.get(ticket=ticket) op = opl.operation if op.state == Operation.OP_AUDIT: op.state = Operation.OP_WAIT op.save() # 授予相关工作人员区域进入权限 # worker_ep_ids = list(OplWorker.objects.filter(opl=opl).values_list('worker__id', flat=True)) # 发送通知 def opl_start(ticket: Ticket): # 任务执行2 开始许可证作业 opl = Opl.objects.get(ticket=ticket) op = opl.operation if op.state == Operation.OP_WAIT: op.state = Operation.OP_WORK op.save() # 给摄像头加载循环拍照算法 # 找到作业点的摄像头, 如果指定摄像头就用指定的摄像头 if op.vchannels: vc_codes = list(op.vchannels.all().values_list('code', flat=True)) else: vc_codes = list(TDevice.objects.filter(type=TDevice.DEVICE_VCHANNEL, area=op.area).values_list('code', flat=True)) opl_id = opl.id task = opl_task.delay(vc_codes, opl_id) opl.mtask_id = task.task_id opl.save()