public void doWork(string workKey, BackgroundWorkItem item)
 {
     try
     {
         using (TransactionScope tx = SCUtility.getTransactionScope())
         {
             bool          can_block_pass = true;
             bool          can_hid_pass   = true;
             bool          isSuccess      = false;
             SCApplication scApp          = SCApplication.getInstance();
             //BCFApplication bcfApp, AVEHICLE eqpt, EventType eventType, int seqNum, string req_block_id, string req_hid_secid
             //Node node = item.Param[0] as Node;
             BCFApplication bcfApp        = item.Param[0] as BCFApplication;
             AVEHICLE       eqpt          = item.Param[1] as AVEHICLE;
             EventType      eventType     = (EventType)item.Param[2];
             int            seqNum        = (int)item.Param[3];
             string         req_block_id  = item.Param[4] as string;
             string         req_hid_secid = item.Param[5] as string;
             can_block_pass = scApp.VehicleService.ProcessBlockReqNewNew(bcfApp, eqpt, req_block_id);
             isSuccess      = scApp.VehicleService.replyTranEventReport(bcfApp, eventType, eqpt, seqNum, canBlockPass: can_block_pass, canHIDPass: can_hid_pass);
             if (isSuccess)
             {
                 tx.Complete();
             }
         }
     }
     catch (Exception ex)
     {
         logger.Error(ex, "Exception");
     }
 }
