海波 张
1 天以前 3a56820d028e98ac3c4bd315aa76181d7d6720cd
wms/LocationHelper.cs
@@ -12,6 +12,7 @@
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web.Services.Description;
using Top.Api;
using WebSocketSharp.Frame;
using static HH.WCS.ZhongCeJinTan.api.ApiModel;
@@ -105,6 +106,19 @@
            return result;
        }
        internal static List<string> GetConnectionListNoYN(string S_AREA_CODE)
        {
            var db = new SqlHelper<object>().GetInstance();
            var ConnectionList = db.Queryable<Location>().Where(s => s.S_AREA_CODE == S_AREA_CODE ).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).ToList();
            List<string> result = new List<string>();
            foreach (var item in ConnectionList)
            {
                result.Add(item.S_CODE);
            }
            return result;
        }
        /// <summary>
        /// 获取货位信息,参数库区编号
        /// </summary>
@@ -115,7 +129,12 @@
            List<string> result = new List<string>();
            foreach (var item in ConnectionList)
            {
                result.Add(item.S_CODE);
                var ConnectionY = db.Queryable<Location>().Where(s => s.S_AREA_CODE == S_AREA_CODE && s.C_ENABLE == "Y" && s.CONNEC_ROADWAY== item.CONNEC_ROADWAY).First();
                if (ConnectionY==null)
                {
                    result.Add(item.S_CODE);
                }
            }
            return result;
        }
@@ -148,6 +167,27 @@
                result.Add(re);
            }
            return result.OrderBy(a => a.taskCount).ToList();
        }
        /// <summary>
        /// 返回出库agv任务
        /// </summary>
        internal static WMSTask GetConnectionTask(string jbLoc,string type)
        {
            var db = new SqlHelper<object>().GetInstance();
          return db.Queryable<WMSTask>().Where(a => ( a.S_START_LOC.Contains(jbLoc)&& a.S_SCHEDULE_TYPE.Contains(type)  && a.S_B_STATE != "完成" && a.S_B_STATE != "取消" && a.S_B_STATE != "失败" && a.S_B_STATE != "已完成" && a.S_B_STATE != "未执行")).OrderBy(b=>b.T_CREATE).First();
        }
        /// <summary>
        /// 返回出库agv任务
        /// </summary>
        internal static WMSTask GetConnectionTask(string jbLoc, string type,DateTime time)
        {
            var db = new SqlHelper<object>().GetInstance();
            return db.Queryable<WMSTask>().Where(a => (a.S_START_LOC.Contains(jbLoc) && a.S_SCHEDULE_TYPE.Contains(type) && a.S_B_STATE != "完成" && a.S_B_STATE != "取消" && a.S_B_STATE != "失败" && a.S_B_STATE != "已完成" && a.S_B_STATE != "未执行"&&a.T_CREATE<time)).OrderBy(b => b.T_CREATE).First();
        }
        /// <summary>
@@ -309,8 +349,13 @@
                //获取string接驳位集合
                var connectionList = LocationHelper.GetConnectionList(CONNECTION);
                var connectionListNoYN = LocationHelper.GetConnectionListNoYN(CONNECTION);
                //不可用接驳位集合
                var flaseConnectionList = LocationHelper.GetConnectionListByst(connectionList);
                var flaseConnectionList = LocationHelper.GetConnectionListByst(connectionListNoYN);
                List<Location> jblist = new List<Location>();
@@ -325,11 +370,16 @@
                    List<Location> difference = flaseConnectionList
    .Where(loc1 => !balanceConnectionList.Any(loc2 => loc2.S_CODE == loc1.S_CODE))
    .ToList();
                    jblist = difference;
                    LogHelper.Info($"ZCSendTask入库任务下发不可用接驳位" + JsonConvert.SerializeObject(jblist), "Mes任务下发");
                }
                else
                {
                    LogHelper.Info($"ZCSendTask入库任务{taskNo}下发失败,接驳位返回失败", "Mes任务下发");
                    throw new Exception($"{taskNo}下发失败,接驳位返回失败");
                }
                    
              
