111
lss
6 天以前 79db8fda0f71b65dfe1e1c72f307b29efc565126
HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
@@ -6,6 +6,7 @@
using HH.WCS.JiaTong.wms;
using Newtonsoft.Json;
using NLog.Fluent;
using NModbus;
using S7.Net;
using SqlSugar;
using System;
@@ -37,9 +38,9 @@
        #region 佳通合肥接口业务
        public static object _lockCreateTask = new object();
        public static object _lockCreateItem = new object();
        public static object _lockCreateTask = new object();
        /// <summary>
        /// 立库任务下发=》创建任务
        /// </summary>
@@ -228,7 +229,7 @@
                    }
                    else if (taskData.taskType == 3)//移库流程,直接使用起点货位和终点货位生成任务,
                    {
                        note = "出库";
                        note = "入库";
                        //创建托盘物料绑定信息,并计算终点货位
                        startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == taskData.pickStation).First();
                        if (startloc != null)
@@ -847,7 +848,7 @@
                    type = "平库空工装呼叫";
                    break;
                case "4":
                    type = "平库余料回库";
                    type = "余料返回";
                    break;
                case "5":
                    type = "粉料空托返回";
@@ -873,25 +874,7 @@
                        AddErrorInfo("货位查找失败", result.msg, Source);
                        return result;
                    }
                    else
                    {
                        //判断起点是否绑定其他托盘
                        var CntrRel = LocationHelper.GetLocCntrRel(startloc.S_CODE).OrderBy(a => a.T_CREATE).FirstOrDefault();
                        if (CntrRel != null)
                        {
                            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
                        {
                            LocationHelper.BindingLoc(startloc.S_CODE, new List<string> { model.Rfid });
                        }
                    }
                    endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.TargetLocation).First();
                    if (endloc == null)
                    {
@@ -900,7 +883,6 @@
                        AddErrorInfo("货位查找失败", result.msg, Source);
                        return result;
                    }
                    #region 创建任务
                    if (endloc != null && startloc != null)
@@ -949,8 +931,7 @@
                                }
                            }
                            LocationHelper.LockLoc(startloc.S_CODE, 2);
                            LocationHelper.LockLoc(endloc.S_CODE, 1);
                            LogHelper.Info("创建任务成功");
                        }
                        else
@@ -2245,18 +2226,8 @@
                if (startloc != null)
                {
                    Start = model.InitialLocation;
                    var CntrRel = LocationHelper.GetLocCntrRel(startloc.S_CODE).FirstOrDefault();
                    if (CntrRel != null)
                    {
                        CntrCode = CntrRel.S_CNTR_CODE;
                    }
                    else
                    {
                        result.code = "1";
                        result.msg = $"创建任务失败,根据起点{model.InitialLocation}未找到对应货位绑定托盘托盘";
                        AddErrorInfo("查找托盘失败", result.msg, Source);
                        return result;
                    }
                }
                endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.TargetLocation).First();
                if (endloc != null)
@@ -2757,8 +2728,8 @@
            var db = new SqlHelper<HangChaAGV>().GetInstance();
            DeviceInfoModel device = new DeviceInfoModel();
           // List<DeviceInfos> deviceInfos = new List<DeviceInfos>();//叠盘机报错信息
                                                                    // List<AgvInfos> agvInfos = new List<AgvInfos>();//agv报错信息
            // List<DeviceInfos> deviceInfos = new List<DeviceInfos>();//叠盘机报错信息
            // List<AgvInfos> agvInfos = new List<AgvInfos>();//agv报错信息
            //获取内存中叠盘机的报错信息
            //foreach (var dpjInfo in DeviceProcess.DpjInfoDirectory)
@@ -2767,20 +2738,52 @@
            //}
            //  device.DeviceInfos = deviceInfos;
            //获取车辆报警信息
            var agvDeviceInfo = db.Queryable<HangChaAGV>().ToList();
            if (agvDeviceInfo.Count > 0)
            var agvDeviceInfos = db.Queryable<HangChaAGV>().ToList();
            if (agvDeviceInfos.Count > 0)
            {
                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;
                int chargeQty = 0;
                int runQty = 0;
                int Errorqty = 0;
                foreach (var item in agvDeviceInfos)
                {
                    string[] battery = item.agvBattery.Split(',').ToArray();
                    LogHelper.Info($"车辆信息上报 车号:{item.agvNo},battery:{JsonConvert.SerializeObject(battery)},错误码:{item.agvErrCode}、{item.errCode2}、{item.faildCode}");
                    if (battery.Count() > 3)
                    {
                        if (battery[1] == "1")
                        { runQty++; }
                        if (battery[2] == "1")
                        { chargeQty++; }
                        if (!string.IsNullOrEmpty(item.agvErrCode) && int.Parse(item.agvErrCode) > 1)
                        {
                            Errorqty++;
                            break;
                        }
                        if (!string.IsNullOrEmpty(item.errCode2) && int.Parse(item.errCode2) > 1)
                        {
                            Errorqty++;
                            break;
                        }
                        if (!string.IsNullOrEmpty(item.faildCode) && int.Parse(item.faildCode) > 1)
                        {
                            Errorqty++;
                            break;
                        }
                    }
                }
                device.AgvQty = agvDeviceInfos.Count;
                device.AgvErrorQty = Errorqty;
                device.AgvChargeQty = chargeQty;
                device.AgvRunQty = runQty;
                //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;
        }
@@ -3321,16 +3324,16 @@
        /// </summary>
        /// <param name="forkliftNo"></param>
        /// <param name="battery"></param>
        /// <param name="agvCurrTaskInfo"></param>
        /// <param name="errCode"></param>
        /// <param name="errCode2"></param>
        /// <param name="faildCode"></param>
        internal static void AGVDeviceReceiveSet(string forkliftNo, string battery, string errCode, string errCode2, string faildCode)
        {
            lock (AGVDeviceReceiveLock)
            try
            {
                var db = new SqlHelper<HangChaAGV>().GetInstance();
                var agvDeviceInfo = db.Queryable<HangChaAGV>().Where(a => a.agvNo.Trim() == forkliftNo).First();
                var agvDeviceInfo = db.Queryable<HangChaAGV>().Where(a => a.agvNo.Trim() == forkliftNo.Trim()).First();
                if (agvDeviceInfo == null)
                {
                    var agvInfo = new HangChaAGV()
@@ -3346,11 +3349,7 @@
                }
                else
                {
                    //判断中间表信息有无变化,无变化不更新中间表
                    if (agvDeviceInfo.agvErrCode == errCode && agvDeviceInfo.errCode2 == errCode2 && agvDeviceInfo.faildCode == faildCode)
                    {
                        return;
                    }
                    agvDeviceInfo.agvBattery = battery;
                    //  agvDeviceInfo.agvCurrTaskInfo = agvCurrTaskInfo;
                    agvDeviceInfo.agvErrCode = errCode;
@@ -3361,9 +3360,16 @@
                    //if (int.Parse(agvDeviceInfo.agvBattery) >= 1000) 
                    //    agvDeviceInfo.agvRunStatus = "";
                    db.Updateable(agvDeviceInfo).UpdateColumns(a => new
                    { a.agvBattery, a.agvCurrTaskInfo, a.agvErrCode, a.errCode2, a.faildCode, a.agvRunStatus }).ExecuteCommand();
                    { a.agvBattery, a.agvErrCode, a.errCode2, a.faildCode }).ExecuteCommand();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Info($"AGVDeviceReceiveSet:Error:{ex}");
            }
        }
        #region 数据模型