123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431 |
- using SqlSugar;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using wms.sqlsugar.model.sx;
- using Wms.Screen.DataService.Interface;
- using Wms.Screen.Dto.ZhongTian;
- using Wms.Screen.Dto.ZhongTian.Request;
- using Wms.Screen.Dto.ZhongTian.Response;
- using Wms.Screen.SqlSugar.ZhongTian;
- using Wms.Screen.SqlSugar.ZhongTian.SX;
- using BillInvnow = wms.sqlsugar.model.sx.BillInvnow;
- using WCS_TaskOld = wms.sqlsugar.model.sx.WCS_TaskOld;
- namespace Wms.Screen.DataService.Impl
- {
- public class ZhongTianSxDataService : IZhongTianSxDataService
- {
- public static string[] Grades = new string[] { "C", "D" };
- private SqlSugarClient _db;
- public ZhongTianSxDataService(SqlSugarClient db)
- {
- _db = db;
- }
- public List<ReverseErrorInfo> GetReverseErrorInfo()
- {
- throw new NotImplementedException();
- }
- public List<WCS_TaskOld> GetSxEquips(GetEquipsRequest reqEntity)
- {
- var list = _db.Queryable<WCS_TaskOld>().With(SqlWith.NoLock).Where(p => p.Status != (int)TaskStatus.Finish && p.Status != (int)TaskStatus.Cancel && !string.IsNullOrEmpty(p.Device))
- .SplitTable(tabs => tabs.Take(2))?.ToList();
- return list ?? new List<WCS_TaskOld>();
- }
- public List<LocationUsageReportViewDto> GetSxLocationUsageReportList()
- {
- int _sort = 1;
- var list = _db.Queryable<BaseWarecell, BaseWarehouse>((warecell, warehouse) => new object[] {
- JoinType.Left,warecell.WarehouseId == warehouse.Id })
- .GroupBy((warecell, warehouse) => new
- {
- warecell.StateNum,
- warecell.IsStop,
- warecell.Tunnel,
- warecell.Floor,
- warehouse.Id,
- warehouse.Name
- }).Select((warecell, warehouse) => new
- {
- Status = warecell.StateNum,
- warecell.Tunnel,
- warecell.IsStop,
- HouseId = warehouse.Id,
- Floor = warecell.Floor,
- warehouse.Name,
- Total = SqlFunc.AggregateCount(warecell.Tunnel),
- })
- .MergeTable().ToList().OrderBy(o => o.Tunnel);
- //基表:巷道、货架标识和仓库名称为维度查找总货位
- var baseTemp = list.GroupBy(s => new { s.Tunnel, s.HouseId, s.Name, s.Floor }).Select(m => new { m.Key.Name, m.Key.Tunnel, m.Key.Floor, Total = m.Sum(n => n.Total) }).ToList();
- //关联表:巷道和仓库名称为维度,查找可用货位:未停用.已锁定也算有效货位
- var useLocation = list.Where(s => s.IsStop == 0).GroupBy(s => new { s.Tunnel, s.HouseId, s.Name, s.Floor }).Select(m => new { m.Key.Name, m.Key.Tunnel, m.Key.Floor, Total = m.Sum(n => n.Total) }).ToList();
- //关联表:巷道和仓库名称为维度,查找锁定货位
- var lockLocation = list.Where(s => s.Status == (int)SXLocationState.LocationState_StockIn || s.Status == (int)SXLocationState.LocationState_StockOut || s.Status == (int)SXLocationState.LocationState_StockMove).GroupBy(s => new { s.Tunnel, s.HouseId, s.Name, s.Floor }).Select(m => new { m.Key.Name, m.Key.Tunnel, m.Key.Floor, Total = m.Sum(n => n.Total) }).ToList();
- //关联表:巷道和仓库名称为维度,查找停用货位
- var stopLocation = list.Where(s => s.IsStop == 1).GroupBy(s => new { s.Tunnel, s.HouseId, s.Name, s.Floor }).Select(m => new { m.Key.Name, m.Key.Tunnel, m.Key.Floor, Total = m.Sum(n => n.Total) }).ToList();
- //关联表:巷道和仓库名称为维度,查找物料货位
- var materialLocation = list.Where(s => s.Status == (int)SXLocationState.LocationState_Full).GroupBy(s => new { s.Tunnel, s.HouseId, s.Name, s.Floor }).Select(m => new { m.Key.Name, m.Key.Tunnel, m.Key.Floor, Total = m.Sum(n => n.Total) }).ToList();
- var locationUsageReportViewDtos = from basetemp in baseTemp
- join uselocation in useLocation on new { basetemp.Tunnel, basetemp.Name, basetemp.Floor } equals new { uselocation.Tunnel, uselocation.Name, uselocation.Floor } into useinfo
- join locklocation in lockLocation on new { basetemp.Tunnel, basetemp.Name, basetemp.Floor } equals new { locklocation.Tunnel, locklocation.Name, locklocation.Floor } into lockinfo
- from lockinfoif in lockinfo.DefaultIfEmpty()
- join stoplocation in stopLocation on new { basetemp.Tunnel, basetemp.Name, basetemp.Floor } equals new { stoplocation.Tunnel, stoplocation.Name, stoplocation.Floor } into stopinfo
- from stopinfoif in stopinfo.DefaultIfEmpty()
- join materiallocation in materialLocation on new { basetemp.Tunnel, basetemp.Name, basetemp.Floor } equals new { materiallocation.Tunnel, materiallocation.Name, materiallocation.Floor } into materialinfo
- from materialinfoif in materialinfo.DefaultIfEmpty()
- orderby basetemp.Name
- select new LocationUsageReportViewDto()
- {
- Sort = _sort++,
- Tunnel = basetemp.Tunnel.ToString(),
- Floor = basetemp.Floor.ToString(),
- WarehouseName = basetemp.Name,
- AllLocationTotal = basetemp.Total,
- CanUseLocation = useinfo.FirstOrDefault() == null ? 0 : useinfo.First().Total,
- LockLocation = lockinfoif == null ? 0 : lockinfoif.Total,
- StopLocation = stopinfoif == null ? 0 : stopinfoif.Total,
- MaterilLocation = materialinfoif == null ? 0 : materialinfoif.Total
- };
- return locationUsageReportViewDtos.OrderBy(p => p.WarehouseName).ToList();
- }
- public List<ProductPackRule> GetSxProductPackRule(GetWorkPlanBillListRequest reqEntity)
- {
- var list = _db.Queryable<BillInvnow>().Where(p => p.TorsChkChordIsGood == "NG" || p.TorsChkFlatnessIsGood == "NG" || p.TorsChkValueIsGood == "NG")
- .Select((p) => new ProductPackRule()
- {
- BoxNo = p.CLBarCode,
- HWSpec = p.HWTypeCode,
- //EnchaseState = p.ZXStateCode,
- //PackRule = p.PackRule,
- //FullCount = product.FullCountQty,
- //EmptyCount = product.EmptyCountQty,
- //IsSolder = product.IsSolder.ToString(),
- }).ToList();
- return list;
- }
- public List<SXTaskInfoDto> GetSxRunWcsTaskInfo(GetWcsTaskInfoRequest request)
- {
- var listin = _db.Queryable<WCS_TaskInfo, BillInvinit, PalletLayerMath>((wcstask, stock, math) => new object[] {
- JoinType.Left, wcstask.BarCode == stock.ContGrpBarCode,
- JoinType.Left, wcstask.BarCode == stock.ContGrpBarCode,
- JoinType.Left, wcstask.BarCode == math.ContBarCode,
- }).With(SqlWith.NoLock)
- .Where((wcstask, stock, math) => wcstask.Status < TaskStatus.Finish && wcstask.Status >= TaskStatus.帘线扫码 && wcstask.Type == TaskType.EnterDepot)
- .OrderBy((wcstask, stock, math) => wcstask.AddTime, OrderByType.Desc)
- .Select((wcstask, stock, math) => new SXTaskInfoDto
- {
- TaskCode = wcstask.ID.ToString(),
- TaskType = wcstask.Type == TaskType.EnterDepot ? "入库" : wcstask.Type == TaskType.OutDepot ? "出库" : wcstask.Type == TaskType.TransferDepot ? "移库" : "移动",
- TaskStateEnum = wcstask.Status,
- HWBarCode = wcstask.BarCode,
- HWSpec = stock.HWTypeCode,
- SKU = math.SkuCode,
- Layer = math.Layer,
- BeginPosition = wcstask.AddrFrom,
- EndPosition = wcstask.AddrTo,
- DocCode = stock.InDocsNo,
- CreatedTime = wcstask.AddTime,
- AddTime = wcstask.AddTime.ToString(),
- BoxBarCode = "",
- BusType = wcstask.BusType,
- Floor = wcstask.Floor,
- Grade = stock.Grade,
- MatCode = wcstask.MaterialCode,
- MaterialCode = wcstask.MaterialCode,
- Tunnel = wcstask.Tunnel,
- NextPosition = wcstask.AddrNext,
- }).Distinct().ToList();
- var listout = _db.Queryable<WCS_TaskInfo, BillInvinit, PalletLayerMath>((wcstask, stock, math) => new object[] {
- JoinType.Left, wcstask.BarCode == stock.ContGrpBarCode,
- JoinType.Left, wcstask.BarCode == stock.ContGrpBarCode,
- JoinType.Left, wcstask.BarCode == math.ContBarCode,
- }).With(SqlWith.NoLock)
- .Where((wcstask, stock, math) => wcstask.Status < TaskStatus.Finish && wcstask.Type == TaskType.OutDepot)
- .OrderBy((wcstask, stock, math) => wcstask.AddTime, OrderByType.Desc)
- .Select((wcstask, stock, math) => new SXTaskInfoDto
- {
- TaskCode = wcstask.ID.ToString(),
- TaskType = wcstask.Type == TaskType.EnterDepot ? "入库" : wcstask.Type == TaskType.OutDepot ? "出库" : wcstask.Type == TaskType.TransferDepot ? "移库" : "移动",
- TaskStateEnum = wcstask.Status,
- HWBarCode = wcstask.BarCode,
- HWSpec = stock.HWTypeCode,
- SKU = math.SkuCode,
- Layer = math.Layer,
- BeginPosition = wcstask.AddrFrom,
- EndPosition = wcstask.AddrTo,
- DocCode = stock.InDocsNo,
- CreatedTime = wcstask.AddTime,
- AddTime = wcstask.AddTime.ToString(),
- BoxBarCode = "",
- BusType = wcstask.BusType,
- Floor = wcstask.Floor,
- Grade = stock.Grade,
- MatCode = wcstask.MaterialCode,
- MaterialCode = wcstask.MaterialCode,
- Tunnel = wcstask.Tunnel,
- NextPosition = wcstask.AddrNext
- }).Distinct().ToList();
- var list = listin.Union(listout).ToList();
- foreach (var item in list)
- {
- item.TaskState = Enum.GetName(typeof(TaskStatus), item.TaskStateEnum);
- }
- return list.ToList();
- }
- public List<SXStockDto> GetExceptionStockInfo()
- {
- var lists = _db.Queryable<BillInvnow, BaseWarecell, BaseWarehouse>((billInvnow, warecell, warehouse) => new object[] {
- JoinType.Left,billInvnow.ContGrpId == warecell.ContGrpId && billInvnow.WarehouseId ==warecell.WarehouseId , JoinType.Left, billInvnow.WarehouseId==warehouse.Id})
- .Where((billInvnow, warecell, warehouse) => billInvnow.TorsChkChordIsGood.Equals("NG") || billInvnow.TorsChkFlatnessIsGood.Equals("NG") || billInvnow.TorsChkValueIsGood.Equals("NG"))
- .Where((billInvnow, warecell, warehouse) => Grades.Contains(billInvnow.Grade))
- .Select((billInvnow, warecell, warehouse) => new SXStockDto
- {
- ContGrpBarCode = billInvnow.ContGrpBarCode,
- Code = warecell.Code,
- Tunnel = warecell.Tunnel,
- BoxBarCode = billInvnow.BoxBarCode,
- ContGrpType = billInvnow.ContGrpType,
- SkuCode = billInvnow.SkuCode,
- InvStateCode = billInvnow.InvStateCode,
- MatCode = billInvnow.MatCode,
- Grade = billInvnow.Grade,
- HWTypeCode = billInvnow.HWTypeCode,
- }).Take(200).ToList();
- return lists;
- }
- public List<WCSTaskInfo> GetPalletizingTasks()
- {
- var predicate = Expressionable.Create<WCSTaskInfo>();
- predicate = predicate.And(m => m.Status < 30);
- predicate = predicate.And(m => SqlFunc.Subqueryable<Palletizing>().Where(s => s.Id == m.PalletizingId && s.PalletizState != 1).Any());
- var list = _db.Queryable<WCSTaskInfo>().With(SqlWith.NoLock).Where(predicate.ToExpression()).ToList();
- return list;
- }
- /// <summary>
- /// 获取扭转统计信息
- /// </summary>
- /// <returns></returns>
- public TorStaticsInfo GetTorStaticsInfo()
- {
- var result = new TorStaticsInfo();
- //获取库中扭转不合格盘
- result.TorNoGood = _db.Queryable<BillInvnow, BaseWarecell>((billInvnow, warecell) => new object[] {
- JoinType.Inner,billInvnow.ContGrpId == warecell.ContGrpId }).With(SqlWith.NoLock)
- .Where((billInvnow, warecell) => billInvnow.TorsChkChordIsGood.Equals("NG") || billInvnow.TorsChkFlatnessIsGood.Equals("NG") || billInvnow.TorsChkValueIsGood.Equals("NG"))
- .Where((billInvnow, warecell) => billInvnow.InvStateCode == "InvEcecState_In" && !billInvnow.AddWho.Contains("测试"))
- .Count();
- var TorschkDate = _db.Queryable<SysConfig>().Where(p => p.Code == "TorsChkDateCount").First();
- var time1 = decimal.Parse(TorschkDate.SContent);
- var time2 = decimal.Parse(TorschkDate.Default1);
- var startTime = DateTime.Now.Date.AddDays(-1).AddMilliseconds(-1);
- //库中满足时效待检测盘
- result.TorTobe = _db.Queryable<BillInvnow, BaseWarecell>((billInvnow, warecell) => new object[] {
- JoinType.Inner,billInvnow.ContGrpId == warecell.ContGrpId }).With(SqlWith.NoLock)
- .Where((billInvnow, warecell) => billInvnow.IsTorsChk == true)
- .Where((billInvnow, warecell) => billInvnow.InvStateCode == "InvEcecState_In" && !billInvnow.ProductMachCode.Contains("R") && billInvnow.ContUsageQty <= 0 && billInvnow.TorsChkQty < 1).ToList()
- .Where((billInvnow, warecell) => billInvnow.ProductTime <= startTime)
- .Count();
- //库中未满足时效待检测盘
- result.TorNoTobe = _db.Queryable<BillInvnow, BaseWarecell>((billInvnow, warecell) => new object[] {
- JoinType.Inner,billInvnow.ContGrpId == warecell.ContGrpId }).With(SqlWith.NoLock)
- .Where((billInvnow, warecell) => billInvnow.IsTorsChk == true)
- .Where((billInvnow, warecell) => billInvnow.InvStateCode == "InvEcecState_In" && !billInvnow.ProductMachCode.Contains("R") && billInvnow.ContUsageQty <= 0 && billInvnow.TorsChkQty < 1).ToList()
- .Where((billInvnow, warecell) => billInvnow.ProductTime > startTime)
- .Count();
- //库中未满足时效待检测盘(今天出库检测)
- result.TodayTorNoTobe = _db.Queryable<BillInvnow, BaseWarecell>((billInvnow, warecell) => new object[] {
- JoinType.Inner,billInvnow.ContGrpId == warecell.ContGrpId }).With(SqlWith.NoLock)
- .Where((billInvnow, warecell) => billInvnow.IsTorsChk == true)
- .Where((billInvnow, warecell) => billInvnow.InvStateCode == "InvEcecState_In" && !billInvnow.ProductMachCode.Contains("R") && billInvnow.ContUsageQty <= 0 && billInvnow.TorsChkQty < 1).ToList()
- .Where((billInvnow, warecell) => billInvnow.ProductTime <= startTime)
- .Count();
- result.ToroOuting = _db.Queryable<WCS_TaskOld>().With(SqlWith.NoLock).Where(p => p.Status != (int)TaskStatus.Finish && p.Status != (int)TaskStatus.Cancel && p.BusType == "扭转检测")
- .SplitTable(tabs => tabs.Take(2)).Count() - _db.Queryable<TorschWbCount>().With(SqlWith.NoLock).Sum(p => p.WbCount);
- if (result.ToroOuting < 0)
- {
- result.ToroOuting = 0;
- }
- result.ToroIning = _db.Queryable<BillInvnow>().With(SqlWith.NoLock).Where(p => p.Memo == "扭转回库" && p.InvStateCode == "InvEcecState_BuildUp").Count();
- result.TimeOuthw = _db.Queryable<BillInvnow, BaseWarecell>((inv, cell) => new object[] {
- JoinType.Left,inv.ContGrpBarCode == cell.ContGrpBarCode }).With(SqlWith.NoLock)
- .Where((inv, cell) => cell.IsStop == 0 && cell.StateNum == 2 && ((inv.ProductMachCode.Contains("R") && inv.OneInTime < DateTime.Now.AddHours(-72))
- || (!inv.ProductMachCode.Contains("R") && inv.ProductTime < DateTime.Now.AddHours(-72))))
- .ToList().Count;
- return result;
- }
- public List<TunnelDto> GetTunnelStopList()
- {
- return _db.Queryable<SysConfig>().Where(p => p.SType == "InStop" || p.SType == "OutStop").Select(m => new TunnelDto()
- {
- Id = m.Id.ToString(),
- WareHouseName = "时效库",
- Code = m.Code,
- Name = m.Name,
- Tunnel = m.Default1,
- Floor = m.Default2,
- Statu = string.IsNullOrEmpty(m.SContent) ? "0" : "1",
- StatuName = string.IsNullOrEmpty(m.SContent) ? "启用" : "禁用",
- SType = m.SType,
- Memo = m.Memo,
- AddTime = m.AddTime,
- EditTime = m.EditTime,
- }).ToList();
- }
- public SysConfig GetSysConfig(string code)
- {
- return _db.Queryable<SysConfig>().Where(p => p.Code == code).First();
- }
- public List<BaseTorchbandinfo> GetTorStaticsInfo(string maccode)
- {
- var result = new List<BaseTorchbandinfo>();
- result = _db.Queryable<BaseTorchbandinfo>().With(SqlWith.NoLock).Where(p => p.Machine.Contains(maccode)).ToList();
- return result;
- }
- public TorschWbCount GetTorschWbCount(string maccode)
- {
- var result = new TorschWbCount();
- result = _db.Queryable<TorschWbCount>().With(SqlWith.NoLock).Where(p => p.Code.Contains(maccode)).First();
- return result == null ? new TorschWbCount() : result;
- }
- /// <summary>
- /// 时效当前库存分布(非控制盘)
- /// </summary>
- /// <returns></returns>
- public List<CurStockInfo> GetCurStockInfo()
- {
- var lists = _db.Queryable<BillInvnow>()
- .With(SqlWith.NoLock)
- .Where((billInvnow) => billInvnow.InvStateCode == SXInvState.InvEcecState_In.ToString() && string.IsNullOrEmpty(billInvnow.PreStock) && ((billInvnow.IsControlpanel == false) || (billInvnow.IsControlpanel == true && billInvnow.InDocsNo.StartsWith("CHA"))))
- .Select((billInvnow) => new CurStockInfo
- {
- MatName = billInvnow.MatName,
- MatCode = billInvnow.MatCode,
- DocNo = billInvnow.InDocsNo,
- WbGroupCode = billInvnow.WbGroupCode,
- Wind = billInvnow.Wind,
- HWType = billInvnow.HWTypeCode,
- //IsTorsChk = billInvnow.IsTorsChk.ToString(),
- IsBlack = billInvnow.IsBlack.ToString(),
- //Rule = boxrule.PackRule,
- Grade = billInvnow.Grade,
- ContGrpBarCode = billInvnow.ContGrpBarCode
- }).MergeTable().ToList().Distinct(new CompareStock());
- var doclist = _db.Context.Queryable<BillPboxrule>().With(SqlWith.NoLock).Select(p => new CurStockInfo() { DocNo = p.DocsNo, SKU = p.SkuCode }).Distinct().ToList();
- var newCurStockInfoLists = from st in lists
- join doc in doclist on st.DocNo equals doc.DocNo into tempstock
- from nst in tempstock.DefaultIfEmpty()
- select new CurStockInfo
- {
- MatName = st.MatName,
- MatCode = st.MatCode,
- DocNo = nst == null ? "" : nst.DocNo,
- WbGroupCode = st.WbGroupCode,
- Wind = st.Wind,
- HWType = st.HWType,
- //IsTorsChk = billInvnow.IsTorsChk.ToString(),
- IsBlack = st.IsBlack.ToString(),
- //Rule = boxrule.PackRule,
- Grade = st.Grade,
- ContGrpBarCode = st.ContGrpBarCode,
- SKU = nst == null ? "" : nst.DocNo,
- };
- var list = new List<CurStockInfo>();
- var boxlist = _db.Queryable<BillPboxrule>().With(SqlWith.NoLock).ToList();
- foreach (var item in newCurStockInfoLists.GroupBy(p => new { p.SKU, p.MatCode, p.DocNo, p.WbGroupCode, p.Grade }).ToList())
- {
- list.Add(new CurStockInfo()
- {
- SKU = item.Key.SKU ?? "",
- MatName = item.First().MatName,
- DocNo = item.Key.DocNo,
- WbGroupCode = item.Key.WbGroupCode ?? "",
- NoBCount = new List<string>() { item.Count(p => p.IsBlack == "0" && p.Wind == "R") + "R", item.Count(p => p.IsBlack == "0" && p.Wind == "L") + "L" },
- BCount = new List<string>() { item.Count(p => p.IsBlack == "1" && p.Wind == "R") + "R", item.Count(p => p.IsBlack == "1" && p.Wind == "L") + "L" },
- Grade = item.Key.Grade ?? "",
- //Rule = item.Key.Rule ?? "",
- FinCount = boxlist.Where(p => p.DocsNo == item.Key.DocNo && p.ZXStateCode == "2").Count(),
- NoFinCount = boxlist.Where(p => p.DocsNo == item.Key.DocNo && p.ZXStateCode != "2").Count(),
- Count = item.Count(p => !string.IsNullOrEmpty(p.ContGrpBarCode))
- });
- }
- return list.OrderBy(o => o.SKU).ThenBy(o => o.WbGroupCode).ThenBy(o => o.Wind).ThenBy(o => o.HWType).ThenBy(o => o.Grade).ToList();
- }
- /// <summary>
- /// 时效当前库存分布(控制盘)
- /// </summary>
- /// <returns></returns>
- public List<CurStockInfo> GetCurStockInfoControl()
- {
- var lists = _db.Queryable<BillInvnow, BillPboxrule>((billInvnow, boxrule) => new object[] {
- JoinType.Left,billInvnow.InDocsNo == boxrule.DocsNo,JoinType.Left})
- .With(SqlWith.NoLock)
- .Where((billInvnow, boxrule) => billInvnow.InvStateCode == SXInvState.InvEcecState_In.ToString() && string.IsNullOrEmpty(billInvnow.PreStock) && billInvnow.IsControlpanel == true && billInvnow.Grade == "A")
- .Select((billInvnow, boxrule) => new CurStockInfo
- {
- SKU = boxrule.SkuCode,
- MatName = billInvnow.MatName,
- MatCode = billInvnow.MatCode,
- DocNo = billInvnow.InDocsNo,
- WbGroupCode = billInvnow.WbGroupCode,
- Wind = billInvnow.Wind,
- HWType = billInvnow.HWTypeCode,
- //IsTorsChk = billInvnow.IsTorsChk.ToString(),
- IsBlack = billInvnow.IsBlack.ToString(),
- //Rule = boxrule.PackRule,
- Grade = billInvnow.Grade,
- ContGrpBarCode = billInvnow.ContGrpBarCode,
- ProductTime = billInvnow.ProductTime,
- }).MergeTable().ToList().Distinct(new CompareStock());
- var list = new List<CurStockInfo>();
- var boxlist = _db.Queryable<BillPboxrule>().With(SqlWith.NoLock).ToList();
- foreach (var item in lists.GroupBy(p => new { p.SKU, p.MatCode, p.WbGroupCode, p.Grade }).ToList())
- {
- list.Add(new CurStockInfo()
- {
- SKU = item.Key.SKU ?? "",
- MatName = item.First().MatName,
- WbGroupCode = item.Key.WbGroupCode ?? "",
- HaveBlack = new List<string>() {
- "("+ item.Count(p => p.IsBlack == "1" && p.Wind == "R" && p.ProductTime >= DateTime.Now.Date.AddDays(-2).AddHours(13) && p.ProductTime <= DateTime.Now.Date.AddDays(-1).AddHours(8)) + "R"+"/"+ item.Count(p => p.IsBlack == "1" && p.Wind == "L" && p.ProductTime >= DateTime.Now.Date.AddDays(-2).AddHours(13) && p.ProductTime <= DateTime.Now.Date.AddDays(-1).AddHours(8)) + "L" +")",
- "("+ item.Count(p => p.IsBlack == "1" && p.Wind == "R" && p.ProductTime >= DateTime.Now.Date.AddDays(-1).AddHours(13) && p.ProductTime <= DateTime.Now.Date.AddHours(8)) + "R"+"/"+ item.Count(p => p.IsBlack == "1" && p.Wind == "L" && p.ProductTime >= DateTime.Now.Date.AddDays(-1).AddHours(13) && p.ProductTime <= DateTime.Now.Date.AddHours(8)) + "L" +")",
- "("+ item.Count(p => p.IsBlack == "1" && p.Wind == "R" && p.ProductTime >= DateTime.Now.Date.AddHours(13)) + "R"+"/"+ item.Count(p => p.IsBlack == "1" && p.Wind == "L" && p.ProductTime >= DateTime.Now.Date.AddHours(13)) + "L" +")",
- },
- Grade = item.Key.Grade ?? "",
- //Rule = item.Key.Rule ?? "",
- Count = item.Count(p => !string.IsNullOrEmpty(p.ContGrpBarCode)),
- TodayQty = new List<string>() { item.Count(p => p.IsBlack == "0" && p.Wind == "R" && p.ProductTime >= DateTime.Now.Date.AddHours(13)) + "R", item.Count(p => p.IsBlack == "0" && p.Wind == "L" && p.ProductTime >= DateTime.Now.Date.AddHours(13)) + "L" },
- YesterdayQty = new List<string>() { item.Count(p => p.IsBlack == "0" && p.Wind == "R" && p.ProductTime >= DateTime.Now.Date.AddDays(-1).AddHours(13) && p.ProductTime <= DateTime.Now.Date.AddHours(8)) + "R", item.Count(p => p.IsBlack == "0" && p.Wind == "L" && p.ProductTime >= DateTime.Now.Date.AddDays(-1).AddHours(13) && p.ProductTime <= DateTime.Now.Date.AddHours(8)) + "L" },
- BeforeYesterdayQty = new List<string>() { item.Count(p => p.IsBlack == "0" && p.Wind == "R" && p.ProductTime >= DateTime.Now.Date.AddDays(-2).AddHours(13) && p.ProductTime <= DateTime.Now.Date.AddDays(-1).AddHours(8)) + "R", item.Count(p => p.IsBlack == "0" && p.Wind == "L" && p.ProductTime >= DateTime.Now.Date.AddDays(-2).AddHours(13) && p.ProductTime <= DateTime.Now.Date.AddDays(-1).AddHours(8)) + "L" },
- });
- }
- return list.OrderBy(o => o.SKU).ThenBy(o => o.WbGroupCode).ThenBy(o => o.Wind).ThenBy(o => o.HWType).ThenBy(o => o.Grade).ToList();
- }
- }
- }
|