@@ -383,8 +433,13 @@
                    {
                        if (rowList.Count(a => a.N_ROADWAY == item2.CONNEC_ROADWAY) > 0)
                        {
                            flag2 = true;
                            break;
                            var ConnectionY = db.Queryable<Location>().Where(s => s.S_AREA_CODE == CONNECTION && s.C_ENABLE == "Y" && s.CONNEC_ROADWAY == item2.CONNEC_ROADWAY).First();
                            if (ConnectionY == null)
                            {
                                flag2 = true;
                                break;
                            }
                        }
                    }
@@ -442,8 +497,10 @@
                //获取string接驳位集合
                var connectionList = LocationHelper.GetConnectionList(CONNECTION);
                var connectionListNoYN = LocationHelper.GetConnectionListNoYN(CONNECTION);
                //不可用接驳位集合
                var flaseConnectionList = LocationHelper.GetConnectionListByst(connectionList);
                var flaseConnectionList = LocationHelper.GetConnectionListByst(connectionListNoYN);
                List<Location> jblist = new List<Location>();
@@ -460,6 +517,11 @@
                    jblist = difference;
                    LogHelper.Info($"ZCSendTask入库任务下发不可用接驳位" + JsonConvert.SerializeObject(jblist), "Mes任务下发");
                }
                else
                {
                    LogHelper.Info($"ZCSendTask入库任务{taskNo}下发失败,接驳位返回失败", "Mes任务下发");
                    throw new Exception($"{taskNo}下发失败,接驳位返回失败");
                }
@@ -513,8 +575,12 @@
                    {
                        if (rowList.Count(a => a.N_ROADWAY == item2.CONNEC_ROADWAY) > 0)
                        {
                            flag2 = true;
                            break;
                            var ConnectionY = db.Queryable<Location>().Where(s => s.S_AREA_CODE == CONNECTION && s.C_ENABLE == "Y" && s.CONNEC_ROADWAY == item2.CONNEC_ROADWAY).First();
                            if (ConnectionY == null)
                            {
                                flag2 = true;
                                break;
                            }
                        }
                    }
