using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Text; using Model.ModelDto.DataDto; using SqlSugar; using WMS.DAL; using WMS.Entity.Context; using WMS.Entity.DataEntity; using WMS.IBLL.IDataServer; namespace WMS.BLL.DataServer { public class DataBoxInfoServer: DbHelper,IDataBoxInfoServer { private static readonly SqlSugarScope Db = DataContext.Db; public DataBoxInfoServer():base(Db) { } #region 托盘明细 /// /// 获取箱码明细 /// /// id /// 物料号 /// 物料名称 /// 托盘号 /// 批次号 /// 箱码 /// 箱支状态 /// 检验标记 /// 零箱标记 /// 质量状态 /// public List GetDataBoxInfo(string id, string skuNo, string skuName, string palletNo, string lotNo, string boxNo, string status, string inspectMark, string bitBoxMark, string inspectStatus) { string str = "select PalletNo,PalletNo2,PalletNo3,BoxNo,BoxNo2,BoxNo3,Status,LotNo,Qty,FullQty,SkuNo,SkuName,LotText,ProductionTime,InspectMark,BitBoxMark,InspectStatus,InspectTime from DataBoxInfo Where IsDel = @isdel"; //判断id是否为空 if (!string.IsNullOrEmpty(id)) { str += " and StockDetailId = @id"; } //判断物料号是否为空 if (!string.IsNullOrEmpty(skuNo)) { str += " and SkuNo like @skuno"; } //判断物料名称是否为空 if (!string.IsNullOrEmpty(skuName)) { str += " and SkuName like @skuname"; } //判断托盘号是否为空 if (!string.IsNullOrEmpty(palletNo)) { str += " and PalletNo like @palletno"; } //判断批次是否为空 if (!string.IsNullOrEmpty(lotNo)) { str += " and LotNo like @lotno"; } //判断箱码是否为空 if (!string.IsNullOrEmpty(boxNo)) { str += " and BoxNo like @boxno"; } //判断箱支状态是否为空 if (!string.IsNullOrEmpty(status)) { str += " and Status = @status"; } //判断检验标记是否为空 if (!string.IsNullOrEmpty(inspectMark)) { str += " and InspectMark = @inspectmark"; } //判断零箱标记是否为空 if (!string.IsNullOrEmpty(bitBoxMark)) { str += " and BitBoxMark = @bitboxmark"; } //判断质量状态是否为空 if (!string.IsNullOrEmpty(inspectStatus)) { str += " and InspectStatus = @inspectstatus"; } //排序 str += " order by LotNo,PalletNo,SkuNo"; List boxInfor = Db.Ado.SqlQuery(str, new { isdel = "0", //是否删除 id, //id skuno = "%" + skuNo + "%", //物料号 skuname = "%" + skuName + "%", //物料名称 palletno = "%" + palletNo + "%", //托盘 lotno = "%" + lotNo + "%", //批次号 boxno = "%" + boxNo + "%", //箱码 status, //箱支状态 inspectmark = inspectMark, //检验标记 bitboxmark = bitBoxMark, //零箱标记 inspectstatus = inspectStatus //质量状态 }); List box = new List(); foreach (var b1 in boxInfor) { //判断box是否为空 if (box.Count <= 0) { //无数据获取第一条 box.Add(b1); continue; } int i = 0; foreach (var b2 in box) { if (b2.BoxNo == b1.BoxNo) { b2.Qty += b1.Qty; break; } i += 1; } if (i == box.Count) { box.Add(b1); continue; } } return box; } /// /// 根据箱码获取箱支信息 /// /// 箱码 /// 支码 /// public List GetBoxInfoByBoxNo(string boxNo, string boxNo3) { string str = "select PalletNo,PalletNo2,PalletNo3,BoxNo,BoxNo2,BoxNo3,Status,LotNo,Qty,FullQty,SkuNo,SkuName,LotText,ProductionTime,InspectMark,BitBoxMark,InspectStatus,InspectTime from DataBoxInfo Where IsDel = @isdel"; //判断箱码是否为空 if (!string.IsNullOrEmpty(boxNo)) { str += " and BoxNo = @boxno"; } //判断支码是否为空 if (!string.IsNullOrEmpty(boxNo3)) { str += " and BoxNo3 like @boxno3"; } //排序 str += " order by LotNo,PalletNo,SkuNo"; List boxInfor = Db.Ado.SqlQuery(str, new { isdel = "0", //是否删除 boxno = boxNo, //箱码 boxno3 = "%" + boxNo3 + "%", //支码 }); return boxInfor; } #endregion #region 临期预警 /// /// 获取临期预警信息 /// /// 物料号 /// 物料名称 /// 批次 /// 托盘号 /// 状态 /// 检验标记 /// 质量状态 /// 是否裹包 /// 是否打带 /// public List GetEmergencyWarning(string skuNo, string skuName, string lotNo, string palletNo, string status, string inspectMark, string inspectStatus) { string str = @" select d.WareHouseName,d.WareHouseNo,e.RoadwayName,e.RoadwayNo,f.AreaName,f.AreaNo,c.LocatNo,a.PalletNo, a.SkuNo,a.SkuName,SUM(a.Qty) as Qty,a.Standard,a.LotNo,a.SupplierLot,a.ProductionTime,a.Status from DataBoxInfo a left join SysMaterials b on a.SkuNo = b.SkuNo left join DataStockDetail c on a.StockDetailId = c.Id left join SysWareHouse d on d.WareHouseNo = c.WareHouseNo left join SysStorageRoadway e on e.RoadwayNo = c.RoadwayNo left join SysStorageArea f on f.AreaNo = c.AreaNo where a.ProductionTime+b.Warranty-b.AdventTime <= GETDATE() "; //判断物料号是否为空 if (!string.IsNullOrEmpty(skuNo)) { str += " and a.SkuNo like @skuno"; } //判断物料名称是否为空 if (!string.IsNullOrEmpty(skuName)) { str += " and a.SkuName like @skuname"; } //判断批次是否为空 if (!string.IsNullOrEmpty(lotNo)) { str += " and a.LotNo like @lotno"; } //判断托盘号是否为空 if (!string.IsNullOrEmpty(palletNo)) { str += " and a.PalletNo like @palletno"; } //判断状态是否为空 if (!string.IsNullOrEmpty(status)) { str += " and a.Status = @status"; } //判断检验标记是否为空 if (!string.IsNullOrEmpty(inspectMark)) { str += " and a.InspectMark = @inspectmark"; } //判断质量状态是否为空 if (!string.IsNullOrEmpty(inspectStatus)) { str += " and a.InspectStatus = @inspectstatus"; } //排序 str += @" group by d.WareHouseName,d.WareHouseNo,e.RoadwayName,e.RoadwayNo,f.AreaName,f.AreaNo,c.LocatNo,a.PalletNo,a.SkuNo,a.SkuName,a.Standard,a.LotNo,a.SupplierLot,a.ProductionTime,a.Status order by a.SkuNo,a.LotNo "; List stockList = Db.Ado.SqlQuery(str, new { skuno = skuNo, //物料号 skuname = skuName, //物料名称 lotno = lotNo, //批次 palletno = palletNo, //托盘号 status, //状态 inspectmark = inspectMark, //检验标记 inspectstatus = inspectStatus, //质量状态 }); return stockList; } #endregion #region 导出箱码明细 /// /// 导出箱码明细 /// /// id /// 物料号 /// 物料名称 /// 托盘号 /// 批次号 /// 箱码 /// 箱支状态 /// 检验标记 /// 零箱标记 /// 质量状态 /// public List GetDataBoxInfoDaoChu(string id, string skuNo, string skuName, string palletNo, string lotNo, string boxNo, string status, string inspectMark, string bitBoxMark, string inspectStatus) { string str = "select PalletNo,PalletNo2,PalletNo3,BoxNo,BoxNo2,BoxNo3,Status,LotNo,Qty,FullQty,SkuNo,SkuName,LotText,ProductionTime,InspectMark,BitBoxMark,InspectStatus,InspectTime from DataBoxInfo Where IsDel = @isdel"; //判断id是否为空 if (!string.IsNullOrEmpty(id)) { str += " and StockDetailId = @id"; } //判断物料号是否为空 if (!string.IsNullOrEmpty(skuNo)) { str += " and SkuNo like @skuno"; } //判断物料名称是否为空 if (!string.IsNullOrEmpty(skuName)) { str += " and SkuName like @skuname"; } //判断托盘号是否为空 if (!string.IsNullOrEmpty(palletNo)) { str += " and PalletNo like @palletno"; } //判断批次是否为空 if (!string.IsNullOrEmpty(lotNo)) { str += " and LotNo like @lotno"; } //判断箱码是否为空 if (!string.IsNullOrEmpty(boxNo)) { str += " and BoxNo like @boxno"; } //判断箱支状态是否为空 if (!string.IsNullOrEmpty(status)) { str += " and Status = @status"; } //判断检验标记是否为空 if (!string.IsNullOrEmpty(inspectMark)) { str += " and InspectMark = @inspectmark"; } //判断零箱标记是否为空 if (!string.IsNullOrEmpty(bitBoxMark)) { str += " and BitBoxMark = @bitboxmark"; } //判断质量状态是否为空 if (!string.IsNullOrEmpty(inspectStatus)) { str += " and InspectStatus = @inspectstatus"; } //排序 str += " order by LotNo,PalletNo,SkuNo"; List boxInfor = Db.Ado.SqlQuery(str, new { isdel = "0", //是否删除 id, //id skuno = "%" + skuNo + "%", //物料号 skuname = "%" + skuName + "%", //物料名称 palletno = "%" + palletNo + "%", //托盘 lotno = "%" + lotNo + "%", //批次号 boxno = "%" + boxNo + "%", //箱码 status, //箱支状态 inspectmark = inspectMark, //检验标记 bitboxmark = bitBoxMark, //零箱标记 inspectstatus = inspectStatus //质量状态 }); List box = new List(); foreach (var b1 in boxInfor) { //判断box是否为空 if (box.Count <= 0) { //无数据获取第一条 box.Add(b1); continue; } int i = 0; foreach (var b2 in box) { if (b2.BoxNo == b1.BoxNo) { b2.Qty += b1.Qty; break; } i += 1; } if (i == box.Count) { box.Add(b1); continue; } } foreach (var item in box) { //物料编码,加上单引号是防止导出到excel自动把前面的0给去掉 if (!string.IsNullOrEmpty(item.SkuNo) && item.SkuNo.Substring(0, 1) == "0") { item.SkuNo = $"'{item.SkuNo}"; } //箱码,加上单引号是防止导出到excel纯数字太长 if (!string.IsNullOrEmpty(item.BoxNo)) { item.BoxNo = $"'{item.BoxNo}"; } //抽检标记 switch (item.InspectMark) { case "0": item.InspectMark = "否"; break; case "1": item.InspectMark = "是"; break; default: break; } //零箱标记 switch (item.BitBoxMark) { case "0": item.BitBoxMark = "否"; break; case "1": item.BitBoxMark = "是"; break; default: break; } //质检状态 switch (item.InspectStatus) { case "0": item.InspectStatus = "待检验"; break; case "1": item.InspectStatus = "检验合格"; break; case "2": item.InspectStatus = "不合格"; break; case "4": item.InspectStatus = "放置期"; break; default: break; } } return box; } #endregion #region 废代码 仅供参考 ////获取分组后的箱码明细 //public List GetDataBoxInfoGourp(string id, string skuNo, string skuName, string palletNo, string lotNo, string boxNo, // string status, string inspectMark, string bitBoxMark, string inspectStatus, int page, int limit, out int count) //{ // try // { // Expression> item = Expressionable.Create() // .AndIF(!string.IsNullOrWhiteSpace(id), it => it.StockDetailId == int.Parse(id)) // .AndIF(!string.IsNullOrWhiteSpace(skuNo), it => it.SkuNo.Contains(skuNo.Trim())) // .AndIF(!string.IsNullOrWhiteSpace(skuName), it => it.SkuName.Contains(skuName.Trim())) // .AndIF(!string.IsNullOrWhiteSpace(palletNo), it => it.PalletNo.Contains(palletNo.Trim())) // .AndIF(!string.IsNullOrWhiteSpace(lotNo), it => it.LotNo.Contains(lotNo.Trim())) // .AndIF(!string.IsNullOrWhiteSpace(boxNo), it=>it.BoxNo.Contains(boxNo.Trim())) // .AndIF(!string.IsNullOrWhiteSpace(status), it => it.Status == status) // .AndIF(!string.IsNullOrWhiteSpace(inspectMark), it => it.InspectMark == inspectMark) // .AndIF(!string.IsNullOrWhiteSpace(bitBoxMark), it => it.BitBoxMark == bitBoxMark) // .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => it.InspectStatus == inspectStatus) // .ToExpression();//注意 这一句 不能少 // var total = 0; // var list = GetAllWhereAsync(item).GroupBy(m=>new {m.PalletNo,m.BoxNo,m.SkuNo,m.SkuName,m.LotNo});//.ToOffsetPage(page, limit, ref total); // var data = list.Select(m=>new // { // a=m.PalletNo, // b=m.BoxNo, // c=m.SkuNo, // d=m.SkuName, // e=m.LotNo, // f=SqlFunc.AggregateSum(m.Qty), // }).ToOffsetPage(page, limit, ref total); // count = total; // return null; // } // catch (Exception e) // { // throw new Exception(e.Message); // } //} ////根据箱码获取箱支信息 //public List GetBoxInfoByBoxNo(string boxNo, string boxNo3) //{ // try // { // Expression> item = Expressionable.Create() // .AndIF(!string.IsNullOrWhiteSpace(boxNo), it => it.BoxNo == boxNo) // .AndIF(!string.IsNullOrWhiteSpace(boxNo3), it => it.BoxNo3.Contains(boxNo3.Trim())) // .ToExpression();//注意 这一句 不能少 // var data = GetAllWhereAsync(item).ToList();//.ToOffsetPage(page, limit, ref total); // return data; // } // catch (Exception e) // { // throw new Exception(e.Message); // } //} #endregion } }