Пример #1
0
        /// <summary>
        /// checkamendment for all departments, all events, all functions and orders, all notes, all documents.
        /// </summary>
        public static void checkAmendmentbyDepartment_AllofEvent()
        {
            //get the program running time, all department, all rules need to use this time as start time
            // this is trying to avoid if some department running for a long time, and total program need to run > 30 minutes

            DateTime dtNow = DateTime.Now;

            //loop 0, check if the current snapshot is finished.

            int  nTryTimes        = 0;
            bool isSnapshotFinish = false;

            isSnapshotFinish = AMP_Common.isSnapshotFinished(dtNow);

            while (!isSnapshotFinish)
            {
                //delay for 30 seconds then get the status again.
                System.Threading.Thread.Sleep(1000 * 30);


                isSnapshotFinish = AMP_Common.isSnapshotFinished(dtNow);
                nTryTimes       += 1;

                //if tried for 40 times (20 minutes) still fail, then fail.
                if (nTryTimes >= 40)
                {
                    break;
                }
            }

            if (isSnapshotFinish)
            {
                //loop 1, list all the departments need to run amendments.

                List <Notification_Dep_user> lstUser = AMP_DepartmentDAL.getDepartments();

                foreach (Notification_Dep_user dep in lstUser)
                {
                    AMP_EventDAL.dep = dep;

                    int      nSnapshotCurrent, nSnapshotPrevious;
                    DateTime dtSnapshotCurrent, dtSnapshotPrevious;

                    //loop 2, list all rules for this department. rule is defined to run hourly/daily/... with different event filters. this is trying to shrink the message numbers send to user.

                    List <AMP_Rules> lstrules = AMP_RulesDAL.getEventRules(dep.DepartmentCode, dtNow);

                    foreach (AMP_Rules rule in lstrules)
                    {
                        if (rule.RuleId != null)
                        {
                            AMP_EventDAL.rule    = rule;
                            AMP_RulesDAL.rule    = rule;
                            AMP_FunctionDAL.rule = rule;
                            AMP_OrderDAL.rule    = rule;

                            if (rule.Last_Run != null && rule.Last_Run != DateTime.MinValue)
                            {
                                nSnapshotCurrent  = AMP_Common.getRecentSnapshotID(dtNow);
                                nSnapshotPrevious = AMP_Common.getRecentSnapshotID(rule.Last_Run);

                                dtSnapshotCurrent  = AMP_Common.getRecentSnapshotDateTime(dtNow);
                                dtSnapshotPrevious = AMP_Common.getRecentSnapshotDateTime(rule.Last_Run);
                            }
                            else
                            {
                                nSnapshotCurrent  = AMP_Common.getRecentSnapshotID(dtNow);
                                nSnapshotPrevious = AMP_Common.getRecentSnapshotID(dtNow.AddMinutes(-rule.TriggerMinutes));

                                dtSnapshotCurrent  = AMP_Common.getRecentSnapshotDateTime(dtNow);
                                dtSnapshotPrevious = AMP_Common.getRecentSnapshotDateTime(dtNow.AddMinutes(-rule.TriggerMinutes));
                            }
                            AMP_EventDAL.nSnapshotCurrentID  = nSnapshotCurrent;
                            AMP_EventDAL.nSnapshotPreviousID = nSnapshotPrevious;

                            AMP_EventDAL.dtSnapshotCurrent  = dtSnapshotCurrent;
                            AMP_EventDAL.dtSnapshotPrevious = dtSnapshotPrevious;

                            AMP_RulesDAL.nSnapshotCurrentID  = nSnapshotCurrent;
                            AMP_RulesDAL.nSnapshotPreviousID = nSnapshotPrevious;

                            AMP_RulesDAL.dtSnapshotCurrent  = dtSnapshotCurrent;
                            AMP_RulesDAL.dtSnapshotPrevious = dtSnapshotPrevious;

                            //get all event in the current department rule for 'EVENT', including cancelled, turnover
                            List <EventInfo> lstEvent = AMP_EventDAL.getAllEventsFromRule();

                            CheckEvent_Amendment(lstEvent, dep, nSnapshotCurrent, nSnapshotPrevious);
                        }
                        AMP_RulesDAL.UpdateNextRun();
                    }
                }//end foreach rule

                if (dtNow.Year == 2018 && dtNow.Month <= 5)
                {
                    AMP_Notification.sendEmail("*****@*****.**", "*****@*****.**", "status of running for " + (DateTime.Now.Subtract(dtNow).TotalSeconds.ToString("G")) + " seconds.", "Start at:" + dtNow.ToString("dd/MM/yyyy HH:mm") + " finish at " + DateTime.Now.ToString("dd/MM/yyyy HH:mm"));
                }
            }
            else
            {
                AMP_Notification.sendEmail("*****@*****.**", "*****@*****.**", "Snapshot is hanging the process. Start from:" + dtNow.ToString("dd/MM/yyyy HH:mm") + " finish at " + DateTime.Now.ToString("dd/MM/yyyy HH:mm"), "Tried very hard for 4 times of checking, still not finish the snapshot process, I gave up. You can you do it, no can no bibi.");
            }
        }
