| | |
| | | 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; |
| | |
| | | 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> |
| | |
| | | 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; |
| | | } |
| | |
| | | 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> |
| | |
| | | //获取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>(); |
| | | |
| | |
| | | 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}下发失败,接驳位返回失败"); |
| | | } |
| | | |
| | | |
| | |
| | | { |
| | | 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; |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | //获取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>(); |
| | | |
| | |
| | | |
| | | jblist = difference; |
| | | LogHelper.Info($"ZCSendTask入库任务下发不可用接驳位" + JsonConvert.SerializeObject(jblist), "Mes任务下发"); |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"ZCSendTask入库任务{taskNo}下发失败,接驳位返回失败", "Mes任务下发"); |
| | | throw new Exception($"{taskNo}下发失败,接驳位返回失败"); |
| | | } |
| | | |
| | | |
| | |
| | | { |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | 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) |
| | | { |
| | |
| | | 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) |
| | | { |
| | |
| | | { |
| | | 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(); |
| | |
| | | |
| | | 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); |
| | |
| | | /// </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); |
| | | |
| | |
| | | |
| | | //查找不可用巷道 |
| | | 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); |
| | |
| | | |
| | | 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; |
| | |
| | | |
| | | if (flag || flag2) |
| | | { |
| | | continue; |
| | | locations.RemoveAll(a => a.N_ROW == rowsStart[i]); |
| | | } |
| | | |
| | | //当前排有锁并且没有满货位,排除 |
| | |
| | | locations.RemoveAll(a => a.N_ROW == rowsStart[i]); |
| | | } |
| | | } |
| | | LogHelper.Info($"空托自动出库排除不可用货位结束:{locations.Count}", "空托出库"); |
| | | |
| | | foreach (var item in locations) |
| | | { |
| | | if (item.N_CURRENT_NUM == 0) |
| | |
| | | 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; |
| | |
| | | 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(); |
| | | |
| | |
| | | |
| | | var balanceConnectionList = LocationHelper.GetConnectionListByst(connectionList); |
| | | |
| | | |
| | | |
| | | LogHelper.Info($"ZCSendTask出库任务排除不可用巷道开始", "Mes任务下发"); |
| | | //作业流程的巷道 |
| | |
| | | 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) |
| | | { |
| | |
| | | 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; |
| | |
| | | /// <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(); |
| | |
| | | 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; |
| | | } |
| | |
| | | /// <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(); |
| | |
| | | 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 = "无"; |
| | |
| | | |
| | | 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) |
| | |
| | | /// <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(); |
| | |
| | | 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) |