| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Linq.Expressions; |
| | | using System.Runtime.Intrinsics.X86; |
| | | using System.Security.Claims; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Model.ModelDto; |
| | | using Model.ModelDto.DataDto; |
| | | using Model.ModelDto.SysDto; |
| | | using Model.ModelVm.DataVm; |
| | | using Model.ModelVm.SysVm; |
| | | using MySqlConnector; |
| | | using SqlSugar; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using WMS.Entity.BllQualityEntity; |
| | | using WMS.Entity.BllSoEntity; |
| | | using WMS.Entity.Context; |
| | | using WMS.Entity.DataEntity; |
| | | using WMS.Entity.SysEntity; |
| | |
| | | #region 库存明细 |
| | | |
| | | /// <summary> |
| | | /// 查询库存总量 |
| | | /// 查询库存统计 |
| | | /// </summary> |
| | | /// <param name="selectType">查询类型 0:物料信息 1:批次信息 2:质检信息 3:货主信息</param> |
| | | /// <param name="skuNo">物料编码</param> |
| | | /// <param name="skuName">物料名称</param> |
| | | /// <param name="ownerNo">货主编码</param> |
| | | /// <param name="ownerName">货主名称</param> |
| | | /// <param name="lotNo">批次</param> |
| | | /// <param name="status">库存状态</param> |
| | | /// <param name="inspectStatus">质检状态</param> |
| | | /// <returns></returns> |
| | | public List<MateDataStockDto> GetDataStockList(string skuNo, string skuName, string ownerNo, string ownerName, string lotNo) |
| | | public async Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, |
| | | string ownerName, string lotNo, string status, string inspectStatus) |
| | | { |
| | | string str = "select stock.SkuNo,stock.SkuName,stock.LotNo,stock.LotText,stock.Standard,stock.Qty," + |
| | | "stock.LockQty,stock.FrozenQty,stock.OwnerNo,stock.OwnerName,(mate.Weight * stock.Qty) WeightSum " + |
| | | "from DataStock stock " + |
| | | "left join SysMaterials mate on stock.SkuNo = mate.SkuNo " + |
| | | "Where stock.IsDel = @isdel and mate.IsDel = 0 "; |
| | | //判断物料编码是否为空 |
| | | if (!string.IsNullOrEmpty(skuNo)) |
| | | { |
| | | str += " and stock.SkuNo like @skuno"; |
| | | } |
| | | //判断物料名称是否为空 |
| | | if (!string.IsNullOrEmpty(skuName)) |
| | | { |
| | | str += " and stock.SkuName like @skuname"; |
| | | } |
| | | //判断货主编码是否为空 |
| | | if (!string.IsNullOrEmpty(ownerNo)) |
| | | { |
| | | str += " and stock.OwnerNo like @ownerNo"; |
| | | } |
| | | //判断货主名称是否为空 |
| | | if (!string.IsNullOrEmpty(ownerName)) |
| | | { |
| | | str += " and stock.OwnerName like @ownerName"; |
| | | } |
| | | //判断货主名称是否为空 |
| | | if (!string.IsNullOrEmpty(lotNo)) |
| | | { |
| | | str += " and stock.LotNo like @lotNo"; |
| | | } |
| | | //排序 |
| | | str += " order by stock.SkuNo"; |
| | | List<MateDataStockDto> StockList = Db.Ado.SqlQuery<MateDataStockDto>(str, new |
| | | { |
| | | isdel = "0", //是否删除 |
| | | skuno = "%" + skuNo + "%", //物料编码 |
| | | skuname = "%" + skuName + "%", //物料名称 |
| | | ownerNo = "%" + ownerNo + "%", //货主编码 |
| | | ownerName = "%" + ownerName + "%", //货主名称 |
| | | lotNo = "%" + lotNo + "%", //批次号 |
| | | }); |
| | | Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() |
| | | .AndIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo.Contains(skuNo)) |
| | | .AndIF(!string.IsNullOrEmpty(skuName), a => a.SkuName.Contains(skuName)) |
| | | .AndIF(!string.IsNullOrEmpty(ownerNo), a => a.OwnerNo.Contains(ownerNo)) |
| | | .AndIF(!string.IsNullOrEmpty(ownerName), a => a.OwnerName.Contains(ownerName)) |
| | | .AndIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo.Contains(lotNo)) |
| | | .AndIF(!string.IsNullOrEmpty(status), a => a.Status == status) |
| | | .AndIF(!string.IsNullOrEmpty(inspectStatus), a => a.InspectStatus == inspectStatus) |
| | | .And(a => a.IsDel == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | //库存总量 |
| | | List<MateDataStockDto> StockListDto = new List<MateDataStockDto>(); |
| | | |
| | | foreach (var item in StockList) |
| | | var data = Db.Queryable<DataStockDetail>().Where(item); |
| | | |
| | | List<MateDataStockDto> data2; |
| | | switch (selectType) |
| | | { |
| | | StockListDto.Add(item); |
| | | ////判断库存总量是否拥有物料 |
| | | //if (StockListDto.Count > 0) |
| | | //{ |
| | | // int i = 0; |
| | | // //foreach循环库存总量 |
| | | // foreach (var dto in StockListDto) |
| | | // { |
| | | // //判断物料和批次是否相同 |
| | | // if (dto.SkuNo == item.SkuNo && dto.LotNo == item.LotNo) |
| | | // { |
| | | // dto.Qty = (Convert.ToDecimal(dto.Qty) + Convert.ToDecimal(item.Qty)).ToString(); |
| | | // dto.FrozenQty = (Convert.ToDecimal(dto.FrozenQty) + Convert.ToDecimal(item.FrozenQty)).ToString(); |
| | | // dto.LockQty = (Convert.ToDecimal(dto.LockQty) + Convert.ToDecimal(item.LockQty)).ToString(); |
| | | // dto.ResidueQty= (Convert.ToDecimal(dto.ResidueQty) + Convert.ToDecimal(item.ResidueQty)).ToString(); |
| | | // break; |
| | | // } |
| | | // i += 1; |
| | | // //判断已有相同物料 |
| | | // if (i == StockListDto.Count) |
| | | // { |
| | | // StockListDto.Add(item); |
| | | // break; |
| | | // } |
| | | // } |
| | | //} |
| | | //else |
| | | //{ |
| | | // StockListDto.Add(item); |
| | | // continue; |
| | | //} |
| | | // 按物料统计 |
| | | case "0": |
| | | data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard }) |
| | | .Select(a => new MateDataStockDto() |
| | | { |
| | | SkuNo = a.SkuNo, //物料编码 |
| | | SkuName = a.SkuName, //物料名称 |
| | | Standard = a.Standard, //规格 |
| | | //LotNo = a.LotNo, //批次 |
| | | //LotText = a.LotText, //批次描述 |
| | | //OwnerNo = a.OwnerNo, //货主编码 |
| | | //OwnerName = a.OwnerName, //货主名称 |
| | | Status = status, //库存状态 |
| | | InspectStatus = inspectStatus, //质检状态 |
| | | Qty = SqlFunc.AggregateSumNoNull(a.Qty), //库存数量 |
| | | LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //锁定数量 |
| | | FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty), |
| | | InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty) |
| | | }).ToListAsync(); |
| | | break; |
| | | |
| | | // 按批次统计 |
| | | case "1": |
| | | data2 = await data.GroupBy(a => new { a.LotNo, a.LotText, a.SkuNo, a.SkuName, a.Standard }) |
| | | .Select(a => new MateDataStockDto() |
| | | { |
| | | SkuNo = a.SkuNo, //物料编码 |
| | | SkuName = a.SkuName, //物料名称 |
| | | Standard = a.Standard, //规格 |
| | | LotNo = a.LotNo, //批次 |
| | | LotText = a.LotText, //批次描述 |
| | | //OwnerNo = a.OwnerNo, //货主编码 |
| | | //OwnerName = a.OwnerName, //货主名称 |
| | | Status = status, //库存状态 |
| | | InspectStatus = inspectStatus, //质检状态 |
| | | Qty = SqlFunc.AggregateSumNoNull(a.Qty), //库存数量 |
| | | LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //锁定数量 |
| | | FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty), |
| | | InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty) |
| | | }).ToListAsync(); |
| | | break; |
| | | |
| | | // 按质检状态统计 |
| | | case "2": |
| | | data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard,a.InspectStatus}) |
| | | .Select(a => new MateDataStockDto() |
| | | { |
| | | SkuNo = a.SkuNo, //物料编码 |
| | | SkuName = a.SkuName, //物料名称 |
| | | Standard = a.Standard, //规格 |
| | | //LotNo = a.LotNo, //批次 |
| | | //LotText = a.LotText, //批次描述 |
| | | //OwnerNo = a.OwnerNo, //货主编码 |
| | | //OwnerName = a.OwnerName, //货主名称 |
| | | Status = status, //库存状态 |
| | | InspectStatus = a.InspectStatus, //质检状态 |
| | | Qty = SqlFunc.AggregateSumNoNull(a.Qty), //库存数量 |
| | | LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //锁定数量 |
| | | FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty), |
| | | InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty), |
| | | }).ToListAsync(); |
| | | break; |
| | | |
| | | // 按货主统计 |
| | | case "3": |
| | | data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard, a.OwnerNo, a.OwnerName }) |
| | | .Select(a => new MateDataStockDto() |
| | | { |
| | | SkuNo = a.SkuNo, //物料编码 |
| | | SkuName = a.SkuName, //物料名称 |
| | | Standard = a.Standard, //规格 |
| | | //LotNo = a.LotNo, //批次 |
| | | //LotText = a.LotText, //批次描述 |
| | | OwnerNo = a.OwnerNo, //货主编码 |
| | | OwnerName = a.OwnerName, //货主名称 |
| | | Status = status, //库存状态 |
| | | InspectStatus = inspectStatus, //质检状态 |
| | | Qty = SqlFunc.AggregateSumNoNull(a.Qty), //库存数量 |
| | | LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //锁定数量 |
| | | FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty), |
| | | InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty), |
| | | }).ToListAsync(); |
| | | break; |
| | | |
| | | // 默认统计(物料 批次 质检 库存状态 货主) |
| | | default: |
| | | data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard ,a.LotNo, a.LotText, a.OwnerNo, a.OwnerName , a.InspectStatus }) |
| | | .Select(a => new MateDataStockDto() |
| | | { |
| | | SkuNo = a.SkuNo, //物料编码 |
| | | SkuName = a.SkuName, //物料名称 |
| | | Standard = a.Standard, //规格 |
| | | LotNo = a.LotNo, //批次 |
| | | LotText = a.LotText, //批次描述 |
| | | OwnerNo = a.OwnerNo, //货主编码 |
| | | OwnerName = a.OwnerName, //货主名称 |
| | | Status = status, //库存状态 |
| | | InspectStatus = a.InspectStatus, //质检状态 |
| | | Qty = SqlFunc.AggregateSumNoNull(a.Qty), //库存数量 |
| | | LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //锁定数量 |
| | | FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty), |
| | | InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty), |
| | | }).ToListAsync(); |
| | | break; |
| | | } |
| | | |
| | | return StockListDto; |
| | | return data2; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public List<TotalRecordDto> GetTotalRecord(string skuNo, string skuName, string lotNo, string startTime, string endTime) |
| | | { |
| | | //入库 |
| | | string rstr = "select LotNo,SkuNo,SkuName,SUM(Qty) RQty,SUM(FactQty) RFactQty,SUM(CompleteQty) RCompleteQty from BllArrivalNoticeDetail where IsDel = '0' "; |
| | | //出库 |
| | | string cstr = "select LotNo,SkuNo,SkuName,SUM(Qty) CQty,SUM(FactQty) CFactQty,SUM(CompleteQty) CompleteQty,SUM(AllotQty) CAllotQty from BllExportNoticeDetail where IsDel = '0' "; |
| | | |
| | | //判断物料号是否为空 |
| | | if (!string.IsNullOrEmpty(skuNo)) |
| | | { |
| | | rstr += " and SkuNo like @skuno"; |
| | | cstr += " and SkuNo like @skuno"; |
| | | } |
| | | //判断物料名称是否为空 |
| | | if (!string.IsNullOrEmpty(skuName)) |
| | | { |
| | | rstr += " and SkuName like @skuname"; |
| | | cstr += " and SkuName like @skuname"; |
| | | } |
| | | //判断批次号是否为空 |
| | | if (!string.IsNullOrEmpty(lotNo)) |
| | | { |
| | | rstr += " and LotNo like @lotno"; |
| | | cstr += " and LotNo like @lotno"; |
| | | } |
| | | // liudl 时间不准确 暂时注释。 |
| | | if (!string.IsNullOrWhiteSpace(startTime)) |
| | | { |
| | | rstr += " and UpdateTime >= @startTime"; |
| | | cstr += " and UpdateTime >= @startTime"; |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(endTime)) |
| | | { |
| | | endTime = DateTime.Parse(endTime).AddDays(1).ToString(); |
| | | rstr += " and UpdateTime < @endTime"; |
| | | cstr += " and UpdateTime < @endTime"; |
| | | } |
| | | |
| | | rstr += " group by LotNo,SkuNo,SkuName"; |
| | | cstr += " group by LotNo,SkuNo,SkuName"; |
| | | //入库 |
| | | List<TotalRecordDto> totalHListData = Db.Ado.SqlQuery<TotalRecordDto>(rstr, new |
| | | { |
| | | skuno = "%" + skuNo + "%", //物料号 |
| | | skuname = "%" + skuName + "%", //物料名称 |
| | | lotno = "%" + lotNo + "%", //批次号 |
| | | startTime, //开始时间 |
| | | endTime //结束时间 |
| | | |
| | | }); |
| | | List<TotalRecordDto> totalCListData = Db.Ado.SqlQuery<TotalRecordDto>(cstr, new |
| | | { |
| | | skuno = "%" + skuNo + "%", //物料号 |
| | | skuname = "%" + skuName + "%", //物料名称 |
| | | lotno = "%" + lotNo + "%", //批次号 |
| | | startTime, //开始时间 |
| | | endTime //结束时间 |
| | | }); |
| | | |
| | | //合并数据 |
| | | int a = 0; |
| | | foreach (var h in totalHListData) |
| | | { |
| | | if (a >= totalCListData.Count) |
| | | // 获取入库单明细信息 |
| | | var asnList = Db.Queryable<BllArrivalNoticeDetail>() |
| | | .Where(m => m.IsDel == "0") |
| | | .WhereIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo.Contains(skuNo)) |
| | | .WhereIF(!string.IsNullOrEmpty(skuName), a => a.SkuName.Contains(skuName)) |
| | | .WhereIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo.Contains(lotNo)) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(startTime), a => a.CreateTime >= Convert.ToDateTime(startTime)) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(endTime), a => a.CreateTime <= Convert.ToDateTime(endTime).AddDays(1)) |
| | | .GroupBy(a => new { a.LotNo, a.SkuNo, a.SkuName }) |
| | | .Select(a => new TotalRecordDto() |
| | | { |
| | | continue; |
| | | } |
| | | foreach (var c in totalCListData) |
| | | LotNo=a.LotNo, |
| | | SkuNo=a.SkuNo, |
| | | SkuName=a.SkuName, |
| | | RQty = SqlFunc.AggregateSumNoNull(a.Qty), |
| | | RFactQty = (decimal)SqlFunc.AggregateSum(a.FactQty), |
| | | RCompleteQty = (decimal)SqlFunc.AggregateSum(a.CompleteQty), |
| | | CQty = 0, |
| | | CFactQty = 0, |
| | | CAllotQty = 0, |
| | | CompleteQty = 0 |
| | | }); |
| | | |
| | | // 获取出库单明细信息 |
| | | var soList = Db.Queryable<BllExportNoticeDetail>() |
| | | .Where(m => m.IsDel == "0") |
| | | .WhereIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo.Contains(skuNo)) |
| | | .WhereIF(!string.IsNullOrEmpty(skuName), a => a.SkuName.Contains(skuName)) |
| | | .WhereIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo.Contains(lotNo)) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(startTime), a => a.CreateTime >= Convert.ToDateTime(startTime)) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(endTime), a => a.CreateTime <= Convert.ToDateTime(endTime).AddDays(1)) |
| | | .GroupBy(a => new { a.LotNo, a.SkuNo, a.SkuName }) |
| | | .Select(a => new TotalRecordDto() |
| | | { |
| | | //判断出库是否拥有相同批次 且物料相同 |
| | | if (h.LotNo == c.LotNo || h.LotNo.Contains(c.LotNo) && h.SkuNo == c.SkuNo && h.SkuName == c.SkuName) |
| | | { |
| | | h.CQty = c.CQty; //出库数量 |
| | | h.CAllotQty = c.CAllotQty; //分配数量 |
| | | h.CFactQty = c.CFactQty; //下架数量 |
| | | h.CompleteQty = c.CompleteQty; //拣货数量 |
| | | //h.SONo = c.SONo; //出库单号 |
| | | LotNo = a.LotNo, |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | RQty = 0, |
| | | RFactQty = 0, |
| | | RCompleteQty = 0, |
| | | CQty = SqlFunc.AggregateSumNoNull(a.Qty), |
| | | CFactQty = (decimal)SqlFunc.AggregateSum(a.FactQty), |
| | | CAllotQty = (decimal)SqlFunc.AggregateSum(a.AllotQty), |
| | | CompleteQty = (decimal)SqlFunc.AggregateSum(a.CompleteQty), |
| | | }); |
| | | // 获取取样拣货信息 |
| | | var samplingList = Db.Queryable<BllSamplingDetails>() |
| | | .Where(m => m.IsDel == "0") |
| | | .WhereIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo.Contains(skuNo)) |
| | | .WhereIF(!string.IsNullOrEmpty(skuName), a => a.SkuName.Contains(skuName)) |
| | | .WhereIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo.Contains(lotNo)) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(startTime), a => a.CreateTime >= Convert.ToDateTime(startTime)) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(endTime), a => a.CreateTime <= Convert.ToDateTime(endTime).AddDays(1)) |
| | | .GroupBy(a => new { a.LotNo, a.SkuNo, a.SkuName }) |
| | | .Select(a => new TotalRecordDto() |
| | | { |
| | | LotNo = a.LotNo, |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | RQty = 0, |
| | | RFactQty = 0, |
| | | RCompleteQty = 0, |
| | | CQty = (decimal)SqlFunc.AggregateSum(a.CompleteQty), |
| | | CFactQty = 0, |
| | | CAllotQty = 0, |
| | | CompleteQty = (decimal)SqlFunc.AggregateSum(a.CompleteQty), |
| | | }); |
| | | |
| | | a += 1; |
| | | // 合并集合 |
| | | var dataList = Db.UnionAll(asnList, soList, samplingList) |
| | | .GroupBy(a => new { a.LotNo, a.SkuNo, a.SkuName }) |
| | | .Select(a => new TotalRecordDto() |
| | | { |
| | | LotNo = a.LotNo, |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | RQty = SqlFunc.AggregateSumNoNull(a.RQty), |
| | | RFactQty = (decimal)SqlFunc.AggregateSum(a.RFactQty), |
| | | RCompleteQty = (decimal)SqlFunc.AggregateSum(a.RCompleteQty), |
| | | CQty = SqlFunc.AggregateSumNoNull(a.CQty), |
| | | CFactQty = (decimal)SqlFunc.AggregateSum(a.CFactQty), |
| | | CAllotQty = (decimal)SqlFunc.AggregateSum(a.CAllotQty), |
| | | CompleteQty = (decimal)SqlFunc.AggregateSum(a.CompleteQty) |
| | | }).ToList(); |
| | | |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return totalHListData; |
| | | return dataList; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="startTime">开始时间</param> |
| | | /// <param name="endTime">结束时间</param> |
| | | /// <returns></returns> |
| | | public List<TotalRecordDto> GetDetailedRecord(string skuNo, string skuName, string lotNo, string palletNo, |
| | | string startTime, string endTime) |
| | | public List<TotalRecordDto> GetDetailedRecord(string skuNo, string skuName, string lotNo, string palletNo,string startTime, string endTime) |
| | | { |
| | | //入库 |
| | | string rstr = "select notice.ASNNo,bind.LotNo,notice.SkuNo,notice.SkuName,bind.PalletNo,bind.Qty RQty,bind.Qty RFactQty,bind.Qty RCompleteQty,bind.CompleteTime,notice.LotText,notice.SupplierLot,bind.CompleteTime from BllPalletBind bind left join BllArrivalNoticeDetail notice on bind.ASNDetailNo = notice.Id where bind.IsDel = '0' and notice.IsDel = '0' "; |
| | | //出库 |
| | | string cstr = "select notice.SONo,allot.LotNo,allot.TaskNo CTaskNo,allot.SkuNo,allot.SkuName,allot.PalletNo," + |
| | | "allot.UpdateTime CCreateTime,allot.Qty CQty,allot.Qty CAllotQty,Allot.Qty CFactQty,Allot.CompleteQty CompleteQty," + |
| | | "allot.LotText,allot.SupplierLot " + |
| | | "from BllExportAllot allot left join BllExportNoticeDetail notice on allot.SODetailNo = notice.Id " + |
| | | "where allot.IsDel = '0' and notice.IsDel = '0' "; |
| | | |
| | | //判断物料号是否为空 |
| | | if (!string.IsNullOrEmpty(skuNo)) |
| | | { |
| | | rstr += " and notice.SkuNo like @skuno"; |
| | | cstr += " and allot.SkuNo like @skuno"; |
| | | } |
| | | //判断物料名称是否为空 |
| | | if (!string.IsNullOrEmpty(skuName)) |
| | | { |
| | | rstr += " and notice.SkuName like @skuname"; |
| | | cstr += " and allot.SkuName like @skuname"; |
| | | } |
| | | //判断批次号是否为空 |
| | | if (!string.IsNullOrEmpty(lotNo)) |
| | | { |
| | | rstr += " and notice.LotNo like @lotno"; |
| | | cstr += " and allot.LotNo like @lotno"; |
| | | } |
| | | //判断托盘是否为空 |
| | | if (!string.IsNullOrEmpty(palletNo)) |
| | | { |
| | | rstr += " and bind.PalletNo like @palletno"; |
| | | cstr += " and allot.PalletNo like @palletno"; |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(startTime)) |
| | | { |
| | | rstr += " and bind.CompleteTime >= @startTime"; |
| | | cstr += " and allot.UpdateTime >= @startTime"; |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(endTime)) |
| | | { |
| | | endTime = DateTime.Parse(endTime).AddDays(1).ToString(); |
| | | rstr += " and bind.CompleteTime < @endTime"; |
| | | cstr += " and allot.UpdateTime < @endTime"; |
| | | } |
| | | |
| | | //rstr += " group by bind.LotNo,bind.SkuNo,bind.SkuName"; |
| | | //cstr += " group by LotNo,SkuNo,SkuName"; |
| | | //入库 |
| | | List<TotalRecordDto> totalRList = Db.Ado.SqlQuery<TotalRecordDto>(rstr, new |
| | | { |
| | | isdel = "0", //是否删除 |
| | | skuno = "%" + skuNo + "%", //物料号 |
| | | skuname = "%" + skuName + "%", //物料名称 |
| | | lotno = "%" + lotNo + "%", //批次号 |
| | | palletno = "%" + palletNo + "%", //托盘号 |
| | | startTime = startTime, |
| | | endTime = endTime |
| | | }); |
| | | //出库 |
| | | List<TotalRecordDto> totalCList = Db.Ado.SqlQuery<TotalRecordDto>(cstr, new |
| | | { |
| | | isdel = "0", //是否删除 |
| | | skuno = "%" + skuNo + "%", //物料号 |
| | | skuname = "%" + skuName + "%", //物料名称 |
| | | lotno = "%" + lotNo + "%", //批次号 |
| | | palletno = "%" + palletNo + "%", //托盘号 |
| | | startTime = startTime, |
| | | endTime = endTime |
| | | }); |
| | | |
| | | //合并 |
| | | foreach (var c in totalCList) |
| | | { |
| | | int i = 0; |
| | | foreach (var r in totalRList) |
| | | // 获取入库单明细信息 |
| | | var asnList = Db.Queryable<BllPalletBind,BllArrivalNoticeDetail> |
| | | ((tb1,tb2)=>new JoinQueryInfos( |
| | | JoinType.Left, tb1.ASNDetailNo == tb2.Id |
| | | )) |
| | | .Where((tb1,tb2) => tb1.IsDel == "0" && tb2.IsDel == "0") |
| | | .WhereIF(!string.IsNullOrWhiteSpace(startTime), tb1 => tb1.CompleteTime >= Convert.ToDateTime(startTime)) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(endTime), tb1 => tb1.CompleteTime <= Convert.ToDateTime(endTime).AddDays(1)) |
| | | .WhereIF(!string.IsNullOrEmpty(palletNo), tb1 => tb1.PalletNo.Contains(palletNo)) |
| | | .WhereIF(!string.IsNullOrEmpty(skuNo), (tb1,tb2) => tb2.SkuNo.Contains(skuNo)) |
| | | .WhereIF(!string.IsNullOrEmpty(skuName), (tb1, tb2) => tb2.SkuName.Contains(skuName)) |
| | | .WhereIF(!string.IsNullOrEmpty(lotNo), (tb1, tb2) => tb2.LotNo.Contains(lotNo)) |
| | | //.GroupBy((tb1,tb2) => new { tb2.LotNo, tb2.SkuNo, tb2.SkuName }) |
| | | .Select((tb1,tb2) => new TotalRecordDto() |
| | | { |
| | | i += 1; |
| | | //判断入库中是否存在出库中的批次物料托盘 |
| | | if (r.PalletNo == c.PalletNo && r.LotNo == c.LotNo && r.SkuNo == c.SkuNo && r.SkuName == c.SkuName) |
| | | { |
| | | if (r.SONo != null) |
| | | { |
| | | if (r.SONo != c.SONo) |
| | | { |
| | | totalRList.Add(c); |
| | | } |
| | | } |
| | | if (c.CTaskNo != "" && r.SONo == null || r.SONo == c.SONo) |
| | | { |
| | | r.SONo = c.SONo; //出库单号 |
| | | r.CQty += c.CQty; //出库数量 |
| | | r.CAllotQty += c.CAllotQty; //分配数量 |
| | | r.CFactQty += c.CFactQty; //下架数量 |
| | | r.CompleteQty += c.CompleteQty; //拣货数量 |
| | | r.CCreateTime = c.CCreateTime; //拣货时间 |
| | | } |
| | | if (r.CompleteTime == null) |
| | | { |
| | | r.RCompleteQty = 0; |
| | | } |
| | | break; |
| | | } |
| | | if (i == totalRList.Count) |
| | | { |
| | | totalRList.Add(c); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (totalCList.Count == 0) |
| | | { |
| | | foreach (var r in totalRList) |
| | | { |
| | | if (r.CompleteTime == null) |
| | | { |
| | | r.RCompleteQty = 0; |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | ASNNo = tb2.ASNNo, |
| | | LotNo = tb1.LotNo, |
| | | SkuNo = tb2.SkuNo, |
| | | SkuName = tb2.SkuName, |
| | | PalletNo = tb1.PalletNo, |
| | | RQty = tb1.Qty, |
| | | RFactQty = tb1.Qty, |
| | | RCompleteQty = tb1.Qty, |
| | | CompleteTime = tb1.CompleteTime, |
| | | LotText = tb1.LotText, |
| | | SupplierLot = tb2.SupplierLot, |
| | | |
| | | SONo = "", |
| | | CTaskNo = "", |
| | | CCreateTime = null, |
| | | CQty = 0, |
| | | CFactQty = 0, |
| | | CAllotQty = 0, |
| | | CompleteQty = 0 |
| | | }); |
| | | |
| | | return totalRList; |
| | | // 获取出库单明细信息 |
| | | var soList = Db.Queryable<BllExportAllot, BllExportNoticeDetail> |
| | | (((tb1, tb2) => new JoinQueryInfos( |
| | | JoinType.Left, tb1.SODetailNo == tb2.Id |
| | | ))) |
| | | .Where((tb1, tb2) => tb1.IsDel == "0" && tb2.IsDel == "0") |
| | | .WhereIF(!string.IsNullOrWhiteSpace(startTime), tb1 => tb1.UpdateTime >= Convert.ToDateTime(startTime)) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(endTime), tb1 => tb1.UpdateTime <= Convert.ToDateTime(endTime).AddDays(1)) |
| | | .WhereIF(!string.IsNullOrEmpty(palletNo), tb1 => tb1.PalletNo.Contains(palletNo)) |
| | | .WhereIF(!string.IsNullOrEmpty(skuNo), tb1 => tb1.SkuNo.Contains(skuNo)) |
| | | .WhereIF(!string.IsNullOrEmpty(skuName), tb1 => tb1.SkuName.Contains(skuName)) |
| | | .WhereIF(!string.IsNullOrEmpty(lotNo), tb1 => tb1.LotNo.Contains(lotNo)) |
| | | //.GroupBy(a => new { a.LotNo, a.SkuNo, a.SkuName }) |
| | | .Select((tb1, tb2) => new TotalRecordDto() |
| | | { |
| | | ASNNo = "", |
| | | LotNo = tb1.LotNo, |
| | | SkuNo = tb2.SkuNo, |
| | | SkuName = tb2.SkuName, |
| | | PalletNo = tb1.PalletNo, |
| | | RQty = 0, |
| | | RFactQty = 0, |
| | | RCompleteQty = 0, |
| | | CompleteTime = null, |
| | | LotText = tb1.LotText, |
| | | SupplierLot = tb2.SupplierLot, |
| | | |
| | | SONo = tb2.SONo, |
| | | CTaskNo = tb1.TaskNo, |
| | | CCreateTime = tb1.UpdateTime, |
| | | CQty = tb1.Qty, |
| | | CFactQty = tb1.Qty, |
| | | CAllotQty = tb1.Qty, |
| | | CompleteQty = (decimal)tb1.CompleteQty |
| | | }); |
| | | |
| | | // 获取取样拣货信息 |
| | | var samplingList = Db.Queryable<BllSamplingDetails>() |
| | | .Where(m => m.IsDel == "0") |
| | | .WhereIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo.Contains(skuNo)) |
| | | .WhereIF(!string.IsNullOrEmpty(skuName), a => a.SkuName.Contains(skuName)) |
| | | .WhereIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo.Contains(lotNo)) |
| | | .WhereIF(!string.IsNullOrEmpty(palletNo), a => a.PalletNo.Contains(palletNo)) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(startTime), a => a.CreateTime >= Convert.ToDateTime(startTime)) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(endTime), a => a.CreateTime <= Convert.ToDateTime(endTime).AddDays(1)) |
| | | //.GroupBy(a => new { a.LotNo, a.SkuNo, a.SkuName }) |
| | | .Select(a => new TotalRecordDto() |
| | | { |
| | | ASNNo = "", |
| | | LotNo = a.LotNo, |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | PalletNo = a.PalletNo, |
| | | RQty = 0, |
| | | RFactQty = 0, |
| | | RCompleteQty = 0, |
| | | CompleteTime = null, |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | |
| | | SONo = a.QcNo, |
| | | CTaskNo = "", |
| | | CCreateTime = a.CreateTime, |
| | | CQty = (decimal)a.CompleteQty, |
| | | CFactQty = 0, |
| | | CAllotQty = 0, |
| | | CompleteQty = (decimal)a.CompleteQty |
| | | }); |
| | | |
| | | // 合并集合 |
| | | var dataList = Db.UnionAll(asnList, soList, samplingList) |
| | | .Select(a => new TotalRecordDto() |
| | | { |
| | | ASNNo = a.ASNNo, |
| | | LotNo = a.LotNo, |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | PalletNo = a.PalletNo, |
| | | RQty = a.RQty, |
| | | RFactQty = a.RFactQty, |
| | | RCompleteQty = a.RCompleteQty, |
| | | CompleteTime = a.CompleteTime, |
| | | LotText = a.LotText, |
| | | SupplierLot = a.SupplierLot, |
| | | |
| | | SONo = a.SONo, |
| | | CTaskNo = a.CTaskNo, |
| | | CCreateTime = a.CCreateTime, |
| | | CQty = a.CQty, |
| | | CFactQty = a.CFactQty, |
| | | CAllotQty = a.CAllotQty, |
| | | CompleteQty = a.CompleteQty |
| | | }).ToList(); |
| | | |
| | | return dataList; |
| | | } |
| | | |
| | | #endregion |
| | |
| | | { |
| | | try |
| | | { |
| | | string str = "select* from SysMaterials where SkuNo in (select a.SkuNo from BllArrivalNoticeDetail a inner join BllExportNoticeDetail b on a.SkuNo = b.SkuNo"; |
| | | string str = "select* from SysMaterials where SkuNo in (select a.SkuNo from BllArrivalNoticeDetail a " + |
| | | "inner join BllExportNoticeDetail b on a.SkuNo = b.SkuNo"; |
| | | |
| | | //判断开始时间是否为空 |
| | | if (!string.IsNullOrWhiteSpace(StartTime)) |
| | |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region 导出库存 |
| | |
| | | //判断物料是否相同 |
| | | if (dto.SkuNo == item.SkuNo) |
| | | { |
| | | dto.Qty = (Convert.ToInt32(dto.Qty) + Convert.ToInt32(item.Qty)).ToString(); |
| | | dto.FrozenQty = (Convert.ToInt32(dto.FrozenQty) + Convert.ToInt32(item.FrozenQty)).ToString(); |
| | | dto.LockQty = (Convert.ToInt32(dto.LockQty) + Convert.ToInt32(item.LockQty)).ToString(); |
| | | dto.Qty = Convert.ToInt32(dto.Qty) + Convert.ToInt32(item.Qty); |
| | | dto.FrozenQty = Convert.ToInt32(dto.FrozenQty) + Convert.ToInt32(item.FrozenQty); |
| | | dto.LockQty = Convert.ToInt32(dto.LockQty) + Convert.ToInt32(item.LockQty); |
| | | dto.ResidueQty = (Convert.ToInt32(dto.ResidueQty) + Convert.ToInt32(item.ResidueQty)).ToString(); |
| | | break; |
| | | } |
| | |
| | | /// <param name="startTime">开始时间</param> |
| | | /// <param name="endTime">结束时间</param> |
| | | /// <returns></returns> |
| | | public List<StockDetailDto> GetInventoryList1DaoChu(string skuNo, string skuName, string lotNo, string locatNo, string palletNo, string status, string inspectStatus, string startTime, string endTime) |
| | | public List<StockDetailDto> GetInventoryList1DaoChu(string skuNo, string skuName, string lotNo, string locatNo, |
| | | string palletNo, string status, string inspectStatus, string startTime, string endTime) |
| | | { |
| | | string str = "select detail.*,house.WareHouseName as WareHouseName,roadway.RoadwayName as RoadwayName from DataStockDetail detail left join SysStorageRoadway roadway on detail.RoadwayNo = roadway.RoadwayNo left join SysWareHouse house on detail.WareHouseNo = house.WareHouseNo Where detail.IsDel = @isdel"; |
| | | //判断物料编码是否为空 |