111
lss
2 天以前 9ddec4808631025d36d3c5a816d55ef77a29d4c7
HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
@@ -799,16 +799,15 @@
        public static object _Point = new object();
        /// <summary>
        /// 入平库
        /// 点对点接口
        /// </summary>
        /// <param name="model"></param>
        /// <param name="n_type">0:pda下发任务,5:mes下发任务</param>
        /// <returns></returns>
        internal static Result Point(PointModel model)
        {
            Result result = new Result() { code = "200", msg = "入平库任务下发成功" };
            string Source = "Mes";
            if (model == null)
            {
                result.code = "1";
@@ -816,104 +815,85 @@
                AddErrorInfo("参数为空", result.msg, Source);
                return result;
            }
            //1.出平库,2入平库,3平库空工装呼叫,4平库余料回库,5粉料空托返回。
            var db = new SqlHelper<object>().GetInstance();
            Location loc = null;
            string type = "";
            Location startloc = null;
            Location endloc = null;
            switch (model.Status)
            {
                case "1":
                    type = "出平库";
                    break;
                case "2":
                    type = "入平库";
                    break;
                case "3":
                    type = "平库空工装呼叫";
                    break;
                case "4":
                    type = "平库余料回库";
                    break;
                case "5":
                    type = "粉料空托返回";
                    break;
            }
            if (string.IsNullOrEmpty(type))
            {
                result.code = "1";
                result.msg = $"任务类型{model.Status},不在规定范围";
                AddErrorInfo("任务类型错误", result.msg, Source);
                return result;
            }
            string Start = model.InitialLocation;  //起点货位
            string itemcode = model.PartNumber;    //物料编码
            string areacode = "";
            try
            {
                lock (_Putin)
                lock (_Point)
                {
                    #region 入库检查托盘物料表有无数据
                    var cntritem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
                    if (cntritem == null)
                    startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.InitialLocation).First();
                    if (startloc == null)
                    {
                        result.code = "1";
                        result.msg = $"创建任务失败,托盘:{model.Rfid}无绑定物料数据";
                        LogHelper.Info($"ItemBack:{result.msg}");
                        AddErrorInfo("托盘绑定物料数据为空", result.msg, Source);
                        result.msg = $"根据起点{model.InitialLocation},找不到对应货位,请检查货位表";
                        AddErrorInfo("货位查找失败", result.msg, Source);
                        return result;
                    }
                    #endregion
                    #region 判断托盘绑定货位是否和下发绑定起点相同,如果没绑定托盘则绑定托盘
                    var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
                    if (CntrLoc != null)
                    {
                        if (CntrLoc.S_LOC_CODE != Start)
                        {
                            result.code = "1";
                            result.msg = $"创建任务失败,托盘:{model.Rfid}绑定位置不是起点:{Start}";
                            LogHelper.Info($"ItemBack:{result.msg}");
                            AddErrorInfo("托盘绑定位置不同", result.msg, Source);
                            return result;
                        }
                    }
                    else
                    {
                        LocationHelper.BindingLoc(Start, new List<string> { model.Rfid });
                    }
                    #endregion
                    #region 根据起点货位的仓库编码 获取平库编码,并计算入库货位
                    string End = "";
                    var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == Start).First();
                    if (startloc != null)
                    {
                        //根据仓库 计算库区
                        var whcode = Settings.wareLoc.Where(a => a.AreaCode == startloc.S_WH_CODE).FirstOrDefault();
                        if (whcode != null)
                        //判断起点是否绑定其他托盘
                        var CntrRel = LocationHelper.GetLocCntrRel(startloc.S_CODE).OrderBy(a => a.T_CREATE).FirstOrDefault();
                        if (CntrRel != null)
                        {
                            areacode = whcode.PMK;
                            if (CntrRel.S_CNTR_CODE != model.Rfid)
                            {
                                result.code = "1";
                                result.msg = $"根据起点:{model.InitialLocation}获取托盘:{CntrRel.S_CNTR_CODE}与下发托盘:{model.Rfid}不一致,请检查托盘码是否正确";
                                AddErrorInfo("托盘码校检失败", result.msg, Source);
                                return result;
                            }
                        }
                        else
                        {
                            result.code = "1";
                            result.msg = $"根据起点仓库编码:{startloc.S_WH_CODE}未找到对应配置文件";
                            LogHelper.Info($"Putin==> {result.msg}");
                            AddErrorInfo("查找库区失败", result.msg, Source);
                            return result;
                        }
                        loc = StorageCompute(itemcode, areacode);
                        if (loc != null)
                        {
                            End = loc.S_CODE;
                        }
                        else
                        {
                            result.code = "1";
                            result.msg = $"库区:{areacode}无可用货位";
                            LogHelper.Info($"Putin==> {result.msg}");
                            AddErrorInfo("查找库区失败", result.msg, Source);
                            return result;
                            LocationHelper.BindingLoc(startloc.S_CODE, new List<string> { model.Rfid });
                        }
                    }
                    else
                    endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.TargetLocation).First();
                    if (endloc == null)
                    {
                        result.code = "1";
                        result.msg = $"任务起点:{Start}找不到对应货位,请检查货位表";
                        LogHelper.Info($"Putin==> {result.msg}");
                        AddErrorInfo("查找货位失败", result.msg, Source);
                        result.msg = $"根据终点{model.TargetLocation},找不到对应货位,请检查货位表";
                        AddErrorInfo("货位查找失败", result.msg, Source);
                        return result;
                    }
                    #endregion
                    #region 创建任务
                    if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End))
                    if (endloc != null && startloc != null)
                    {
                        if (startloc.N_LOCK_STATE != 0)
                        {
                            result.code = "1";
                            result.msg = $"创建任务失败,起点:{Start}有锁";
                            result.msg = $"创建任务失败,起点:{startloc.S_CODE}有锁";
                            AddErrorInfo("货位有锁", result.msg, Source);
                            return result;
                        }
@@ -921,27 +901,41 @@
                        var wcsTask = new WCSTask
                        {
                            S_CODE = WCSHelper.GenerateTaskNo(),
                            S_TYPE = "入平库",
                            S_TYPE = type,
                            S_EQ_NO = model.TaskNumber,
                            S_START_LOC = Start,
                            S_END_LOC = End,
                            S_START_LOC = startloc.S_CODE,
                            S_END_LOC = endloc.S_CODE,
                            S_START_WH = startloc.S_WH_CODE,
                            S_START_AREA = startloc.S_AREA_CODE,
                            S_END_WH = loc.S_WH_CODE,
                            S_END_AREA = loc.S_AREA_CODE,
                            S_END_WH = endloc.S_WH_CODE,
                            S_END_AREA = endloc.S_AREA_CODE,
                            N_CNTR_COUNT = 1,
                            N_SCHEDULE_TYPE = 1,
                            S_CNTR_CODE = model.Rfid,
                            N_START_LAYER = 1,
                            N_END_LAYER = 1,
                            N_PRIORITY = 1,
                            Z_TYPE = n_type
                            Z_TYPE = 5
                        };
                        LogHelper.Info("创建入平库任务:" + JsonConvert.SerializeObject(wcsTask));
                        LogHelper.Info("创建点对点任务:" + JsonConvert.SerializeObject(wcsTask));
                        if (WCSHelper.CreateTask(wcsTask))
                        {
                            //LocationHelper.LockLoc(Start, 2);
                            //LocationHelper.LockLoc(End, 1);
                            if (type == "平库余料回库")
                            { //创建任务成功 更新余料信息
                                var CntrItem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
                                if (CntrItem != null)
                                {
                                    CntrItem.F_WEIGHT = model.Weight.ToString();
                                    CntrItem.S_BS_TYPE = "余料";
                                    //CntrItem.F_QTY = float.Parse(model.qty);
                                    //CntrItem.S_ITEM_STATE = model..QualityStatus;
                                    db.Updateable(CntrItem).UpdateColumns(a => new { a.F_WEIGHT, a.S_BS_TYPE }).ExecuteCommand();
                                }
                            }
                            LocationHelper.LockLoc(startloc.S_CODE, 2);
                            LocationHelper.LockLoc(endloc.S_CODE, 1);
                            LogHelper.Info("创建任务成功");
                        }
                        else
@@ -2748,14 +2742,14 @@
            var db = new SqlHelper<HangChaAGV>().GetInstance();
            DeviceInfoModel device = new DeviceInfoModel();
            List<DeviceInfos> deviceInfos = new List<DeviceInfos>();//叠盘机报错信息
           // List<DeviceInfos> deviceInfos = new List<DeviceInfos>();//叠盘机报错信息
                                                                    // List<AgvInfos> agvInfos = new List<AgvInfos>();//agv报错信息
            //获取内存中叠盘机的报错信息
            foreach (var dpjInfo in DeviceProcess.DpjInfoDirectory)
            {
                deviceInfos.Add(new DeviceInfos() { Device = dpjInfo.Value.DeviceName, DeviceInfo = dpjInfo.Value.ErrorInfo });
            }
            //foreach (var dpjInfo in DeviceProcess.DpjInfoDirectory)
            //{
            //    deviceInfos.Add(new DeviceInfos() { Device = dpjInfo.Value.DeviceName, DeviceInfo = dpjInfo.Value.ErrorInfo });
            //}
            //  device.DeviceInfos = deviceInfos;
            //获取车辆报警信息
            var agvDeviceInfo = db.Queryable<HangChaAGV>().ToList();
@@ -2764,14 +2758,14 @@
                device.AgvQty = agvDeviceInfo.Count;
                device.AgvErrorQty = agvDeviceInfo.FindAll(a => a.agvErrCode != "0" || int.Parse(a.errCode2) > 1 || int.Parse(a.faildCode) > 1).Count;
                device.AgvChargeQty = agvDeviceInfo.FindAll(a => a.errCode2 == "1").Count;
                device.AgvRunQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "0"&& a.errCode2 == "0" && a.faildCode == "1").Count;
                foreach (var agv in agvDeviceInfo)
                {
                    string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvNo, agv.agvErrCode, agv.errCode2, agv.faildCode);
                    deviceInfos.Add(new DeviceInfos() { AgvNo = agv.agvNo, AgvInfo = agvErrorInfo });
                }
                device.AgvRunQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "0" && a.errCode2 == "0" && a.faildCode == "1").Count;
                //foreach (var agv in agvDeviceInfo)
                //{
                //    string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvNo, agv.agvErrCode, agv.errCode2, agv.faildCode);
                //    deviceInfos.Add(new DeviceInfos() { AgvNo = agv.agvNo, AgvInfo = agvErrorInfo });
                //}
            }
            device.DeviceInfos = deviceInfos;
          //  device.DeviceInfos = deviceInfos;
            return device;
        }