@@ -656,7 +722,7 @@
            foreach (var item in v)
            {
                //取得巷道列表中可用货位最多的巷道  并获取巷道中所有货位
                location_roadray = lstTrueLocation.Where(o => o.N_ROADWAY == item.roadWay).ToList();
                location_roadray = lstTrueLocation.Where(o => o.N_ROADWAY == item.roadWay).OrderBy(b => b.N_ROW).OrderBy(b=>b.N_COL).OrderBy(b => b.N_LAYER).ToList();
                if (location_roadray != null && location_roadray.Count > 0)
                {
@@ -688,7 +754,7 @@
            foreach (var item in v)
            {
                //取得巷道列表中可用货位最多的巷道  并获取巷道中所有货位
                var loclist = lstTrueLocation.Where(o => o.N_ROADWAY == item.roadWay).OrderBy(b => b.N_ROW).OrderBy(b=>b.N_COL).ToList();
                var loclist = lstTrueLocation.Where(o => o.N_ROADWAY == item.roadWay).OrderBy(b => b.N_ROW).OrderBy(b=>b.N_COL).OrderBy(b => b.N_LAYER).ToList();
                foreach (var item1 in loclist)
                {
@@ -723,7 +789,7 @@
            {
                var ConnectionList = 0;
               
                var loclist = lstTrueLocation.Where(o => o.N_ROADWAY == item.N_ROADWAY && o.N_CURRENT_NUM>0).OrderBy(b => b.N_ROW).OrderBy(b => b.N_COL).ToList();
                var loclist = lstTrueLocation.Where(o => o.N_ROADWAY == item.N_ROADWAY && o.N_CURRENT_NUM>0).OrderBy(b => b.N_ROW).OrderBy(b => b.N_COL).OrderBy(b => b.N_LAYER).ToList();
                foreach (var item1 in loclist)
                {
                    var tp = db.Queryable<LocCntrRel>().Where(s => s.S_LOC_CODE == item1.S_CODE).First();
@@ -753,7 +819,7 @@
                foreach (var item in result)
                {
                    var loclist = lstTrueLocation.Where(o => o.N_ROADWAY == item.loc.N_ROADWAY && o.N_CURRENT_NUM==0 ).OrderBy(b => b.N_ROW).OrderBy(b => b.N_COL).ToList();
                    var loclist = lstTrueLocation.Where(o => o.N_ROADWAY == item.loc.N_ROADWAY && o.N_CURRENT_NUM==0 && o.S_LOCK_STATE=="无").OrderBy(b => b.N_ROW).OrderBy(b => b.N_COL).OrderBy(b => b.N_LAYER).ToList();
                    foreach (var item1 in loclist)
                    {
                        location_roadray.Add(item1);
@@ -969,14 +1035,12 @@
        /// </summary>
        /// <param name="locations"></param>
        /// <returns></returns>
        internal static Location FindStartcolByLoclistAndcntr(List<Location> locations,string startArea, string CONNECTION = "") {
        internal static Location FindStartcolByLoclistAndcntr(List<Location> locations,string startArea, string CONNECTION = "",string cntrType="") {
            var db = new SqlHelper<object>().GetInstance();
            try
            {
               var connectionList = LocationHelper.GetConnectionList(CONNECTION);
                var connectionList = LocationHelper.GetConnectionListByN(CONNECTION);
                var balanceConnectionList = LocationHelper.GetConnectionListByst(connectionList);
@@ -985,7 +1049,7 @@
                //查找不可用巷道
                var rowdwa = db.Queryable<RoadWayEnable>().Where(x => x.areaCode == startArea && x.status == "0").ToList();
                LogHelper.Info($"空托自动出库排除不可用货位开始:{locations.Count}", "空托出库");
                for (int i = 0; i < rowsStart.Count; i++)
                {
                    var rowList = locations.Where(r => r.N_ROW == rowsStart[i]).ToList().OrderByDescending(a => a.N_COL);
@@ -1006,7 +1070,7 @@
                    foreach (var item2 in balanceConnectionList)
                    {
                        if (rowList.Count(a => a.N_ROADWAY != item2.CONNEC_ROADWAY) > 0)
                        if (rowList.Count(a => a.N_ROADWAY == item2.CONNEC_ROADWAY) > 0)
                        {
                            flag2 = true;
                            break;
@@ -1016,7 +1080,7 @@
                    if (flag || flag2)
                    {
                        continue;
                        locations.RemoveAll(a => a.N_ROW == rowsStart[i]);
                    }
                    //当前排有锁并且没有满货位,排除
@@ -1025,6 +1089,8 @@
                        locations.RemoveAll(a => a.N_ROW == rowsStart[i]);
                    }
                }
                LogHelper.Info($"空托自动出库排除不可用货位结束:{locations.Count}", "空托出库");
                foreach (var item in locations)
                {
                    if (item.N_CURRENT_NUM == 0)
@@ -1032,12 +1098,14 @@
                        continue;
                    }
                    var tp = db.Queryable<LocCntrRel>().Where(s => s.S_LOC_CODE == item.S_CODE).First();
                    LogHelper.Info($"空托自动出库itemCode:{item.S_CODE},itemLock:{item.S_LOCK_STATE} ,tp信息" + JsonConvert.SerializeObject(tp), "空托出库");
                    if (tp != null && item.S_LOCK_STATE == "无")
                    {
                        var tp1 = db.Queryable<Container>().Where(s => s.S_CODE == tp.S_CNTR_CODE).First();
                        if (tp1 != null && tp1.N_DETAIL_COUNT==0)
                        LogHelper.Info($"空托自动出库,cntrType:{cntrType},tp1信息" +JsonConvert.SerializeObject(tp1), "空托出库");
                        if (tp1 != null && tp1.N_DETAIL_COUNT==0 && tp1.S_TYPE== cntrType)
                        {
                            start = item;
                            break;
@@ -1228,6 +1296,8 @@
            var db = new SqlHelper<object>().GetInstance();
            try
            {
                LogHelper.Info($"ZCSendTask出库任务进入FindStartcolByLoclistAndItem", "Mes任务下发");
                Location start = null;
                var rowsStart = locations.Select(a => a.N_ROW).Distinct().ToList();
@@ -1237,7 +1307,6 @@
                var balanceConnectionList = LocationHelper.GetConnectionListByst(connectionList);
                LogHelper.Info($"ZCSendTask出库任务排除不可用巷道开始", "Mes任务下发");
                //作业流程的巷道
@@ -1761,7 +1830,7 @@
        internal static bool GetErroArea(string area)
        {
            var db = new SqlHelper<object>().GetInstance();
            var erroArea = db.Queryable<Area>().Where(a => a.S_NAME.Contains("异常") && a.S_CODE.Contains(area)).First();
            var erroArea = db.Queryable<Area>().Where(a => a.S_NAME.Contains("异常") && a.S_CODE==area).First();
            if (erroArea == null)
            {
@@ -1783,6 +1852,8 @@
            var res = false;
            var db = new SqlHelper<object>().GetInstance();
            var model = db.Queryable<Location>().Where(a => a.S_CODE == loc).First();
            LogHelper.Info($"锁货位参数:loc:{loc},lockState:{lockState},lockNo:{lockNo}", "上锁");
            LogHelper.Info($"锁货位信息"+JsonConvert.SerializeObject(model), "上锁");
            if (model != null && model.S_LOCK_STATE.Trim() == "无") {
                model.S_LOCK_STATE = lockState;
                model.N_LOCK_STATE = lockNo;
@@ -1797,7 +1868,8 @@
        /// <param name="loc"></param>
        /// <returns></returns>
        public static bool UnLockLoc(string loc) {
            LogHelper.Info("UnLockLoc:" + loc);
            LogHelper.Info($"UnLockLoc解锁货位参数:loc:{loc},lockState:无,lockNo:0", "解锁");
            var res = false;
            var db = new SqlHelper<object>().GetInstance();
            var model = db.Queryable<Location>().Where(a => a.S_CODE == loc).First();
@@ -1805,10 +1877,10 @@
                model.S_LOCK_STATE = "无";
                model.N_LOCK_STATE = 0;
                res = db.Updateable(model).UpdateColumns(it => new { it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand() > 0;
                LogHelper.Info("UnLockLoc:解锁结果" + res);
                LogHelper.Info("UnLockLoc:解锁结果" + res, "解锁");
            }
            else {
                LogHelper.Info("UnLockLoc 失败");
                LogHelper.Info($"UnLockLoc,loc:{loc} 失败", "解锁");
            }
            return res;
        }
@@ -1965,7 +2037,7 @@
        /// <returns></returns>
        public static bool UnBindingLoc(string loc, List<string> cntrs)
        {
            LogHelper.Info($"UnBindingLoc信息:loc:{loc},cntrs:{cntrs}");
            LogHelper.Info($"UnBindingLoc信息:loc:{loc},cntrs:{cntrs}","解锁");
            var res = false;
            var db = new SqlHelper<object>().GetInstance();
            var location = db.Queryable<Location>().Where(a => a.S_CODE == loc).First();
@@ -1975,8 +2047,7 @@
                var lcrList = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == loc).ToList();
                var count = db.Deleteable<LocCntrRel>().Where(it => cntrs.Contains(it.S_CNTR_CODE) && it.S_LOC_CODE == loc).ExecuteCommand();
                LogHelper.Info($"lcrList信息" + JsonConvert.SerializeObject(lcrList));
                LogHelper.Info($"count信息" + JsonConvert.SerializeObject(count));
                location.N_CURRENT_NUM = lcrList.Count - count;
                location.S_LOCK_STATE = "无";
@@ -1984,6 +2055,7 @@
                db.Updateable(location).UpdateColumns(it => new { it.N_CURRENT_NUM, it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
                db.CommitTran();
                LogHelper.Info($"UnBindingLoc解锁锁货位参数:loc:{loc},lockState:无,lockNo:0", "解锁");
                res = true;
            }
            catch (Exception ex)
@@ -2001,6 +2073,7 @@
        /// <returns></returns>
        public static bool BindingLoc(string loc, List<string> cntrs)
        {
            LogHelper.Info($"BindingLoc信息:loc:{loc},cntrs:{cntrs}", "解锁");
            var res = false;
            var db = new SqlHelper<object>().GetInstance();
            var location = db.Queryable<Location>().Where(a => a.S_CODE == loc).First();
@@ -2019,10 +2092,12 @@
                location.N_CURRENT_NUM = lcrList.Count + count;
                location.N_LOCK_STATE = 0;
                location.S_LOCK_STATE = "无";
                db.Updateable(location).UpdateColumns(it => new { it.N_CURRENT_NUM, it.S_LOCK_STATE }).ExecuteCommand();
                db.CommitTran();
                LogHelper.Info($"BindingLoc解锁锁货位参数:loc:{loc},lockState:无,lockNo:0", "解锁");
                res = true;
            }
            catch (Exception ex)