StkBalanceDtlService.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. using System;
  2. using SqlSugar;
  3. using Infrastructure.Attribute;
  4. using ZR.Model;
  5. using ZR.Model.Dto;
  6. using ZR.Model.Models;
  7. using ZR.Repository;
  8. using ZR.Service.Business.IBusinessService;
  9. using System.Linq;
  10. using Infrastructure;
  11. using System.Collections.Generic;
  12. using ZR.Model.System;
  13. using Org.BouncyCastle.Math.EC.Rfc7748;
  14. namespace ZR.Service.Business
  15. {
  16. /// <summary>
  17. /// 库存管理/库存明细表Service业务层处理
  18. ///
  19. /// @author admin
  20. /// @date 2023-04-27
  21. /// </summary>
  22. [AppService(ServiceType = typeof(IStkBalanceDtlService), ServiceLifetime = LifeTime.Transient)]
  23. public class StkBalanceDtlService : BaseService<StkBalanceDtl>, IStkBalanceDtlService
  24. {
  25. #region 业务逻辑代码
  26. /// <summary>
  27. /// 查询库存管理/库存明细表列表
  28. /// </summary>
  29. /// <param name="parm"></param>
  30. /// <returns></returns>
  31. public PagedInfo<StkBalanceDtlDto> GetList(StkBalanceDtlQueryDto parm)
  32. {
  33. //开始拼装查询条件
  34. var predicate = Expressionable.Create<StkBalanceDtl>();
  35. if (parm.BeginTime != null && parm.EndTime != null)
  36. {
  37. parm.BeginTime = DateTimeHelper.GetBeginTime(parm.BeginTime, -1);
  38. parm.EndTime = DateTimeHelper.GetBeginTime(parm.EndTime, 1);
  39. predicate.And(d => d.CreateTime >= parm.BeginTime && d.CreateTime <= parm.EndTime);
  40. }
  41. predicate.AndIF(parm.RegionId > 0, d => d.RegionId == parm.RegionId);
  42. //predicate.AndIF(parm.BinId > 0, d => d.BinId == parm.BinId);
  43. //predicate.AndIF(!string.IsNullOrEmpty(parm.BinCode), d => d.BinCode.Contains(parm.BinCode));
  44. predicate.AndIF(!string.IsNullOrEmpty(parm.BomNo), d => d.BomNo.Contains(parm.BomNo));
  45. predicate.AndIF(!string.IsNullOrEmpty(parm.DeliverNo), d => d.DeliverNo.Contains(parm.DeliverNo));
  46. predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialCode), d => d.MaterialCode.Contains(parm.MaterialCode));
  47. predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialName), d => d.MaterialName.Contains(parm.MaterialName));
  48. predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialSpec), d => d.MaterialSpec.Contains(parm.MaterialSpec));
  49. predicate.AndIF(parm.Status != null, d => d.Status == parm.Status);
  50. predicate.AndIF(parm.KeyFlag != null, d => d.KeyFlag == parm.KeyFlag);
  51. predicate.AndIF(!string.IsNullOrEmpty(parm.BnSnCode), d => d.MaterialSpec.Contains(parm.BnSnCode));
  52. //先判断搜索条件中有没有bincode
  53. if (!string.IsNullOrEmpty(parm.BinCode))
  54. {
  55. //把basbin表检索到list
  56. List<BasBin> bins = Context.Queryable<BasBin>().ToList();
  57. //查找包含搜索条件的basbin数据
  58. var newBasBins = bins.FindAll(b=>b.BinCode.Contains(parm.BinCode));
  59. //提取符合条件的basbin,并返回其id
  60. long[] BasBinIds = newBasBins.Select(x => x.BinId).ToArray();
  61. //添加转化完成的检索条件,即符合basbinId的数据
  62. predicate.And(d => BasBinIds.Contains(d.BinId));
  63. }
  64. //搜索条件查询语法参考Sqlsugar
  65. var response = Queryable()
  66. .LeftJoin<BasRegion>((d,region)=>d.RegionId==region.RegionId)
  67. .LeftJoin<BasBin>((d,region, bin) => d.BinId == bin.BinId)
  68. .Where(predicate.ToExpression())
  69. .Select((d,region,bin) => new StkBalanceDtl
  70. {
  71. RegionId = d.RegionId.SelectAll(),
  72. BinId = d.BinId.SelectAll(),
  73. RegionName = region.RegionName,
  74. RegionCode=region.RegionCode,
  75. BinCode = bin.BinCode,
  76. })
  77. .ToPage<StkBalanceDtl, StkBalanceDtlDto>(parm);
  78. return response;
  79. }
  80. /// <summary>
  81. /// 查询库存管理/库存统计列表
  82. /// </summary>
  83. /// <param name="parm"></param>
  84. /// <returns></returns>
  85. public PagedInfo<StkBalanceDtlDto> StatList(StkBalanceDtlQueryDto parm)
  86. {
  87. //开始拼装查询条件
  88. var predicate = Expressionable.Create<StkBalanceDtl>();
  89. predicate.AndIF(parm.RegionId > 0, d => d.RegionId == parm.RegionId);
  90. predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialCode), d => d.MaterialCode.Contains(parm.MaterialCode));
  91. predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialName), d => d.MaterialName.Contains(parm.MaterialName));
  92. predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialSpec), d => d.MaterialSpec.Contains(parm.MaterialSpec));
  93. predicate.AndIF(parm.KeyFlag != null, d => d.KeyFlag == parm.KeyFlag);
  94. predicate.AndIF(!string.IsNullOrEmpty(parm.BnSnCode), d => d.MaterialSpec.Contains(parm.BnSnCode));
  95. //搜索条件查询语法参考Sqlsugar
  96. var response = Queryable()
  97. .GroupBy(d => new { d.MaterialName })
  98. .LeftJoin<BasRegion>((d, region) => d.RegionId == region.RegionId)
  99. .Where(predicate.ToExpression())
  100. .Select((d, region) => new StkBalanceDtl
  101. {
  102. RegionId = d.RegionId.SelectAll(),
  103. RegionName=region.RegionName,
  104. SumQty = SqlFunc.AggregateSum(d.BalanceQty),
  105. })
  106. .ToPage<StkBalanceDtl, StkBalanceDtlDto>(parm);
  107. return response;
  108. }
  109. /// <summary>
  110. /// 添加库存管理/库存明细表
  111. /// </summary>
  112. /// <param name="model"></param>
  113. /// <returns></returns>
  114. public int AddStkBalanceDtl(StkBalanceDtl model)
  115. {
  116. return Add(model, true);
  117. }
  118. /// <summary>
  119. /// 修改库存管理/库存明细表
  120. /// </summary>
  121. /// <param name="model"></param>
  122. /// <returns></returns>
  123. public int UpdateStkBalanceDtl(StkBalanceDtl model)
  124. {
  125. //var response = Update(w => w.BalanceId == model.BalanceId, it => new StkBalanceDtl()
  126. //{
  127. // RegionId = model.RegionId,
  128. // BinId = model.BinId,
  129. // DeliverNo = model.DeliverNo,
  130. // BomNo = model.BomNo,
  131. // MaterialCode = model.MaterialCode,
  132. // MaterialName = model.MaterialName,
  133. // MaterialSpec = model.MaterialSpec,
  134. // Category = model.Category,
  135. // KeyFlag = model.KeyFlag,
  136. // BnSnCode = model.BnSnCode,
  137. // BalanceQty = model.BalanceQty,
  138. // Status = model.Status,
  139. // UpdateBy = model.UpdateBy,
  140. // UpdateTime = model.UpdateTime,
  141. // Remark = model.Remark,
  142. //});
  143. //return response;
  144. return Update(model, true);
  145. }
  146. /// <summary>
  147. /// 清空库存管理/库存明细表
  148. /// </summary>
  149. /// <returns></returns>
  150. public void TruncateStkBalanceDtl()
  151. {
  152. Truncate();
  153. }
  154. #endregion
  155. }
  156. }