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"); } }
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); }
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"); } }
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); } } } } } }
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"); } }
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"); } }
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); } }
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); } }
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; }
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; }
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); }
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); }
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(); } }