using System; using SqlSugar; using Infrastructure.Attribute; using ZR.Model; using ZR.Model.Dto; using ZR.Model.Models; using ZR.Repository; using ZR.Service.Business.IBusinessService; using System.Linq; using Infrastructure; using System.Collections.Generic; using ZR.Model.System; using Org.BouncyCastle.Math.EC.Rfc7748; namespace ZR.Service.Business { /// /// 库存管理/库存明细表Service业务层处理 /// /// @author admin /// @date 2023-04-27 /// [AppService(ServiceType = typeof(IStkBalanceDtlService), ServiceLifetime = LifeTime.Transient)] public class StkBalanceDtlService : BaseService, IStkBalanceDtlService { #region 业务逻辑代码 /// /// 查询库存管理/库存明细表列表 /// /// /// public PagedInfo GetList(StkBalanceDtlQueryDto parm) { //开始拼装查询条件 var predicate = Expressionable.Create(); if (parm.BeginTime != null && parm.EndTime != null) { parm.BeginTime = DateTimeHelper.GetBeginTime(parm.BeginTime, -1); parm.EndTime = DateTimeHelper.GetBeginTime(parm.EndTime, 1); predicate.And(d => d.CreateTime >= parm.BeginTime && d.CreateTime <= parm.EndTime); } predicate.AndIF(parm.RegionId > 0, d => d.RegionId == parm.RegionId); //predicate.AndIF(parm.BinId > 0, d => d.BinId == parm.BinId); //predicate.AndIF(!string.IsNullOrEmpty(parm.BinCode), d => d.BinCode.Contains(parm.BinCode)); predicate.AndIF(!string.IsNullOrEmpty(parm.BomNo), d => d.BomNo.Contains(parm.BomNo)); predicate.AndIF(!string.IsNullOrEmpty(parm.DeliverNo), d => d.DeliverNo.Contains(parm.DeliverNo)); predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialCode), d => d.MaterialCode.Contains(parm.MaterialCode)); predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialName), d => d.MaterialName.Contains(parm.MaterialName)); predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialSpec), d => d.MaterialSpec.Contains(parm.MaterialSpec)); predicate.AndIF(parm.Status != null, d => d.Status == parm.Status); predicate.AndIF(parm.KeyFlag != null, d => d.KeyFlag == parm.KeyFlag); predicate.AndIF(!string.IsNullOrEmpty(parm.BnSnCode), d => d.MaterialSpec.Contains(parm.BnSnCode)); //先判断搜索条件中有没有bincode if (!string.IsNullOrEmpty(parm.BinCode)) { //把basbin表检索到list List bins = Context.Queryable().ToList(); //查找包含搜索条件的basbin数据 var newBasBins = bins.FindAll(b=>b.BinCode.Contains(parm.BinCode)); //提取符合条件的basbin,并返回其id long[] BasBinIds = newBasBins.Select(x => x.BinId).ToArray(); //添加转化完成的检索条件,即符合basbinId的数据 predicate.And(d => BasBinIds.Contains(d.BinId)); } //搜索条件查询语法参考Sqlsugar var response = Queryable() .LeftJoin((d,region)=>d.RegionId==region.RegionId) .LeftJoin((d,region, bin) => d.BinId == bin.BinId) .Where(predicate.ToExpression()) .Select((d,region,bin) => new StkBalanceDtl { RegionId = d.RegionId.SelectAll(), BinId = d.BinId.SelectAll(), RegionName = region.RegionName, RegionCode=region.RegionCode, BinCode = bin.BinCode, }) .ToPage(parm); return response; } /// /// 查询库存管理/库存统计列表 /// /// /// public PagedInfo StatList(StkBalanceDtlQueryDto parm) { //开始拼装查询条件 var predicate = Expressionable.Create(); predicate.AndIF(parm.RegionId > 0, d => d.RegionId == parm.RegionId); predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialCode), d => d.MaterialCode.Contains(parm.MaterialCode)); predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialName), d => d.MaterialName.Contains(parm.MaterialName)); predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialSpec), d => d.MaterialSpec.Contains(parm.MaterialSpec)); predicate.AndIF(parm.KeyFlag != null, d => d.KeyFlag == parm.KeyFlag); predicate.AndIF(!string.IsNullOrEmpty(parm.BnSnCode), d => d.MaterialSpec.Contains(parm.BnSnCode)); //搜索条件查询语法参考Sqlsugar var response = Queryable() .GroupBy(d => new { d.MaterialName }) .LeftJoin((d, region) => d.RegionId == region.RegionId) .Where(predicate.ToExpression()) .Select((d, region) => new StkBalanceDtl { RegionId = d.RegionId.SelectAll(), RegionName=region.RegionName, SumQty = SqlFunc.AggregateSum(d.BalanceQty), }) .ToPage(parm); return response; } /// /// 添加库存管理/库存明细表 /// /// /// public int AddStkBalanceDtl(StkBalanceDtl model) { return Add(model, true); } /// /// 修改库存管理/库存明细表 /// /// /// public int UpdateStkBalanceDtl(StkBalanceDtl model) { //var response = Update(w => w.BalanceId == model.BalanceId, it => new StkBalanceDtl() //{ // RegionId = model.RegionId, // BinId = model.BinId, // DeliverNo = model.DeliverNo, // BomNo = model.BomNo, // MaterialCode = model.MaterialCode, // MaterialName = model.MaterialName, // MaterialSpec = model.MaterialSpec, // Category = model.Category, // KeyFlag = model.KeyFlag, // BnSnCode = model.BnSnCode, // BalanceQty = model.BalanceQty, // Status = model.Status, // UpdateBy = model.UpdateBy, // UpdateTime = model.UpdateTime, // Remark = model.Remark, //}); //return response; return Update(model, true); } /// /// 清空库存管理/库存明细表 /// /// public void TruncateStkBalanceDtl() { Truncate(); } #endregion } }