// 感觉写的还可以的代码



using AGV.Common.Base;
using AGV.Common.Diagnostics;
using AGV.Common.Enums;
using AGV.Common.Service;
using AGV.DTO;
using AGV.Entity;
using AGV.Global;
using AGV.Interface;
using AGV.Service;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace AGV.Service
{      
 /// <summary>
///       抓取mes端数据 Bill
/// </summary>
    public class MESService : ServiceBase, IMESService
    {
        private IAgvTaskService _agvTaskService;

        private IAppCallCarService _appCallCarService;

        public ProductLineInfoDTO GetProductLineByName(string name)
        {
            if (!string.IsNullOrEmpty(name))
            {
                List<ProductLineInfoDTO> list = Db.From<Product_Line_Info>()
                                                  .Where(Product_Line_Info._.Name.ToUpper() == name.ToUpper()
                                                         && Product_Line_Info._.Valid == "Y")
                                                  .Select(Product_Line_Info._.All)
                                                  .ToList<ProductLineInfoDTO>();
                if (list != null && list.Count > 0)
                {
                    return list.FirstOrDefault();
                }
            }
            return null;
        }
        public IAgvTaskService AgvTaskService
        {
            get { return _agvTaskService; }
            set { _agvTaskService = value; }
        }

        public IAppCallCarService AppCallCarService
        {
            get { return _appCallCarService; }
            set { _appCallCarService = value; }
        }
        AgvTaskDTO task = new AgvTaskDTO();

        //组织代码--
        private const string ORG_CODE = "C100";

        private DateTime beginRecord = DateTime.Now;
        private  TimeSpan ts;
        private double minutes;
        private string beginTime;
        TrafficCenter trafficCenter = TrafficCenter.Instance;
        MesWebService.MesWebServiceSoapClient mesService = new MesWebService.MesWebServiceSoapClient();

        List<AgvTaskDTO> tasks = new List<AgvTaskDTO>();
        //  _agvTaskService=new AgvTaskService();
        /// <summary>
        /// 每隔 多少秒 抓取一下MES端提供的任务数据
        /// </summary>
        /// <param name="secondsInterval">多少秒</param>
        public bool FetchProductLinesTask(int secondsInterval)
        {
            /* 15-17 minute check the tasks that 30 minutes earlier than now   
             * */
            ts = DateTime.Now- beginRecord;

            if (15<ts.TotalMinutes)        //  这样应该减少了查数据库的次数
            {
                tasks = trafficCenter.AgvTaskService.GetAgvTaskListByMES();
                beginTime = DateTime.Now.AddMinutes(-50).ToString(); 
                beginRecord = DateTime.Now;
            }
            else
            {
                beginTime = DateTime.Now.ToString();
            }
            // string beginTime = "2018/8/14 16:40:11";

            string nextTime = DateTime.Now.AddSeconds(secondsInterval).ToString();

             return true;
            // MesWebService.INF_AGV_GET_PALLETRequestBody body = new MesWebService.INF_AGV_GET_PALLETRequestBody(beginTime, nextTime, ORG_CODE);
            // MesWebService.INF_AGV_GET_PALLETRequest request = new MesWebService.INF_AGV_GET_PALLETRequest(body);


            string obj = mesService.INF_AGV_GET_PALLET(beginTime, nextTime, ORG_CODE);



            JObject jobj = (JObject)JsonConvert.DeserializeObject(obj);
            int taskNum = jobj["data"].Count();
            int successNum = 0;
            #region
            //  JArray j = JArray.Parse(obj);

            //foreach(JObject obj in j)
            // {
            //  Console.WriteLine(obj["id"]);
            // object t=jobj[]
            #endregion
            for (int i = 0; i < taskNum; i++)
            {
                string palletBarCode = (string)jobj["data"][i]["PALLET_BARCODE"];     //栈板号
                string productLineName = (string)jobj["data"][i]["WORKCENTER_CODE"];
                if(tasks.Any(item=>item.Pallet_Barcode== palletBarCode))
                {
                    successNum++;
                    continue;
                }
                string toStation = (string)jobj["data"][i]["AGV_TARGET_PLACE_CODE"];
                string moCode = (string)jobj["data"][i]["MO_CODE"];    //工单 

                task.Receive_Date = Convert.ToDateTime(jobj["data"][i]["DATETIME_CREATED"]);  //接收时间

                task.From_Station = GetProductLineByName(productLineName)?.Station_RFID;
               // task.From_Station = ServiceHelper.CallService<IAppCallCarService,ProductLineInfoDTO>(item=>item.GetProductLineByName(productLineName)).Station_RFID;

                task.Call_From = CallCarRequestFromEnum.MES;
                task.Valid = "Y";
                task.Status = TaskStatusEnum.NewTask;
                task.Task_Type = TaskTypeEnum.Warehousing;
                task.Car_Type = CarTypeEnum.Hybrid.ToString();
                task.To_Station = toStation;
                task.Pallet_Barcode = palletBarCode;
                task.Mo_Code = moCode;
                task.WorkCenter_Code = productLineName;


                Thread.Sleep(500);
                if (trafficCenter.AgvTaskService.AddAgvTask(task))
                {
                    successNum++;
                }
                else
                {
                    Logger.Log.Error(string.Format("从MES提取任务更新到数据库失败,时间={0}", DateTime.Now));
                }
            }
            if (successNum == taskNum)
            {
                return true;
            }
            return false;
        }
    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值