Пример #2
0
        public static void checkAmendmentManually(string strDepartmentCode, int nPrevSnapshotId, int nCurrSnapshotId, string strEventCode = "All")
        {
            Notification_Dep_user dep = AMP_DepartmentDAL.getDepartment(strDepartmentCode);

            DateTime dtSnapshotCurrent, dtSnapshotPrevious;

            dtSnapshotPrevious = AMP_Common.getSnapshotDateTimeFromId(nPrevSnapshotId);
            dtSnapshotCurrent  = AMP_Common.getSnapshotDateTimeFromId(nCurrSnapshotId);
            DateTime dtNow = DateTime.Now;

            int  nTryTimes        = 0;
            bool isSnapshotFinish = false;

            isSnapshotFinish = AMP_Common.isSnapshotFinished(dtNow);

            while (!isSnapshotFinish)
            {
                //delay for 30 seconds then get the status again.
                System.Threading.Thread.Sleep(1000 * 30);


                isSnapshotFinish = AMP_Common.isSnapshotFinished(dtNow);
                nTryTimes       += 1;

                //if tried for 40 times (20 minutes) still fail, then fail.
                if (nTryTimes >= 40)
                {
                    break;
                }
            }

            if (isSnapshotFinish)
            {
                AMP_Rules common_rule = AMP_RulesDAL.getCommonEventRule();

                AMP_EventDAL.dep     = dep;
                AMP_EventDAL.rule    = common_rule;
                AMP_RulesDAL.rule    = common_rule;
                AMP_FunctionDAL.rule = common_rule;
                AMP_OrderDAL.rule    = common_rule;

                AMP_EventDAL.dtSnapshotCurrent  = dtSnapshotCurrent;
                AMP_EventDAL.dtSnapshotPrevious = dtSnapshotPrevious;

                AMP_EventDAL.nSnapshotCurrentID  = nCurrSnapshotId;
                AMP_EventDAL.nSnapshotPreviousID = nPrevSnapshotId;

                AMP_RulesDAL.nSnapshotCurrentID  = nCurrSnapshotId;
                AMP_RulesDAL.nSnapshotPreviousID = nPrevSnapshotId;

                AMP_RulesDAL.dtSnapshotCurrent  = dtSnapshotCurrent;
                AMP_RulesDAL.dtSnapshotPrevious = dtSnapshotPrevious;

                List <EventInfo> lstEvent = new List <EventInfo>();

                if (strEventCode == "All")
                {
                    lstEvent = AMP_EventDAL.getAllEventsFromRule();
                }
                else
                {
                    EventInfo evt = AMP_EventDAL.getEventInfo(int.Parse(strEventCode));
                    lstEvent.Add(evt);
                }

                CheckEvent_Amendment(lstEvent, dep, nCurrSnapshotId, nPrevSnapshotId);
                AMP_Notification.sendEmail("*****@*****.**", "*****@*****.**", "status of running for " + (DateTime.Now.Subtract(dtNow).TotalSeconds), " seconds. Start at:" + dtNow.ToString("dd/MM/yyyy HH:mm") + " finish at " + DateTime.Now.ToString("dd/MM/yyyy HH:mm"));
            }
            else
            {
                AMP_Notification.sendEmail("*****@*****.**", "*****@*****.**", "Snapshot is hanging the process. Start from:" + dtNow.ToString("dd/MM/yyyy HH:mm") + " finish at " + DateTime.Now.ToString("dd/MM/yyyy HH:mm"), "Tried very hard for 4 times, the process of snapshot is still not finished yet. I gave up. You can you do it, no can no bibi.");
            }
        }