Example #2
0
        internal bool doUpdateState(string shelf_id, string state)
        {
            bool   isSuccess = true;
            string result    = string.Empty;

            try
            {
                if (isSuccess)
                {
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            isSuccess = shelfDefBLL.updateStatus(shelf_id, state);
                            if (isSuccess)
                            {
                                tx.Complete();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                logger.Error(ex, "Execption:");
            }
            return(isSuccess);
        }
        public bool doUpdatePortUnloadVhType(string portID, E_VH_TYPE vhType)
        {
            bool isSuccess = true;

            try
            {
                if (isSuccess)
                {
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            isSuccess = scApp.PortStationBLL.OperateDB.updatePortUnloadVhType(portID, vhType);
                            if (isSuccess)
                            {
                                tx.Complete();
                                scApp.PortStationBLL.OperateCatch.updatePortUnloadVhType(portID, vhType);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                logger.Error(ex, "Execption:");
            }
            return(isSuccess);
        }
Example #4
0
        public bool doUpdateEnable(string shelf_id, bool enable)
        {
            bool   isSuccess = true;
            string result    = string.Empty;

            try
            {
                if (isSuccess)
                {
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            isSuccess = shelfDefBLL.updateEnable(shelf_id, enable);
                            if (isSuccess)
                            {
                                tx.Complete();
                                //scApp.PortStationBLL.OperateCatch.updatePriority(shelf_id, priority);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                logger.Error(ex, "Execption:");
            }
            return(isSuccess);
        }
        public void doParkZoneTypeChange(string park_zone_type_id)
        {
            bool   isSuccess = false;
            string original_park_zone_type_id = string.Empty;
            string new_park_zone_type_id      = string.Empty;

            using (DBConnection_EF con = DBConnection_EF.GetUContext())
            {
                APARKZONETYPE using_park_zone_type   = parkZoneTypeDao.getUsingParkType(con);
                APARKZONETYPE changed_park_zone_type = parkZoneTypeDao.getByID(con, park_zone_type_id);
                if (using_park_zone_type != null && changed_park_zone_type != null)
                {
                    using_park_zone_type.IS_DEFAULT   = 0;
                    changed_park_zone_type.IS_DEFAULT = 1;
                    parkZoneTypeDao.upadate(con);
                    original_park_zone_type_id = using_park_zone_type.PARK_TYPE_ID;
                    new_park_zone_type_id      = changed_park_zone_type.PARK_TYPE_ID;
                    isSuccess = true;
                }
            }
            if (isSuccess)
            {
                setCurrentParkType();
                using (System.Transactions.TransactionScope tx = SCUtility.getTransactionScope())
                {
                    using (DBConnection_EF con = DBConnection_EF.GetUContext())
                    {
                        var original_parkzonedetails = parkZoneDetailDao.loadAllParkAdrByParkTypeID(con, original_park_zone_type_id);
                        var new_parkzonedetails      = parkZoneDetailDao.loadAllParkAdrByParkTypeID(con, new_park_zone_type_id);
                        if (original_parkzonedetails != null && new_parkzonedetails != null)
                        {
                            List <string> original_allParkAdr_id = original_parkzonedetails.Select(detail => detail.ADR_ID.Trim()).ToList();
                            List <string> new_allParkAdr_id      = new_parkzonedetails.Select(detail => detail.ADR_ID.Trim()).ToList();
                            List <string> unUseParkAdr           = original_allParkAdr_id.Except(new_allParkAdr_id).ToList();
                            List <string> newUseParkAdr          = new_allParkAdr_id.Except(original_allParkAdr_id).ToList();

                            List <AVEHICLE> in_unUse_Vhs = scApp.VehicleDao.loadParkVehicleByParkAdrID(unUseParkAdr);
                            foreach (AVEHICLE vh in in_unUse_Vhs)
                            {
                                scApp.ParkBLL.resetParkAdr(vh.PARK_ADR_ID);
                                scApp.VehicleBLL.resetVhIsInPark(vh.VEHICLE_ID);
                                vh.NotifyVhStatusChange();
                            }

                            List <AVEHICLE> in_newUse_Vhs = scApp.VehicleBLL.cache.getVhByAddressIDs(newUseParkAdr.ToArray());
                            foreach (AVEHICLE vh in in_newUse_Vhs)
                            {
                                if (vh.ACT_STATUS == ProtocolFormat.OHTMessage.VHActionStatus.Commanding)
                                {
                                    continue;
                                }
                                scApp.VehicleBLL.setVhIsInPark(vh.VEHICLE_ID, vh.CUR_ADR_ID);
                                scApp.ParkBLL.updateVhEntryParkingAdr(vh.VEHICLE_ID, vh.CUR_ADR_ID);
                                vh.NotifyVhStatusChange();
                            }
                        }
                    }
                }
            }
        }
        public bool doUpdatePortStationServiceStatus(string portID, ProtocolFormat.OHTMessage.PortStationServiceStatus status)
        {
            bool   isSuccess = true;
            string result    = string.Empty;

            try
            {
                if (isSuccess)
                {
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            isSuccess = scApp.PortStationBLL.OperateDB.updateServiceStatus(portID, status);
                            if (isSuccess)
                            {
                                tx.Complete();
                                scApp.PortStationBLL.OperateCatch.updateServiceStatus(portID, status);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                logger.Error(ex, "Execption:");
            }
            return(isSuccess);
        }
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                var finish_cmd_mcs_list = scApp.CMDBLL.loadFinishCMD_MCS();
                if (finish_cmd_mcs_list != null && finish_cmd_mcs_list.Count > 0)
                {
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            scApp.CMDBLL.remoteCMD_MCSByBatch(finish_cmd_mcs_list);
                            List <HCMD_MCS> hcmd_mcs_list = finish_cmd_mcs_list.Select(cmd => cmd.ToHCMD_MCS()).ToList();
                            scApp.CMDBLL.CreatHCMD_MCSs(hcmd_mcs_list);

                            tx.Complete();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception");
            }
        }
Example #8
0
        public bool doChangeLinkStatus(string linkStatus, out string result)
        {
            bool isSuccess = true;

            result = string.Empty;
            try
            {
                if (isSuccess)
                {
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            if (linkStatus == SCAppConstants.LinkStatus.LinkOK.ToString())
                            {
                                if (scApp.getEQObjCacheManager().getLine().Secs_Link_Stat == SCAppConstants.LinkStatus.LinkOK)
                                {
                                    result = "Selected already!";
                                }
                                else
                                {
                                    Task.Run(() => scApp.LineService.startHostCommunication());
                                    result = "OK";
                                }

                                tx.Complete();
                            }
                            else if (linkStatus == SCAppConstants.LinkStatus.LinkFail.ToString())
                            {
                                if (scApp.getEQObjCacheManager().getLine().Secs_Link_Stat == SCAppConstants.LinkStatus.LinkFail)
                                {
                                    result = "Not selected already!";
                                }
                                else
                                {
                                    Task.Run(() => scApp.LineService.stopHostCommunication());
                                    result = "OK";
                                }

                                tx.Complete();
                            }
                            else
                            {
                                result = linkStatus + " Not Defined";
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                logger.Error(ex, "Execption:");
            }
            return(isSuccess);
        }
        public void doParkZoneTypeChangeOld(string park_zone_type_id)
        {
            bool   isSuccess = false;
            string original_park_zone_type_id = string.Empty;
            string new_park_zone_type_id      = string.Empty;

            using (DBConnection_EF con = DBConnection_EF.GetUContext())
            {
                APARKZONETYPE using_park_zone_type   = parkZoneTypeDao.getUsingParkType(con);
                APARKZONETYPE changed_park_zone_type = parkZoneTypeDao.getByID(con, park_zone_type_id);
                if (using_park_zone_type != null && changed_park_zone_type != null)
                {
                    using_park_zone_type.IS_DEFAULT   = 0;
                    changed_park_zone_type.IS_DEFAULT = 1;
                    parkZoneTypeDao.upadate(con);
                    original_park_zone_type_id = using_park_zone_type.PARK_TYPE_ID;
                    new_park_zone_type_id      = changed_park_zone_type.PARK_TYPE_ID;
                    isSuccess = true;
                }
            }
            if (isSuccess)
            {
                setCurrentParkType();

                using (System.Transactions.TransactionScope tx = SCUtility.getTransactionScope())
                {
                    using (DBConnection_EF con = DBConnection_EF.GetUContext())
                    {
                        var original_parkzonedetails = parkZoneDetailDao.loadAllParkAdrByParkTypeID(con, original_park_zone_type_id);
                        var new_parkzonedetails      = parkZoneDetailDao.loadAllParkAdrByParkTypeID(con, new_park_zone_type_id);
                        if (original_parkzonedetails != null && new_parkzonedetails != null)
                        {
                            List <string>   original_allParkAdr_id = original_parkzonedetails.Select(detail => detail.ADR_ID.Trim()).ToList();
                            List <string>   new_allParkAdr_id      = new_parkzonedetails.Select(detail => detail.ADR_ID.Trim()).ToList();
                            List <string>   unUseParkAdr           = original_allParkAdr_id.Except(new_allParkAdr_id).ToList();
                            List <AVEHICLE> vhs = scApp.VehicleDao.loadParkVehicleByParkAdrID(unUseParkAdr);
                            foreach (AVEHICLE vh in vhs)
                            {
                                scApp.ParkBLL.resetParkAdr(vh.PARK_ADR_ID);
                                scApp.VehicleBLL.resetVhIsInPark(vh.VEHICLE_ID);
                            }
                        }
                    }
                }
            }
        }
Example #10
0
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                var finish_cmd_mcs_list = scApp.CMDBLL.loadFinishCMD_MCS();
                if (finish_cmd_mcs_list != null && finish_cmd_mcs_list.Count > 0)
                {
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            scApp.CMDBLL.remoteCMD_MCSByBatch(finish_cmd_mcs_list);
                            List <HTRANSFER> hcmd_mcs_list = finish_cmd_mcs_list.Select(cmd => cmd.ToHCMD_MCS()).ToList();
                            scApp.CMDBLL.CreatHCMD_MCSs(hcmd_mcs_list);

                            tx.Complete();
                        }
                    }
                }
                //scApp.TransferBLL.redis.setHTransferInfos(finish_cmd_mcs_list);
                var finish_cmd_list = scApp.CMDBLL.loadfinishCmd();
                if (finish_cmd_list != null && finish_cmd_list.Count > 0)
                {
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            scApp.CMDBLL.remoteCMDByBatch(finish_cmd_list);
                            List <HCMD> hcmd_list = finish_cmd_list.Select(cmd => cmd.ToHCMD()).ToList();
                            scApp.CMDBLL.CreatHCMD(hcmd_list);

                            tx.Complete();
                        }
                    }
                }
                if (finish_cmd_mcs_list.Count != 0)
                {
                    finish_cmd_mcs_list.ForEach(tran => RecordHTransfer.Info(tran.ToJson()));
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception");
            }
        }
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                using (TransactionScope tx = SCUtility.getTransactionScope())
                {
                    using (DBConnection_EF con = DBConnection_EF.GetUContext())
                    {
                        MoveACMD_MCSToHCMD_MCS();

                        MoveACMD_OHTCToHCMD_OHTC();

                        RemoveNDayAgoBlockQueue(BLOCK_QUEUE_KEEP_TIME_N_Day);

                        RemoveOHTCCMDDetail();
                        tx.Complete();
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception");
            }
        }
Example #12
0
 private void MoveACMD_OHTCToHCMD_OHTC()
 {
     try
     {
         var finish_cmd_ohtc_list = scApp.CMDBLL.loadFinishCMD_OHTC();
         if (finish_cmd_ohtc_list != null && finish_cmd_ohtc_list.Count > 0)
         {
             using (TransactionScope tx = SCUtility.getTransactionScope())
             {
                 using (DBConnection_EF con = DBConnection_EF.GetUContext())
                 {
                     scApp.CMDBLL.remoteCMD_OHTCByBatch(finish_cmd_ohtc_list);
                     List <HCMD_OHTC> hcmd_ohtc_list = finish_cmd_ohtc_list.Select(cmd => cmd.ToHCMD_OHTC()).ToList();
                     scApp.CMDBLL.CreatHCMD_OHTCs(hcmd_ohtc_list);
                     tx.Complete();
                 }
             }
         }
     }
     catch (Exception ex)
     {
         logger.Error(ex, "Exception");
     }
 }
Example #13
0
        public void ProcessAlarmReport(string eqptID, string err_code, ErrorStatus status, string errorDesc)
        {
            try
            {
                string eq_id = eqptID;
                bool   is_all_alarm_clear = SCUtility.isMatche(err_code, "0") && status == ErrorStatus.ErrReset;
                //List<ALARM> alarms = null;
                List <ALARM> alarms = new List <ALARM>();
                scApp.getRedisCacheManager().BeginTransaction();
                using (TransactionScope tx = SCUtility.getTransactionScope())
                {
                    using (DBConnection_EF con = DBConnection_EF.GetUContext())
                    {
                        LogHelper.Log(logger: logger, LogLevel: LogLevel.Debug, Class: nameof(VehicleService), Device: DEVICE_NAME_AGV,
                                      Data: $"Process eq alarm report.alarm code:{err_code},alarm status{status},error desc:{errorDesc}");
                        ALARM alarm = null;
                        if (is_all_alarm_clear)
                        {
                            alarms = scApp.AlarmBLL.resetAllAlarmReport(eq_id);
                            scApp.AlarmBLL.resetAllAlarmReport2Redis(eq_id);
                        }
                        else
                        {
                            switch (status)
                            {
                            case ErrorStatus.ErrSet:
                                //將設備上報的Alarm填入資料庫。
                                alarm = scApp.AlarmBLL.setAlarmReport(eq_id, err_code, errorDesc);
                                //將其更新至Redis,保存目前所發生的Alarm
                                scApp.AlarmBLL.setAlarmReport2Redis(alarm);
                                //alarms = new List<ALARM>() { alarm };
                                if (alarm != null)
                                {
                                    alarms.Add(alarm);
                                }
                                break;

                            case ErrorStatus.ErrReset:
                                //將設備上報的Alarm從資料庫刪除。
                                alarm = scApp.AlarmBLL.resetAlarmReport(eq_id, err_code);
                                //將其更新至Redis,保存目前所發生的Alarm
                                scApp.AlarmBLL.resetAlarmReport2Redis(alarm);
                                //alarms = new List<ALARM>() { alarm };
                                if (alarm != null)
                                {
                                    alarms.Add(alarm);
                                }
                                break;
                            }
                        }
                        tx.Complete();
                    }
                }
                scApp.getRedisCacheManager().ExecuteTransaction();
                //通知有Alarm的資訊改變。
                if (alarms != null && alarms.Count > 0)
                {
                    //scApp.getNatsManager().PublishAsync(SCAppConstants.NATS_SUBJECT_CURRENT_ALARM, new byte[0]);
                    line.NotifyAlarmListChange();
                }

                foreach (ALARM report_alarm in alarms)
                {
                    if (report_alarm == null)
                    {
                        continue;
                    }
                    if (report_alarm.ALAM_LVL == E_ALARM_LVL.Warn)
                    {
                        continue;
                    }
                    //需判斷Alarm是否存在如果有的話則需再判斷MCS是否有Disable該Alarm的上報
                    if (scApp.AlarmBLL.IsReportToHost(report_alarm.ALAM_CODE))
                    {
                        string alarm_code = report_alarm.ALAM_CODE;
                        List <AMCSREPORTQUEUE> reportqueues = new List <AMCSREPORTQUEUE>();
                        if (report_alarm.ALAM_STAT == ErrorStatus.ErrSet)
                        {
                            //scApp.ReportBLL.ReportAlarmHappend("", "", report_alarm.ALAM_STAT, alarm_code, report_alarm.ALAM_DESC, reportqueues);
                            scApp.ReportBLL.ReportAlarmHappend(eq_id, "", report_alarm.ALAM_STAT, alarm_code, report_alarm.ALAM_DESC, reportqueues);
                        }
                        else
                        {
                            //scApp.ReportBLL.ReportAlarmCleared("", "", report_alarm.ALAM_STAT, alarm_code, report_alarm.ALAM_DESC, reportqueues);
                            scApp.ReportBLL.ReportAlarmCleared(eq_id, "", report_alarm.ALAM_STAT, alarm_code, report_alarm.ALAM_DESC, reportqueues);
                        }
                        scApp.ReportBLL.newSendMCSMessage(reportqueues);

                        LogHelper.Log(logger: logger, LogLevel: LogLevel.Debug, Class: nameof(VehicleService), Device: DEVICE_NAME_AGV,
                                      Data: $"do report alarm to mcs,eq:{eq_id} alarm code:{err_code},alarm status{status}");
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Log(logger: logger, LogLevel: LogLevel.Warn, Class: nameof(VehicleService), Device: DEVICE_NAME_AGV,
                              Data: ex);
            }
        }
Example #14
0
        public void ProcessAlarmReport(AVEHICLE vh, string err_code, ErrorStatus status, string errorDesc)
        {
            try
            {
                string node_id = vh.NODE_ID;
                string vh_id   = vh.VEHICLE_ID;

                //string mcs_cmd_id_1 = SCUtility.Trim(vh.TRANSFER_ID_1, true);
                //string mcs_cmd_id_2 = SCUtility.Trim(vh.TRANSFER_ID_2, true);
                List <string> effect_tran_cmd_ids = tryGetEffectTransferCommnadID(vh);

                bool is_all_alarm_clear = SCUtility.isMatche(err_code, "0") && status == ErrorStatus.ErrReset;
                //List<ALARM> alarms = null;
                List <ALARM> alarms = new List <ALARM>();
                scApp.getRedisCacheManager().BeginTransaction();
                using (TransactionScope tx = SCUtility.getTransactionScope())
                {
                    using (DBConnection_EF con = DBConnection_EF.GetUContext())
                    {
                        LogHelper.Log(logger: logger, LogLevel: LogLevel.Debug, Class: nameof(VehicleService), Device: DEVICE_NAME_AGV,
                                      Data: $"Process vehicle alarm report.alarm code:{err_code},alarm status{status},error desc:{errorDesc}",
                                      VehicleID: vh.VEHICLE_ID,
                                      CST_ID_L: vh.CST_ID_L,
                                      CST_ID_R: vh.CST_ID_R);
                        ALARM alarm = null;
                        if (is_all_alarm_clear)
                        {
                            alarms = scApp.AlarmBLL.resetAllAlarmReport(vh_id);
                            scApp.AlarmBLL.resetAllAlarmReport2Redis(vh_id);
                        }
                        else
                        {
                            switch (status)
                            {
                            case ErrorStatus.ErrSet:
                                //將設備上報的Alarm填入資料庫。
                                //alarm = scApp.AlarmBLL.setAlarmReport(node_id, vh_id, err_code, errorDesc, mcs_cmd_id_1, mcs_cmd_id_2);
                                alarm = scApp.AlarmBLL.setAlarmReport(node_id, vh_id, err_code, errorDesc, effect_tran_cmd_ids);
                                //將其更新至Redis,保存目前所發生的Alarm
                                scApp.AlarmBLL.setAlarmReport2Redis(alarm);
                                //alarms = new List<ALARM>() { alarm };
                                if (alarm != null)
                                {
                                    alarms.Add(alarm);
                                }
                                break;

                            case ErrorStatus.ErrReset:
                                //將設備上報的Alarm從資料庫刪除。
                                alarm = scApp.AlarmBLL.resetAlarmReport(vh_id, err_code);
                                //將其更新至Redis,保存目前所發生的Alarm
                                scApp.AlarmBLL.resetAlarmReport2Redis(alarm);
                                //alarms = new List<ALARM>() { alarm };
                                if (alarm != null)
                                {
                                    alarms.Add(alarm);
                                }
                                break;
                            }
                        }
                        tx.Complete();
                    }
                }
                scApp.getRedisCacheManager().ExecuteTransaction();
                //通知有Alarm的資訊改變。
                if (alarms != null && alarms.Count > 0)
                {
                    //scApp.getNatsManager().PublishAsync(SCAppConstants.NATS_SUBJECT_CURRENT_ALARM, new byte[0]);
                    line.NotifyAlarmListChange();
                }


                foreach (ALARM report_alarm in alarms)
                {
                    if (report_alarm == null)
                    {
                        continue;
                    }
                    if (report_alarm.ALAM_LVL == E_ALARM_LVL.Warn)
                    {
                        continue;
                    }
                    //需判斷Alarm是否存在如果有的話則需再判斷MCS是否有Disable該Alarm的上報
                    if (scApp.AlarmBLL.IsReportToHost(report_alarm.ALAM_CODE))
                    {
                        string alarm_code = report_alarm.ALAM_CODE;
                        //scApp.ReportBLL.ReportAlarmHappend(eqpt.VEHICLE_ID, alarm.ALAM_STAT, alarm.ALAM_CODE, alarm.ALAM_DESC, out reportqueues);
                        string transfer_id = tryGetCurrentTransferCommand(vh);

                        List <AMCSREPORTQUEUE> reportqueues = new List <AMCSREPORTQUEUE>();
                        if (report_alarm.ALAM_STAT == ErrorStatus.ErrSet)
                        {
                            scApp.ReportBLL.ReportAlarmHappend(vh.VEHICLE_ID, transfer_id, report_alarm.ALAM_STAT, alarm_code, report_alarm.ALAM_DESC, reportqueues);
                        }
                        else
                        {
                            scApp.ReportBLL.ReportAlarmCleared(vh.VEHICLE_ID, transfer_id, report_alarm.ALAM_STAT, alarm_code, report_alarm.ALAM_DESC, reportqueues);
                        }
                        scApp.ReportBLL.newSendMCSMessage(reportqueues);

                        LogHelper.Log(logger: logger, LogLevel: LogLevel.Debug, Class: nameof(VehicleService), Device: DEVICE_NAME_AGV,
                                      Data: $"do report alarm to mcs,vh:{vh.VEHICLE_ID} alarm code:{err_code},alarm status{status}",
                                      VehicleID: vh.VEHICLE_ID,
                                      CST_ID_L: vh.CST_ID_L,
                                      CST_ID_R: vh.CST_ID_R);
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Log(logger: logger, LogLevel: LogLevel.Warn, Class: nameof(VehicleService), Device: DEVICE_NAME_AGV,
                              Data: ex,
                              VehicleID: vh.VEHICLE_ID,
                              CST_ID_L: vh.CST_ID_L,
                              CST_ID_R: vh.CST_ID_R);
            }
        }
Example #15
0
        public bool doEnableDisableSegment(string segment_id, E_PORT_STATUS status, ASEGMENT.DisableType disableType, string laneCutType)
        {
            bool     is_success = true;
            ASEGMENT seg_do     = null;

            try
            {
                LogHelper.Log(logger: logger, LogLevel: LogLevel.Info, Class: nameof(RoadControlService), Device: "OHxC",
                              Data: $"Start process segment:{segment_id} excute:{status} ,disable type:{disableType} ,lane cut type:{laneCutType}");

                bool     is_status_change = false;
                ASEGMENT seg_vo           = SegmentBLL.cache.GetSegment(segment_id);
                lock (seg_vo)
                {
                    List <APORTSTATION> port_stations = PortStationBLL.OperateCatch.loadAllPortBySegmentID(segment_id, SectionBLL);
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            switch (status)
                            {
                            case E_PORT_STATUS.InService:
                                seg_do = RouteGuide.OpenSegment(segment_id, disableType);
                                break;

                            case E_PORT_STATUS.OutOfService:
                                seg_do = RouteGuide.CloseSegment(segment_id, disableType);
                                break;
                            }
                            is_status_change = seg_vo.STATUS != seg_do.STATUS;
                            if (is_status_change)
                            {
                                foreach (APORTSTATION port_station in port_stations)
                                {
                                    PortStationBLL.OperateDB.updatePortStationStatus(port_station.PORT_ID, status);
                                    PortStationBLL.OperateCatch.updatePortStationStatus(port_station.PORT_ID, status);
                                }
                            }
                            tx.Complete();
                        }
                    }
                    seg_vo.put(seg_do);
                    segmentListChanged?.Invoke(this, seg_vo);

                    LogHelper.Log(logger: logger, LogLevel: LogLevel.Info, Class: nameof(RoadControlService), Device: "OHxC",
                                  Data: $"end process segment:{segment_id} excute:{status} ,disable type:{disableType} ,lane cut type:{laneCutType}" +
                                  $"finial status:{seg_vo.STATUS},DISABLE_FLAG_USER:{seg_vo.DISABLE_FLAG_USER},DISABLE_FLAG_SAFETY:{seg_vo.DISABLE_FLAG_SAFETY}" +
                                  $",DISABLE_FLAG_HID:{seg_vo.DISABLE_FLAG_HID},DISABLE_FLAG_SYSTEM:{seg_vo.DISABLE_FLAG_SYSTEM}");

                    if (is_status_change)
                    {
                        List <AMCSREPORTQUEUE> reportqueues = new List <AMCSREPORTQUEUE>();
                        List <ASECTION>        sections     = SectionBLL.cache.loadSectionsBySegmentID(segment_id);
                        string segment_start_adr            = sections.First().FROM_ADR_ID;
                        string segment_end_adr = sections.Last().TO_ADR_ID;
                        switch (seg_vo.STATUS)
                        {
                        case E_SEG_STATUS.Active:
                            ReportBLL.newReportLaneInService(segment_start_adr, segment_end_adr, laneCutType, reportqueues);
                            break;

                        case E_SEG_STATUS.Closed:
                            ReportBLL.newReportLaneOutOfService(segment_start_adr, segment_end_adr, laneCutType, reportqueues);
                            break;
                        }
                        foreach (APORTSTATION port_station in port_stations)
                        {
                            switch (seg_vo.STATUS)
                            {
                            case E_SEG_STATUS.Active:
                                ReportBLL.newReportPortInServeice(port_station.PORT_ID, reportqueues);
                                break;

                            case E_SEG_STATUS.Closed:
                                ReportBLL.newReportPortOutOfService(port_station.PORT_ID, reportqueues);
                                break;
                            }
                        }
                        ReportBLL.newSendMCSMessage(reportqueues);
                    }
                }
            }
            catch (Exception ex)
            {
                seg_do = null;
                logger.Error(ex, "Exception:");
                is_success = false;
            }
            return(is_success);
            //return seg_do;
        }
Example #16
0
        public void doEnableDisableSegment(string segment_id, E_PORT_STATUS port_status, string laneCutType)
        {
            ASEGMENT segment = null;

            try
            {
                List <APORTSTATION> port_stations = PortStationBLL.OperateCatch.loadAllPortBySegmentID(segment_id, SectionBLL);

                using (TransactionScope tx = SCUtility.getTransactionScope())
                {
                    using (DBConnection_EF con = DBConnection_EF.GetUContext())
                    {
                        switch (port_status)
                        {
                        case E_PORT_STATUS.InService:
                            segment = RouteGuide.OpenSegment(segment_id);
                            break;

                        case E_PORT_STATUS.OutOfService:
                            segment = RouteGuide.CloseSegment(segment_id);
                            break;
                        }
                        foreach (APORTSTATION port_station in port_stations)
                        {
                            PortStationBLL.OperateDB.updatePortStationStatus(port_station.PORT_ID, port_status);
                            PortStationBLL.OperateCatch.updatePortStationStatus(port_station.PORT_ID, port_status);
                        }
                        tx.Complete();
                    }
                }
                List <AMCSREPORTQUEUE> reportqueues = new List <AMCSREPORTQUEUE>();
                List <ASECTION>        sections     = SectionBLL.cache.loadSectionsBySegmentID(segment_id);
                string segment_start_adr            = sections.First().FROM_ADR_ID;
                string segment_end_adr = sections.Last().TO_ADR_ID;
                switch (port_status)
                {
                case E_PORT_STATUS.InService:
                    ReportBLL.newReportLaneInService(segment_start_adr, segment_end_adr, laneCutType, reportqueues);
                    break;

                case E_PORT_STATUS.OutOfService:
                    ReportBLL.newReportLaneOutOfService(segment_start_adr, segment_end_adr, laneCutType, reportqueues);
                    break;
                }
                foreach (APORTSTATION port_station in port_stations)
                {
                    switch (port_status)
                    {
                    case E_PORT_STATUS.InService:
                        ReportBLL.newReportPortInServeice(port_station.PORT_ID, reportqueues);
                        break;

                    case E_PORT_STATUS.OutOfService:
                        ReportBLL.newReportPortOutOfService(port_station.PORT_ID, reportqueues);
                        break;
                    }
                }
                ReportBLL.newSendMCSMessage(reportqueues);
            }
            catch (Exception ex)
            {
                segment = null;
                logger.Error(ex, "Exception:");
            }
            //return segment;
        }
Example #17
0
        public bool doChangeTSCstate(string tscstate, out string result)
        {
            bool isSuccess = true;

            result = string.Empty;
            try
            {
                if (isSuccess)
                {
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            if (tscstate == ALINE.TSCState.AUTO.ToString())
                            {
                                if (scApp.getEQObjCacheManager().getLine().SCStats == ALINE.TSCState.AUTO)
                                {
                                    result = "AUTO ready";
                                }
                                else
                                {
                                    Task.Run(() => scApp.getEQObjCacheManager().getLine().ResumeToAuto(scApp.ReportBLL));
                                    result = "OK";
                                }
                                //isSuccess = scApp.PortStationBLL.OperateDB.updatePriority(portID, priority);
                                //if (isSuccess)
                                //{
                                tx.Complete();
                                //    scApp.PortStationBLL.OperateCatch.updatePriority(portID, priority);
                                //}
                            }
                            else if (tscstate == ALINE.TSCState.PAUSED.ToString())
                            {
                                if (scApp.getEQObjCacheManager().getLine().SCStats == ALINE.TSCState.PAUSED)
                                {
                                    //MessageBox.Show("Has vh not ready");
                                    //回報當無法連線
                                    result = "PAUSED ready";
                                }
                                else
                                {
                                    Task.Run(() => scApp.LineService.TSCStateToPause(""));
                                    result = "OK";
                                }
                                //isSuccess = scApp.PortStationBLL.OperateDB.updatePriority(portID, priority);
                                //if (isSuccess)
                                //{
                                tx.Complete();
                                //    scApp.PortStationBLL.OperateCatch.updatePriority(portID, priority);
                                //}
                            }
                            else
                            {
                                result = tscstate + " Not Defined";
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                logger.Error(ex, "Execption:");
            }
            return(isSuccess);
        }
Example #18
0
        public bool doChangeHostMode(string host_mode, out string result)
        {
            bool isSuccess = true;

            result = string.Empty;
            try
            {
                if (isSuccess)
                {
                    using (TransactionScope tx = SCUtility.getTransactionScope())
                    {
                        using (DBConnection_EF con = DBConnection_EF.GetUContext())
                        {
                            if (host_mode == SCAppConstants.LineHostControlState.HostControlState.On_Line_Remote.ToString())
                            {
                                if (!scApp.LineService.canOnlineWithHost())
                                {
                                    //MessageBox.Show("Has vh not ready");
                                    //回報當無法連線
                                    result = "Has vh not ready";
                                }
                                else if (scApp.getEQObjCacheManager().getLine().Host_Control_State == SCAppConstants.LineHostControlState.HostControlState.On_Line_Remote)
                                {
                                    //MessageBox.Show("On line ready");
                                    result = "OnlineRemote ready";
                                }
                                else
                                {
                                    line.resetOnlieCheckItem();
                                    Task.Run(() => scApp.LineService.OnlineWithHostOp());
                                    result = "OK";
                                }
                                //isSuccess = scApp.PortStationBLL.OperateDB.updatePriority(portID, priority);
                                //if (isSuccess)
                                //{
                                tx.Complete();
                                //    scApp.PortStationBLL.OperateCatch.updatePriority(portID, priority);
                                //}
                            }
                            else if (host_mode == SCAppConstants.LineHostControlState.HostControlState.On_Line_Local.ToString())
                            {
                                if (!scApp.LineService.canOnlineWithHost())
                                {
                                    //MessageBox.Show("Has vh not ready");
                                    //回報當無法連線
                                    result = "Has vh not ready";
                                }
                                else if (scApp.getEQObjCacheManager().getLine().Host_Control_State == SCAppConstants.LineHostControlState.HostControlState.On_Line_Local)
                                {
                                    //MessageBox.Show("On line ready");
                                    result = "OnlineLocal ready";
                                }
                                else
                                {
                                    line.resetOnlieCheckItem();
                                    Task.Run(() => scApp.LineService.OnlineLocalWithHostOp());
                                    result = "OK";
                                }
                                //isSuccess = scApp.PortStationBLL.OperateDB.updatePriority(portID, priority);
                                //if (isSuccess)
                                //{
                                tx.Complete();
                                //    scApp.PortStationBLL.OperateCatch.updatePriority(portID, priority);
                                //}
                            }
                            else
                            {
                                if (scApp.getEQObjCacheManager().getLine().SCStats != TSCState.PAUSED)
                                {
                                    //MessageBox.Show("Please change tsc state to pause first.");
                                    result = "Please change TSC Status to pause first.";
                                }
                                else if (scApp.getEQObjCacheManager().getLine().Host_Control_State == SCAppConstants.LineHostControlState.HostControlState.EQ_Off_line)
                                {
                                    //MessageBox.Show("Current is off line");
                                    result = "Current is off line";
                                }
                                else
                                {
                                    line.resetOnlieCheckItem();
                                    Task.Run(() => scApp.LineService.OfflineWithHostByOp());
                                    result = "OK";
                                }
                                //isSuccess = scApp.PortStationBLL.OperateDB.updatePriority(portID, priority);
                                //if (isSuccess)
                                //{
                                tx.Complete();
                                //    scApp.PortStationBLL.OperateCatch.updatePriority(portID, priority);
                                //}
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                logger.Error(ex, "Execption:");
            }
            return(isSuccess);
        }
Example #19
0
        public void ProcessAlarmReport(string nodeID, string eqID, string eqRealID, string currentAddressID, string errCode, ErrorStatus errorStatus)
        {
            string      node_id        = nodeID;
            string      eq_id          = eqID;
            string      eq_real_id     = eqRealID;
            string      current_adr_id = currentAddressID;
            string      err_code       = errCode;
            ErrorStatus status         = errorStatus;

            List <ALARM> alarms   = null;
            AlarmMap     alarmMap = scApp.AlarmBLL.GetAlarmMap(eq_id, err_code);
            //在設備上報Alarm時,如果是第一次上報(之前都沒有Alarm發生時,則要上報S6F11 CEID=51 Alarm Set)
            bool processBeferHasErrorExist = scApp.AlarmBLL.hasAlarmErrorExist();

            if (alarmMap != null &&
                alarmMap.ALARM_LVL == E_ALARM_LVL.Error &&
                status == ErrorStatus.ErrSet &&
                //!scApp.AlarmBLL.hasAlarmErrorExist())
                !processBeferHasErrorExist)
            {
                scApp.ReportBLL.newReportAlarmSet();
            }
            scApp.getRedisCacheManager().BeginTransaction();
            using (TransactionScope tx = SCUtility.getTransactionScope())
            {
                using (DBConnection_EF con = DBConnection_EF.GetUContext())
                {
                    LogHelper.Log(logger: logger, LogLevel: LogLevel.Debug, Class: nameof(VehicleService), Device: "OHxC",
                                  Data: $"Process vehicle alarm report.alarm code:{err_code},alarm status{status}",
                                  VehicleID: eq_id);
                    ALARM alarm = null;
                    switch (status)
                    {
                    case ErrorStatus.ErrSet:
                        //將設備上報的Alarm填入資料庫。
                        alarm = scApp.AlarmBLL.setAlarmReport(node_id, eq_id, err_code, null);
                        //將其更新至Redis,保存目前所發生的Alarm
                        scApp.AlarmBLL.setAlarmReport2Redis(alarm);
                        alarms = new List <ALARM>()
                        {
                            alarm
                        };
                        break;

                    case ErrorStatus.ErrReset:
                        if (SCUtility.isMatche(err_code, "0"))
                        {
                            alarms = scApp.AlarmBLL.resetAllAlarmReport(eq_id);
                            scApp.AlarmBLL.resetAllAlarmReport2Redis(eq_id);
                        }
                        else
                        {
                            //將設備上報的Alarm從資料庫刪除。
                            alarm = scApp.AlarmBLL.resetAlarmReport(eq_id, err_code);
                            //將其更新至Redis,保存目前所發生的Alarm
                            scApp.AlarmBLL.resetAlarmReport2Redis(alarm);
                            alarms = new List <ALARM>()
                            {
                                alarm
                            };
                        }
                        break;
                    }
                    tx.Complete();
                }
            }
            scApp.getRedisCacheManager().ExecuteTransaction();
            //通知有Alarm的資訊改變。
            scApp.getNatsManager().PublishAsync(SCAppConstants.NATS_SUBJECT_CURRENT_ALARM, new byte[0]);


            foreach (ALARM report_alarm in alarms)
            {
                if (report_alarm == null)
                {
                    continue;
                }
                if (report_alarm.ALAM_LVL == E_ALARM_LVL.Warn ||
                    report_alarm.ALAM_LVL == E_ALARM_LVL.None)
                {
                    continue;
                }
                //需判斷Alarm是否存在如果有的話則需再判斷MCS是否有Disable該Alarm的上報
                int ialarm_code = 0;
                int.TryParse(report_alarm.ALAM_CODE, out ialarm_code);
                string alarm_code = (ialarm_code < 0 ? ialarm_code * -1 : ialarm_code).ToString();
                if (scApp.AlarmBLL.IsReportToHost(alarm_code))
                {
                    //scApp.ReportBLL.ReportAlarmHappend(eqpt.VEHICLE_ID, alarm.ALAM_STAT, alarm.ALAM_CODE, alarm.ALAM_DESC, out reportqueues);
                    List <AMCSREPORTQUEUE> reportqueues = new List <AMCSREPORTQUEUE>();
                    if (report_alarm.ALAM_STAT == ErrorStatus.ErrSet)
                    {
                        scApp.ReportBLL.ReportAlarmHappend(report_alarm.ALAM_STAT, alarm_code, report_alarm.ALAM_DESC);
                        scApp.ReportBLL.newReportUnitAlarmSet(eq_real_id, alarm_code, report_alarm.ALAM_DESC, current_adr_id, reportqueues);
                    }
                    else
                    {
                        scApp.ReportBLL.ReportAlarmHappend(report_alarm.ALAM_STAT, alarm_code, report_alarm.ALAM_DESC);
                        scApp.ReportBLL.newReportUnitAlarmClear(eq_real_id, alarm_code, report_alarm.ALAM_DESC, current_adr_id, reportqueues);
                    }
                    scApp.ReportBLL.newSendMCSMessage(reportqueues);

                    LogHelper.Log(logger: logger, LogLevel: LogLevel.Debug, Class: nameof(VehicleService), Device: "OHxC",
                                  Data: $"do report alarm to mcs,alarm code:{err_code},alarm status{status}",
                                  VehicleID: eq_id);
                }
            }
            //在設備上報取消Alarm,如果已經沒有Alarm(Alarm都已經消除,則要上報S6F11 CEID=52 Alarm Clear)
            bool processAfterHasErrorExist = scApp.AlarmBLL.hasAlarmErrorExist();

            if (status == ErrorStatus.ErrReset &&
                //!scApp.AlarmBLL.hasAlarmErrorExist())
                processBeferHasErrorExist &&
                !processAfterHasErrorExist)
            {
                scApp.ReportBLL.newReportAlarmClear();
            }
        }