Exemplo n.º 1
0
        protected void procCurWork(int cMW)
        {
            //набор заявок для свободных мастеров
            int i = 0; //по заявкам
            int j = 0; //по мастерам

            //выбираем свободные заявки
            while (i < queueWs.Count)
            {
                //проверка на наличие свободных мастеров
                if (readyMasters == 0)
                {
                    break;
                }

                if (queueWs[i].outOfTime)
                {
                    queueWs.RemoveAt(i);
                    continue;
                }

                if (queueWs[i].actualWorkshop == null)
                {
                    queueWs[i].actualWorkshop = cMW;
                    while (j < masterInWs.Count)
                    {
                        if (masterInWs[j].free)
                        {
                            break;
                        }
                        else
                        {
                            j++;
                        }
                    }
                    masterInWs[j].free = false;
                    readyMasters--;
                    switch (cMW)
                    {
                    case 0:
                        st.Ws0++;
                        break;

                    case 1:
                        st.Ws1++;
                        break;

                    case 2:
                        st.Ws2++;
                        break;

                    case 3:
                        st.Ws3++;
                        break;

                    case 4:
                        st.Ws4++;
                        break;
                    }
                    masterInWs[j].actualTimeRequest = queueWs[i];
                    requestInWork.Add(queueWs[i]);
                    queueWs.RemoveAt(i);
                    continue;
                }
                i++;
            }

            //работа с текущими заявками
            foreach (var m in masterInWs)
            {
                switch (m.workWithRequest(cMW))
                {
                case 1:
                    m.actualTimeRequest.numServ--;
                    cs.procFinRWs(1, cMW, m.actualTimeRequest);
                    m.actualTimeRequest.actualWorkshop = null;
                    requestInWork.Remove(m.actualTimeRequest);
                    m.actualTimeRequest = null;
                    readyMasters++;
                    break;

                case 0:
                    break;

                case -1:
                    cs.procFinRWs(-1);
                    m.actualTimeRequest.actualWorkshop = null;
                    m.actualTimeRequest.outOfTime      = true;
                    requestInWork.Remove(m.actualTimeRequest);
                    m.actualTimeRequest = null;
                    readyMasters++;
                    break;
                }
            }
        }