Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }