using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using WIDESEA_Common; using WIDESEA_Common.Tools; using WIDESEA_Core.EFDbContext; using WIDESEA_Core.Utilities; using WIDESEA_Entity.DomainModels; using WIDESEA_Services; using WIDESEA_Services.IRepositories; using WIDESEA_Services.Repositories; using WIDESEA_Services.Services; using WIDESEA_WCS.WCSClient; namespace WIDESEA_WCS.Jobs { public partial class EquipmentExecutor : SchedulerExecuteBase { private static int _readFTBUPSignalso = 0; /// /// 涂布设备上料逻辑 /// /// public static void F_TBSB_UpTask() { if (Interlocked.Exchange(ref _readFTBUPSignalso, 1) == 0) { try { VOLContext Context = new VOLContext(); WebResponseContent responseContent = new WebResponseContent(); Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(Context); dt_task_numberService tasknumber = new dt_task_numberService(tasknumberRep); Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context); Ibase_routing_tableRepository routingRepository = new base_routing_tableRepository(Context); Ibill_pda_groupdiskRepository pdaRepository = new bill_pda_groupdiskRepository(Context); Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context); Ibill_group_stockRepository groupRepository = new bill_group_stockRepository(Context); List TBSBS = new List { "负极1号涂布机", "负极2号涂布机", "负极3号涂布机" }; PLCClient zagvplc = WCSService.Clients.Find(v => v.PLCName == "负极1号AGV"); foreach (var TBSB in TBSBS) { PLCClient plc = WCSService.Clients.Find(v => v.PLCName == TBSB); if (plc == null) { continue; } //启用工单 string IsBatchNo = plc.ReadValue(ConveyorLineInfoDBName.R_TBSB_IsWorkBatchNo.ToString(), plc.PLCDescroption).ToString();//H17 bool if (IsBatchNo == "False") { continue; } //当前设备有没有上料请求 string isSBWork = plc.ReadValue(ConveyorLineInfoDBName.R_TBSB_UPrequest.ToString(), plc.PLCDescroption).ToString();//D18046 bool //读取设备的工单号 string batchNo = plc.ReadValue(ConveyorLineInfoDBName.R_TBSB_UPbatchNo.ToString(), plc.PLCDescroption).ToString();//D21010 string if (batchNo == null) { continue; } //上工序名 string processName = plc.ReadValue(ConveyorLineInfoDBName.R_TBSB_TBbatchNo.ToString(), plc.PLCDescroption).ToString(); if (string.IsNullOrEmpty(processName)) { GetEquipmentInfo(plc.PLCDescroption, "", "", processName, ""); continue; } //单面涂布模式 string oneside = plc.ReadValue(ConveyorLineInfoDBName.R_TBSB_OneSide.ToString(), plc.PLCDescroption).ToString(); //双面涂布模式 string twoside = plc.ReadValue(ConveyorLineInfoDBName.R_TBSB_TwoSide.ToString(), plc.PLCDescroption).ToString(); var SBtask = agvRepository.FindFirst(f => f.agv_toaddress == plc.PLCDescroption || f.agv_fromaddress == plc.PLCDescroption); if (SBtask != null) { continue; } var route = routingRepository.Find(f => f.route_end == plc.PLCDescroption); List storedHCJ = new List(); List emptyHCJ = new List(); var iswork = ""; foreach (var r in route) { var taska = agvRepository.FindFirst(f => f.agv_toaddress == r.route_began); if (taska != null) { continue; } var fromaddress = locRepository.FindFirst(f => f.upper_code == r.route_began || f.down_code == r.route_began); iswork = zagvplc.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), r.route_began).ToString(); //if (iswork == "2" && fromaddress.location_state == LocationStateEnum.LocationState_Stored.ToString()) { storedHCJ.Add(r.route_began); } //else if (iswork == "1" && fromaddress.location_state == LocationStateEnum.LocationState_Empty.ToString()) { emptyHCJ.Add(r.route_began); } if (iswork == "2") { storedHCJ.Add(r.route_began); } else if (iswork == "1") { emptyHCJ.Add(r.route_began); } } GetEquipmentInfo(plc.PLCDescroption, isSBWork, batchNo, processName + "单面模式:" + oneside + "双面模式" + twoside, route[0].route_began + "的货位状态是" + iswork + ";" + route[1].route_began + "的货位状态是" + iswork); if (emptyHCJ.Count() == 2) { WriteLog.Info("F_TBSB_UpTask").Write("F_TBSB_UpTask" + TBSB + "1", "F_TBSB_UpTask"); if (bool.Parse(twoside)) { WriteLog.Info("F_TBSB_UpTask").Write("F_TBSB_UpTask" + TBSB + "2", "F_TBSB_UpTask"); var jjkloc = locRepository.FindFirst(f => f.down_code == "FJXL-JJK001" || f.upper_code == "FJSL-JJK001"); if (jjkloc.location_state == LocationStateEnum.LocationState_Empty.ToString()) { WriteLog.Info("F_TBSB_UpTask").Write("F_TBSB_UpTask" + TBSB + "3", "F_TBSB_UpTask"); lock (requestJJK) { responseContent = locRepository.DbContextBeginTransaction(() => { //调用大及卷库出库需求接口 dt_agvtask agvtask = new dt_agvtask { agv_materbarcode = "daiding", agv_barcode = "", agv_code = "负极1号AGV", agv_createtime = DateTime.Now, agv_fromaddress = "nou", agv_grade = 1, agv_materielid = batchNo, agv_qty = 1, agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep), agv_taskstate = "WaitStockOut", agv_tasktype = "TaskType_Outbound", agv_toaddress = emptyHCJ[0], agv_userid = "WCS", agv_worktype = 1 }; //向MES申请要料 MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(agvtask.agv_tasknum, null, 1, batchNo, processName, plc.PLCDescroption); if (WMSbackresult == null) { return WebResponseContent.Instance.Error("负极大极卷库不通过要料申请"); } jjkloc.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(jjkloc, true); var tbloc = locRepository.FindFirst(f => f.down_code == emptyHCJ[0] || f.upper_code == emptyHCJ[0]); tbloc.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(tbloc, true); agvRepository.Add(agvtask, true); WriteLog.Info("F_TBSB_UpTask").Write("F_TBSB_UpTask"+ TBSB + agvtask.agv_tasknum + DateTime.Now, "F_TBSB_UpTask"); return WebResponseContent.Instance.OK(); }); break; } } } else if (bool.Parse(oneside)) { //规格 string specifications = plc.ReadValue(ConveyorLineInfoDBName.R_TBSB_Specifications.ToString(), plc.PLCDescroption).ToString(); //厚度 string um = specifications.Split('*')[0]; //宽度 string mm = specifications.Split('*')[1]; var rou = routingRepository.Find(f => f.route_end == emptyHCJ[0]).Select(s => s.route_began).ToList(); List CBJstocks = new List(); //循环去找库存里物料类型与MES的物料类型一致的物料并且location_id是拆包间的 for (int i = 0; i < rou.Count(); i++) { var location = locRepository.FindFirst(f => f.upper_code == rou[i] || f.down_code == rou[i]); var st = groupRepository.FindFirst(f => f.MaterialType == batchNo && f.location_id == location.id&&f.Remark2==um&&f.Remark3==mm); if (st == null) { continue; } CBJstocks.Add(st); } if (CBJstocks.Count == 0) { continue; } //把CBJstocks通过批次号进行降序排列然后取第一条 var CBJstock = CBJstocks.OrderByDescending(o => o.BarCode).First(); //去货位表找对应的location_id var islocation = locRepository.FindFirst(f => f.id == CBJstock.location_id); if (islocation.location_state == LocationStateEnum.LocationState_Stored.ToString()) { dt_agvtask agvtask = new dt_agvtask { agv_materbarcode = CBJstock.BarCode, agv_barcode = "", agv_code = "负极1号AGV", agv_createtime = DateTime.Now, agv_fromaddress = islocation.down_code, agv_grade = 1, agv_materielid = batchNo, agv_qty = 1, agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep), agv_taskstate = "Create", agv_tasktype = "TaskType_Outbound", agv_toaddress = emptyHCJ[0], agv_userid = "WCS", agv_worktype = 1 }; //修改库存状态 //stock.first_tb = stock.first_tb + 1; //groupRepository.Update(CBJstock, true); agvRepository.Add(agvtask, true); WriteLog.Info("F_TBSB_UpTask").Write("F_TBSB_UpTask"+ TBSB + agvtask.agv_tasknum + CBJstock.BarCode + DateTime.Now, "F_TBSB_UpTask"); islocation.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(islocation, true); var loc = locRepository.FindFirst(f => f.upper_code == emptyHCJ[0] || f.down_code == emptyHCJ[0]); loc.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(loc, true); break; } } } else if (storedHCJ.Count() == 1 && emptyHCJ.Count() == 1) { var stocks = new bill_group_stock(); var location = locRepository.FindFirst(f => f.upper_code == storedHCJ[0] || f.down_code == storedHCJ[0]); stocks = groupRepository.FindFirst(f => f.MaterialType == batchNo && f.location_id == location.id); //有货的货位中没有匹配的物料 if (stocks == null) { if (bool.Parse(twoside)) { var jjkloc = locRepository.FindFirst(f => f.down_code == "ZJXL-JJK001" || f.upper_code == "ZJSL-JJK001"); if (jjkloc.location_state == LocationStateEnum.LocationState_Empty.ToString()) { lock (requestJJK) { //调用大及卷库出库需求接口 dt_agvtask agvtask = new dt_agvtask { agv_materbarcode = "daiding", agv_barcode = "", agv_code = "负极1号AGV", agv_createtime = DateTime.Now, agv_fromaddress = "nou", agv_grade = 1, agv_materielid = batchNo, agv_qty = 1, agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep), agv_taskstate = "WaitStockOut", agv_tasktype = "TaskType_Outbound", agv_toaddress = emptyHCJ[0], agv_userid = "WCS", agv_worktype = 1 }; //向MES申请要料 MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(agvtask.agv_tasknum, null, 1, batchNo, processName, plc.PLCDescroption); if (WMSbackresult == null) { continue; } jjkloc.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(jjkloc, true); var tbloc = locRepository.FindFirst(f => f.down_code == emptyHCJ[0] || f.upper_code == emptyHCJ[0]); tbloc.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(tbloc, true); agvRepository.Add(agvtask, true); WriteLog.Info("F_TBSB_UpTask").Write("F_TBSB_UpTask" + agvtask.agv_tasknum + DateTime.Now, "F_TBSB_UpTask"); break; } } } else if (bool.Parse(oneside)) { //规格 string specifications = plc.ReadValue(ConveyorLineInfoDBName.R_TBSB_Specifications.ToString(), plc.PLCDescroption).ToString(); //厚度 string um = specifications.Split('*')[0]; //宽度 string mm = specifications.Split('*')[1]; var rou = routingRepository.Find(f => f.route_end == emptyHCJ[0]).Select(s => s.route_began).ToList(); List CBJstocks = new List(); //循环去找库存里物料类型与MES的物料类型一致的物料并且location_id是拆包间的 for (int i = 0; i < rou.Count(); i++) { var loc = locRepository.FindFirst(f => f.upper_code == rou[i] || f.down_code == rou[i]); var st = groupRepository.FindFirst(f => f.MaterialType == batchNo && f.location_id == loc.id&&f.Remark2==um&&f.Remark3==mm); if (st == null) { continue; } CBJstocks.Add(st); } if (CBJstocks.Count == 0) { continue; } // 把CBJstocks通过批次号进行降序排列然后取第一条 var CBJstock = CBJstocks.OrderByDescending(o => o.BarCode).First(); //去货位表找对应的location_id var islocation = locRepository.FindFirst(f => f.id == CBJstock.location_id); if (islocation.location_state == LocationStateEnum.LocationState_Stored.ToString()) { dt_agvtask agvtask = new dt_agvtask { agv_materbarcode = CBJstock.BarCode, agv_barcode = "", agv_code = "负极1号AGV", agv_createtime = DateTime.Now, agv_fromaddress = islocation.down_code, agv_grade = 1, agv_materielid = batchNo, agv_qty = 1, agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep), agv_taskstate = "Create", agv_tasktype = "TaskType_Outbound", agv_toaddress = emptyHCJ[0], agv_userid = "WCS", agv_worktype = 1 }; //修改库存状态 // stock.first_tb = stock.first_tb + 1; //groupRepository.Update(CBJstock, true); agvRepository.Add(agvtask, true); WriteLog.Info("F_TBSB_UpTask").Write("F_TBSB_UpTask" + agvtask.agv_tasknum + CBJstock.BarCode + DateTime.Now, "F_TBSB_UpTask"); islocation.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(islocation, true); var loc = locRepository.FindFirst(f => f.upper_code == emptyHCJ[0] || f.down_code == emptyHCJ[0]); loc.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(loc, true); break; } } } else { if (bool.Parse(isSBWork) && location.location_state == LocationStateEnum.LocationState_Stored.ToString() && stocks.MaterialType == batchNo) { dt_agvtask agvtask = new dt_agvtask { agv_materbarcode = stocks.BarCode, agv_barcode = "", agv_code = "负极1号AGV", agv_createtime = DateTime.Now, agv_fromaddress = storedHCJ[0], agv_grade = 1, agv_materielid = batchNo, agv_qty = 1, agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep), agv_taskstate = "Create", agv_tasktype = "TaskType_Outbound", agv_toaddress = plc.PLCDescroption, agv_userid = "WCS", agv_worktype = 1 }; //写入请求上料响应信号 char[] batchnos = new char[100]; string materialtype = stocks.BarCode.Split('*')[0]; for (int i = 0; i < materialtype.Length; i++) { batchnos[i] = materialtype[i]; } string ismateriala = plc.WriteValue(ConveyorLineInfoDBName.W_TBSB_BatchNo.ToString(), plc.PLCDescroption, batchnos).ToString(); WriteLog.Info("W_TBSB_BatchNo").Write("W_TBSB_BatchNo" + agvtask.agv_tasknum + materialtype + DateTime.Now, "W_TBSB_BatchNo"); //修改起点货位状态 agvRepository.Add(agvtask, true); WriteLog.Info("F_TBSB_UpTask").Write("F_TBSB_UpTask" + agvtask.agv_tasknum + stocks.BarCode + DateTime.Now, "F_TBSB_UpTask"); location.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(location, true); break; } else { //zagvplc.WriteValue(ConveyorLineInfoDBName.MaterNG.ToString(), storedHCJ[0],1); } } } else if (storedHCJ.Count() == 2) { //调用WMS接口获取上料信息 //MESback material = MESAPIInvoke.EquipFeeding(plc.PLCDescroption, batchNo); //if (material == null) {continue; } //if (material.Code > 0) // continue; List TBstocks = new List(); var stocks = new bill_group_stock(); for (int i = 0; i < storedHCJ.Count(); i++) { var location = locRepository.FindFirst(f => f.upper_code == storedHCJ[i] || f.down_code == storedHCJ[i]); stocks = groupRepository.FindFirst(f => f.MaterialType == batchNo && f.location_id == location.id); if (stocks == null) { continue; } TBstocks.Add(stocks); } if (TBstocks.Count() > 1) { var TBstock = TBstocks.OrderByDescending(o => o.BarCode).First(); var fromlocation = locRepository.FindFirst(f => f.id == TBstock.location_id); if (bool.Parse(isSBWork) && fromlocation.location_state == LocationStateEnum.LocationState_Stored.ToString() && TBstock.MaterialType == batchNo) { dt_agvtask agvtask = new dt_agvtask { agv_materbarcode = TBstock.BarCode, agv_barcode = "", agv_code = "负极1号AGV", agv_createtime = DateTime.Now, agv_fromaddress = fromlocation.upper_code, agv_grade = 1, agv_materielid = batchNo, agv_qty = 1, agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep), agv_taskstate = "Create", agv_tasktype = "TaskType_Outbound", agv_toaddress = plc.PLCDescroption, agv_userid = "WCS", agv_worktype = 1 }; agvRepository.Add(agvtask, true); WriteLog.Info("F_TBSB_UpTask").Write("F_TBSB_UpTask" + agvtask.agv_tasknum + TBstock.BarCode + DateTime.Now, "F_TBSB_UpTask"); fromlocation.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(fromlocation, true); //写入请求上料响应信号 char[] batchnos = new char[100]; string materialtype = TBstocks[0].BarCode.Split('*')[0]; for (int i = 0; i < materialtype.Length; i++) { batchnos[i] = materialtype[i]; } string ismateriala = plc.WriteValue(ConveyorLineInfoDBName.W_TBSB_BatchNo.ToString(), plc.PLCDescroption, batchnos).ToString(); WriteLog.Info("W_TBSB_BatchNo").Write("W_TBSB_BatchNo" + agvtask.agv_tasknum + materialtype + DateTime.Now, "W_TBSB_BatchNo"); // 修改库存状态 // stock.first_tb = stock.first_tb + 1; //groupRepository.Update(TBstock, true); break; } else { //zagvplc.WriteValue(ConveyorLineInfoDBName.MaterNG.ToString(), fromlocation.upper_code, 1); } } else if (TBstocks.Count() == 1) { var fromlocation = locRepository.FindFirst(f => f.id == TBstocks[0].location_id); if (bool.Parse(isSBWork) && fromlocation.location_state == LocationStateEnum.LocationState_Stored.ToString() && TBstocks[0].MaterialType == batchNo) { dt_agvtask agvtask = new dt_agvtask { agv_materbarcode = TBstocks[0].BarCode, agv_barcode = "", agv_code = "负极1号AGV", agv_createtime = DateTime.Now, agv_fromaddress = fromlocation.upper_code, agv_grade = 1, agv_materielid = batchNo, agv_qty = 1, agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep), agv_taskstate = "Create", agv_tasktype = "TaskType_Outbound", agv_toaddress = plc.PLCDescroption, agv_userid = "WCS", agv_worktype = 1 }; agvRepository.Add(agvtask, true); WriteLog.Info("F_TBSB_UpTask").Write("F_TBSB_UpTask" + agvtask.agv_tasknum + TBstocks[0].BarCode + DateTime.Now, "F_TBSB_UpTask"); fromlocation.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(fromlocation, true); //写入请求上料响应信号 char[] batchnos = new char[100]; string materialtype = TBstocks[0].BarCode.Split('*')[0]; for (int i = 0; i < materialtype.Length; i++) { batchnos[i] = materialtype[i]; } string ismateriala = plc.WriteValue(ConveyorLineInfoDBName.W_TBSB_BatchNo.ToString(), plc.PLCDescroption, batchnos).ToString(); WriteLog.Info("W_TBSB_BatchNo").Write("W_TBSB_BatchNo" + agvtask.agv_tasknum + materialtype + DateTime.Now, "W_TBSB_BatchNo"); // 修改库存状态 // stock.first_tb = stock.first_tb + 1; //groupRepository.Update(TBstock, true); break; } else { //zagvplc.WriteValue(ConveyorLineInfoDBName.MaterNG.ToString(), fromlocation.upper_code, 1); } } } } List HCJnos = new List { "FJSL-FQHCJ001", "FJSL-TBHCJ007","FJSL-TBHCJ008","FJSL-TBHCJ009","FJSL-TBHCJ010","FJSL-TBHCJ011","FJSL-TBHCJ012", "FJSL-TBHCJ001","FJSL-TBHCJ002","FJSL-TBHCJ003","FJSL-TBHCJ004","FJSL-TBHCJ005","FJSL-TBHCJ006", "FJSL-FQHCJ002","FJSL-GYHCJ001","FJSL-GYHCJ002","FJSL-GYHCJ003","FJSL-QXHCJ001","FJSL-QXHCJ002"}; PLCClient plca = null; string toadd = ""; var task = agvRepository.FindFirst(f => (f.agv_toaddress.Contains("JJK") && f.agv_fromaddress.Contains("FJ")) || (f.agv_fromaddress == "nou" && f.agv_toaddress.Contains("HCJ") && f.agv_toaddress.Contains("FJ"))); if (task != null) { WriteLog.Info("F_InOut_Djjk").Write("负极大极卷库有正在执行的任务" + DateTime.Now, "F_InOut_Djjk"); return; } foreach (var hcj in HCJnos) { toadd = "FJXL-JJK001"; plca = WCSService.Clients.Find(v => v.PLCName == "负极1号AGV"); if (plca == null) continue; var iswork = plca.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), toadd).ToString(); if (iswork == "2") continue; //读取有货无货信号 var isemptyorwork = plca.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), hcj).ToString(); GetEquipmentInfo(toadd, hcj + "的货位状态是" + isemptyorwork, "", "", iswork); if (isemptyorwork == "1") continue; var location = locRepository.FindFirst(v => v.upper_code == hcj); var stock = groupRepository.Find(v => v.location_id == location.id).OrderByDescending(v => v.created_time).FirstOrDefault(); var loc = locRepository.FindFirst(f => f.upper_code == "FJSL-JJK001" && f.down_code == "FJXL-JJK001"); if (stock == null) continue; //判断当前状态是否有更新 if (hcj.Contains("TB") && hcj.Contains("FJ")) { if (string.IsNullOrEmpty(stock.TB_Status)) { continue; } } else if (hcj.Contains("FQ") && hcj.Contains("FJ")) { if (string.IsNullOrEmpty(stock.QX_Status)) { continue; } } else if (hcj.Contains("QX") && hcj.Contains("FJ")) { if (string.IsNullOrEmpty(stock.GY_Status)) { continue; } } else if (hcj.Contains("GY") && hcj.Contains("FJ")) { if (string.IsNullOrEmpty(stock.TB_Status)) { continue; } } lock (requestFJJK) { if (loc.location_state == LocationStateEnum.LocationState_Empty.ToString() && location.location_state == LocationStateEnum.LocationState_Stored.ToString() && stock.BarCode != null && stock.MaterialStatus != null) { WebResponseContent responseContents = new WebResponseContent(); responseContents = locRepository.DbContextBeginTransaction(() => { MESback WMSbackresult = MESAPIInvoke.PreTask(2); if (WMSbackresult == null) { return WebResponseContent.Instance.Error("负极大极卷库不通过入库申请"); } dt_agvtask agvtask = new dt_agvtask { agv_materbarcode = stock.BarCode, agv_barcode = "", agv_code = plca.PLCName, agv_createtime = DateTime.Now, agv_fromaddress = hcj, agv_grade = 1, agv_materielid = stock.MaterialType, agv_qty = 1, agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep), agv_taskstate = "Create", agv_tasktype = "TaskType_Outbound", agv_toaddress = toadd, agv_userid = "WCS", agv_worktype = 1 }; agvRepository.Add(agvtask, true); WriteLog.Info("F_InOut_Djjk").Write("F_InOut_Djjk" + agvtask.agv_tasknum + stock.BarCode + DateTime.Now, "F_InOut_Djjk"); location.location_state = LocationStateEnum.LocationState_Lock.ToString(); loc.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(loc, true); locRepository.Update(location, true); return WebResponseContent.Instance.OK(); }); } } } } catch (Exception) { } finally { Interlocked.Exchange(ref _readFTBUPSignalso, 0); } } } } }