public string FeedZonePTL(string xml) { try { XDocument.Parse(xml); } catch (Exception ex) { return("ERROR:" + ex.Message); } string message = string.Empty; bool result = false; try { FeedRecord model = FeedZonePTLConverter.ConvertRequest(xml); if (model != null) { if ((!string.IsNullOrEmpty(model.PACKLINE)) && (!string.IsNullOrEmpty(model.PRDSEQ))) { //保存记录 try { using (GeelyPtlEntities dbContext = new GeelyPtlEntities()) { var regionAreaId = dbContext.CacheRegions.Select(x => x.AreaId).Distinct(); if (regionAreaId.Contains(model.PACKLINE)) { CacheRegionLightOrder cacheRegionOrder = new CacheRegionLightOrder() { AreaId = model.PACKLINE, MaterialId = model.PRDSEQ }; dbContext.CacheRegionLightOrders.Add(cacheRegionOrder); dbContext.SaveChanges(); result = true; message = "数据保存成功!"; } else { dbContext.FeedRecords.Add(model); dbContext.SaveChanges(); result = true; message = "数据保存成功!"; } } } catch { message = "数据保存失败!"; } } else { message = "分装线码或样车码为空!"; } } } catch (Exception ex) { message = ex.Message; } return(FeedZonePTLConverter.ConvertResponse(xml, result, message)); }
public static CacheRegionLightOrder ConvertRequest(string xml) { XDocument xDocument = XDocument.Parse(xml); XElement serviceElement = xDocument.Descendants("Service").First(); XElement dataElement = serviceElement.Descendants("Data").First(); XElement requestElement = dataElement.Descendants("Request").First(); XElement indicationElement = requestElement.Descendants("ASSEMBLE").First(); CacheRegionLightOrder model = new CacheRegionLightOrder(); model.AreaId = indicationElement.Element("PACKLINE").Value; model.MaterialId = indicationElement.Element("PRDSEQ").Value; return(model); }
private void DoStatus(object obj) { Thread.Sleep(2000);//这里休眠5秒是为了让程序先执行一次Dowork方法 string areaId = (string)obj; while (true) { if (dictBool[areaId] == false)//该区域的灯没有被拍下,执行操作 { //查找该区域下是否有亮灯,有则不执行,表示有任务 var device = devices.Where(x => x.AreaId == areaId && x.Status == 1).FirstOrDefault(); if (device != null) { //获取第一个指令,在缓存区匹配物料,判断指令是否无效,无效则删除 GeelyPtlEntities context = new GeelyPtlEntities(); try { CacheRegionLightOrder lightorder = context.CacheRegionLightOrders.Where(x => x.AreaId == areaId).FirstOrDefault(); if (lightorder != null) { var item = context.CacheRegions.Where(x => x.Id == device.Id).FirstOrDefault();//context.Query<CacheRegion>().Where(x => x.AreaId == areaId && (x.Material_A == lightorder.MaterialId || x.Material_B == lightorder.MaterialId || x.Material_C == lightorder.MaterialId)).FirstOrDefault(); if (item != null) { if (item.Material_A == lightorder.MaterialId || item.Material_B == lightorder.MaterialId || item.Material_C == lightorder.MaterialId) { //指令无效,删除 context.CacheRegionLightOrders.Remove(lightorder); } } } } catch { } finally { context.Dispose(); } Thread.Sleep(1000); continue; } //获取第一个指令,在装配区,判断指令是否无效,无效则删除 //读取指令表中的当前区域的第一个指令 CacheRegionLightOrder order = null; try { using (GeelyPtlEntities context = new GeelyPtlEntities()) { order = context.CacheRegionLightOrders.Where(x => x.AreaId == areaId).FirstOrDefault(); } } catch { } if (order != null) { GeelyPtlEntities context = new GeelyPtlEntities(); var dbContextTransaction = context.Database.BeginTransaction(); try { //判断该指令在装配区是否有匹配项,有为无效指令删除,没有则继续 var assembling = context.Assemblings.Where(x => x.AreaId == areaId && x.MaterialId == order.MaterialId).Count(); if (assembling > 0) { context.CacheRegionLightOrders.Remove(order); } else { //执行亮灯操作 //根据区域和物料找到匹配的第一个交互灯 var target = context.CacheRegions .Where(x => x.AreaId == areaId && (x.Material_A == order.MaterialId || x.Material_B == order.MaterialId || x.Material_C == order.MaterialId) && x.IsInteractive == true) .FirstOrDefault(); if (target != null)//如果找不到,则认定相关物料未绑定,不执行任何操作 { target.Status = 1;//点灯 //找到柱灯,亮灯,代码吴恺补充 var m3 = context.CacheRegions .Where(x => x.AreaId == areaId && (x.Material_A == order.MaterialId || x.Material_B == order.MaterialId || x.Material_C == order.MaterialId) && x.IsInteractive == false) .FirstOrDefault(); if (m3 != null) { m3.Status = 1; } context.SaveChanges(); //查找装配区物料不为null的个数,大于0则表示正在装配,需要锁定灯 var number = context.Assemblings.Where(x => x.AreaId == areaId && x.MaterialId != null).Count(); if (number > 0) { target.IsLocked = true;//锁灯 var targetDevice = this.devices.FirstOrDefault(x => x.Id == target.Id); if (targetDevice != null) { targetDevice.CallButton.Lock(); //这里锁一次 //targetDevice.IsLocked = true; } } // context.Update<CacheRegion>(target); context.SaveChanges(); } //删除当前指令 context.CacheRegionLightOrders.Remove(order); dbContextTransaction.Commit(); } } catch { dbContextTransaction.Rollback(); } finally { context.Dispose(); } } } //休眠 Thread.Sleep(1000); } }