using IWareDataAccess.EF; using IWareDataAccess.Entity.Base; using IWareDataAccess.Helper; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IWareDataAccess.Base.PLACE { public static class PlaceSqlFunc { /// /// 搜索表 /// /// /// /// public static List Search(PlaceWebEntity webEntity, int page,int onePageNum, out string msg) { msg = ""; using (Model edm = new Model()) { var f = PredicateBuilder.True(); //便利所有属性 Type type = webEntity.GetType(); foreach (var i in type.GetProperties()) { object v = Helper.Helper.GetFieldValueByName(webEntity, i.Name); if (i.PropertyType == typeof(String)) { string value; if (v != null) { value = v.ToString(); f = f.And(x => Helper.Helper.GetFieldValueByName(x, i.Name) != null ? Helper.Helper.GetFieldValueByName(x, i.Name).ToString().Contains(value) : false); } } else { if (v != null) { f = f.And(x => Object.Equals(Helper.Helper.GetFieldValueByName(x, i.Name), v)); } } } List list = edm.BASE_PLACE.Where(f.Compile()).Skip((page - 1) * onePageNum).Take(onePageNum).ToList(); return list; } } /// /// 搜索视图 /// /// /// /// public static List SearchView(PlaceWebEntity webEntity, int page, int onePageNum, out string msg) { msg = ""; using (Model edm = new Model()) { var f = PredicateBuilder.True(); //便利所有属性 Type type = webEntity.GetType(); foreach (var i in type.GetProperties()) { object v = Helper.Helper.GetFieldValueByName(webEntity, i.Name); if (i.PropertyType == typeof(String)) { string value; if (v != null) { value = v.ToString(); f = f.And(x => Helper.Helper.GetFieldValueByName(x, i.Name) != null ? Helper.Helper.GetFieldValueByName(x, i.Name).ToString().Contains(value) : false); } } else { if (v != null) { f = f.And(x => Object.Equals(Helper.Helper.GetFieldValueByName(x, i.Name), v)); } } } List list = edm.View_BASE_PLACE.OrderByDescending(x => x.id).Where(f.Compile()).Skip((page - 1) * onePageNum).Take(onePageNum).ToList(); return list; } } /// /// 搜索视图数量 /// /// /// /// public static int SearchViewNum(PlaceWebEntity webEntity) { using (Model edm = new Model()) { var f = PredicateBuilder.True(); //便利所有属性 Type type = webEntity.GetType(); foreach (var i in type.GetProperties()) { object v = Helper.Helper.GetFieldValueByName(webEntity, i.Name); if (i.PropertyType == typeof(String)) { string value; if (v != null) { value = v.ToString(); f = f.And(x => Helper.Helper.GetFieldValueByName(x, i.Name) != null ? Helper.Helper.GetFieldValueByName(x, i.Name).ToString().Contains(value) : false); } } else { if (v != null) { f = f.And(x => Object.Equals(Helper.Helper.GetFieldValueByName(x, i.Name), v)); } } } int num = edm.View_BASE_PLACE.Where(f.Compile()).Count(); return num; } } /// /// 添加修改库位 /// /// /// public static bool AddOrUpdate(PlaceWebEntity webPlace,out string msg) { msg = ""; using (Model edm = new Model()) { //查询是否已存在此库位 BASE_PLACE place = edm.BASE_PLACE.FirstOrDefault(x=>x.PLACE==webPlace.place); if (place == null) { //无此库位,属于新建 place = new BASE_PLACE(); } place.PLACE = webPlace.place?? place.PLACE; place.ROW = webPlace.row ??place.ROW ; place.COL = webPlace.col??place.COL; place.LAYER = webPlace.layer??place.LAYER; place.SRMID = webPlace.srmId??place.SRMID; place.ISFULL = webPlace.isFull??place.ISFULL; place.ISLOCK = webPlace.isLock ?? place.ISLOCK; if (!string.IsNullOrEmpty(webPlace.placeType)) { BASE_PLACETYPE placeType = edm.BASE_PLACETYPE.FirstOrDefault(x => x.PLACETYPE == webPlace.placeType); if (placeType != null) { place.PLACETYPEID = placeType.ID; } } edm.BASE_PLACE.AddOrUpdateExtension(place); if (edm.SaveChanges() > 0) { return true; } else { msg = "修改失败"; return false; } } } /// /// 获取库位信息 /// /// /// /// public static List GetPlace(int taskType,int isStartPlace, out string msg) { try { msg = ""; List placelst = new List(); using (Model md = new Model()) { switch (taskType) { case 1://入库 if (isStartPlace==1) { var lst = md.BASE_PRODUCTIONLINE.Where(x => x.ISDESTINATION == 1 && x.PRODUCTIONLINENAME.Contains("入口")).ToList(); if (lst != null && lst.Count>0) { lst.ForEach(x => { placelst.Add(new PlaceEntity() { placeCode=x.PRODUCTIONLINECODE, placeName=x.PRODUCTIONLINENAME }); }); } }else { var srmtask = md.SrmTask.Where(x => x.HASFINISHED == 0).ToList(); var maintask = md.TASK_TASK.Where(x => x.HASFINISHED == 0).ToList(); var emptyplace = md.BASE_PLACE.Where(x => x.ISFULL == 0 && x.ISLOCK == 0).ToList(); if (emptyplace != null && emptyplace.Count>0) { emptyplace.ForEach(x => { bool bs = true; bool bm = true; if (srmtask != null || maintask != null) { int srmid = int.Parse(x.PLACE.Split('-')[0].ToString()); bs = srmtask.FirstOrDefault(y => (x.PLACE.Contains(y.SOURCEPLACE) || x.PLACE.Contains(y.TOPLACE)) && y.USESRMID == srmid) == null ? true : false; bm = maintask.FirstOrDefault(y => y.SOURCEPLACE.Contains(x.PLACE) || y.TOPLACE.Contains(x.PLACE)) == null ? true : false; } if (bs&&bm) { placelst.Add(new PlaceEntity() { placeCode = x.PLACE, placeName = x.PLACE }); } }); } } break; case 2://出库 if (isStartPlace == 1) { // var srmtask = md.SrmTasks.Where(x => x.HASFINISHED == 0).ToList(); var maintask = md.TASK_TASK.Where(x => x.HASFINISHED == 0 && x.TASKSTATUS!="任务删除").ToList(); var place = md.BASE_PLACE.Where(x => x.ISFULL == 1 && x.ISLOCK == 0).ToList(); if (place != null && place.Count > 0) { place.ForEach(x => { bool bs = true; bool bm = true; if (maintask != null) { //int srmid = int.Parse(x.PLACE.Split('-')[0].ToString()); // bs = srmtask.FirstOrDefault(y => (x.PLACE.Contains(y.SOURCEPLACE) || x.PLACE.Contains(y.TOPLACE)) && y.USESRMID == srmid) == null ? true : false; bm = maintask.FirstOrDefault(y => y.SOURCEPLACE.Contains(x.PLACE) || y.TOPLACE.Contains(x.PLACE)) == null ? true : false; } if (bs && bm) { placelst.Add(new PlaceEntity() { placeCode = x.PLACE, placeName = x.PLACE }); } }); } } else { var lst = md.BASE_PRODUCTIONLINE.Where(x => x.ISDESTINATION == 0 && x.PRODUCTIONLINENAME.Contains("出口")).ToList(); if (lst != null && lst.Count > 0) { lst.ForEach(x => { placelst.Add(new PlaceEntity() { placeCode = x.PRODUCTIONLINECODE, placeName = x.PRODUCTIONLINENAME, }); }); } } break; case 3://移库 var srmtasks = md.SrmTask.Where(x => x.HASFINISHED == 0).ToList(); var maintasks = md.TASK_TASK.Where(x => x.HASFINISHED == 0).ToList(); var places = md.BASE_PLACE.Where(x => x.ISFULL == 1 && x.ISLOCK == 0).ToList(); if (places != null && places.Count > 0) { places.ForEach(x => { bool bs = true; bool bm = true; if (srmtasks != null|| maintasks != null) { int srmid = int.Parse(x.PLACE.Split('-')[0].ToString()); bs = srmtasks.FirstOrDefault(y => (x.PLACE.Contains(y.SOURCEPLACE) || x.PLACE.Contains(y.TOPLACE)) && y.USESRMID == srmid) == null ? true : false; bm = maintasks.FirstOrDefault(y => y.SOURCEPLACE.Contains(x.PLACE) || y.TOPLACE.Contains(x.PLACE)) == null ? true : false; } if (bs && bm) { placelst.Add(new PlaceEntity() { placeCode = x.PLACE, placeName = x.PLACE }); } }); } break; } return placelst; } } catch (Exception ex) { msg = "获取失败!"; return new List(); } } public static PlaceStatusCountEntity GetAllStatusPlaceCount(int storageNo, out string msg) { try { msg = ""; using (Model md = new Model()) { var placealllst = md.BASE_PLACE.Where(x => x.PLACE.Contains("-")).ToList(); var pvcviealllst = md.View_BASE_PLACE_VS_CONTAINER.Where(x => x.place.Contains("-")).ToList(); var placelst = md.BASE_PLACE.Where(x => x.SRMID == storageNo).ToList(); var lockplace=placelst.Where(x=>x.ISLOCK==1).Count(); var emptyplace=placelst.Where(x=>x.ISFULL==0&&x.ISLOCK==0).Count(); var cpc = pvcviealllst.Where(x => x.srmId == storageNo && string.IsNullOrEmpty(x.itemName)).ToList().Count(); var ipc = pvcviealllst.Where(x => x.srmId == storageNo && !string.IsNullOrEmpty(x.containerName)).Select(x => x.place).ToList().Distinct().Count(); PlaceStatusCountEntity psclst = new PlaceStatusCountEntity(); psclst.lPlaceCount = lockplace; psclst.cPlaceCount = cpc; psclst.iPlaceCount = ipc; psclst.ePlaceCount = emptyplace; var lockallplace = placealllst.Where(x => x.ISLOCK == 1).Count(); var emptyallplace = placealllst.Where(x => x.ISFULL == 0 && x.ISLOCK == 0).Count(); var callpc = pvcviealllst.Where(x => string.IsNullOrEmpty(x.containerName)).ToList().Count(); var iallpc = pvcviealllst.Where(x => !string.IsNullOrEmpty(x.containerName)).Select(x => x.place).ToList().Distinct().Count(); psclst.lAllPlaceCount = lockallplace; psclst.cAllPlaceCount = callpc; psclst.iAllPlaceCount = iallpc; psclst.eAllPlaceCount = emptyallplace; return psclst; } } catch (Exception ex) { msg = "获取失败!"; return new PlaceStatusCountEntity(); } } public static List GetAllPlaceInfo(int storageNo, int row, out string msg) { try { msg = ""; List placelst = new List(); using (Model md = new Model()) { var pvcvilst = md.View_BASE_PLACE_VS_CONTAINER.Where(x => x.srmId == storageNo).ToList(); var place = md.BASE_PLACE.Where(x => x.SRMID == storageNo && x.ROW == row).ToList(); int maxcol = (int)place.Select(x => x.COL).ToList().Max(); int maxlary = (int)place.Select(x => x.LAYER).ToList().Max(); if (place != null && place.Count > 0) { for (int i = 1; i <= maxlary; i++) { for (int j = 1; j <= maxcol; j++) { int states = 0; var pl=place.FirstOrDefault(x=>x.LAYER==i&&x.COL==j); if (pl != null) { var pvcvi = pvcvilst.FirstOrDefault(y => y.place == pl.PLACE); if (pvcvi != null) { if (pl.ISFULL == 1) { if (string.IsNullOrEmpty(pvcvi.itemName)) { states = 1;//空器具 } else { states = 2;//有货 } } else { states = 0;//空库位 } } else { if (pl.ISLOCK == 1) { states = 3;//锁定 } else { states = 0; } } } else { string colv = (i >= 10) ? i.ToString() : "0" + i.ToString(); string layv = (i >= 10) ? j.ToString() : "0" + j.ToString(); pl = new BASE_PLACE(); pl.PLACE = storageNo + "-0" + row + "-" + colv + "-" + layv; pl.PLACE=""; states=99; pl.COL=j; pl.ROW = row; pl.LAYER=i; } placelst.Add(new PlaceEntity() { placeCode = pl.PLACE, placeName = pl.PLACE, placeStates = states, col = pl.COL, row = pl.ROW, layer = pl.LAYER }); } } } return placelst; } } catch (Exception ex) { msg = "获取失败!"; return new List(); } } public static List GetPVCVIInfo(string placeName, out string msg) { try { msg = ""; List placelst = new List(); using (Model md = new Model()) { placelst = md.View_BASE_PLACE_VS_CONTAINER.Where(x => x.place == placeName).ToList(); if (placelst != null && placelst.Count > 0) { return placelst; }else { return null; } } } catch (Exception ex) { msg = "获取失败!"; return new List(); } } } }