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();
}
}
}
}