Resilient scheduling method combining preventive maintenance for distributed heterogeneous flexible job shop problems with machine failures and rescheduling