BillTimeOutRecordService.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Mapster;
  2. using NPOI.SS.Formula.Functions;
  3. using SqlSugar;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using wms.sqlsugar.model.sx;
  10. using WMS.BZModels;
  11. using WMS.BZModels.Dto.SX.BilltimeoutrecordDtos;
  12. using WMS.BZModels.Models.SX;
  13. using WMS.BZSqlSugar;
  14. using WMS.Info;
  15. using WMS.Util;
  16. namespace WMS.BZServices.SX
  17. {
  18. public class BillTimeOutRecordService
  19. {
  20. private readonly Repository<BillTimeOutRecord> _billTimeOutRecordRepository;
  21. private readonly Repository<BillInvnow> _billInvnowrepository;
  22. public BillTimeOutRecordService(Repository<BillTimeOutRecord> billTimeOutRecordRepository, Repository<BillInvnow> billInvnowrepository)
  23. {
  24. _billTimeOutRecordRepository = billTimeOutRecordRepository;
  25. _billInvnowrepository = billInvnowrepository;
  26. }
  27. public PagedInfo<BillTimeOutRecordReportDto> GetReportPageList(Pagination pagination, BillTimeOutRecordQueryDto BillTimeOutRecordQueryDto)
  28. {
  29. ISugarQueryable<BillTimeOutRecord> billTimeOutRecordQuery = GetQueryable(BillTimeOutRecordQueryDto);
  30. var invnowQuery = _billInvnowrepository.Queryable().With(SqlWith.NoLock);
  31. var lists = billTimeOutRecordQuery.LeftJoin(invnowQuery, (billTimeOutRecord, invnow) => billTimeOutRecord.ContGrpBarCode == invnow.ContGrpBarCode)
  32. .Where((billTimeOutRecord, invnow) => invnow.InvStateCode == "InvEcecState_In")
  33. .Where((billTimeOutRecord, invnow) => SqlFunc.DateDiff(DateType.Hour, invnow.ProductTime ,DateTime.Now)>=72 )
  34. .Where((billTimeOutRecord, invnow) => !invnow.InDocsNo.StartsWith("CHA"))
  35. // and DATEDIFF(hour , stock.[ProductTime], GETDATE()) >= 72
  36. .GroupBy((billTimeOutRecord, invnow) => new { billTimeOutRecord.Reason })
  37. .Select((billTimeOutRecord, invnow) => new BillTimeOutRecordReportDto
  38. {
  39. Reason = billTimeOutRecord.Reason,
  40. Qty = SqlFunc.AggregateCount(billTimeOutRecord.Reason)
  41. }).MergeTable().ToPage(pagination);
  42. return lists;
  43. }
  44. private ISugarQueryable<BillTimeOutRecord> GetQueryable(BillTimeOutRecordQueryDto BillTimeOutRecordQueryDto)
  45. {
  46. var predicate = Expressionable.Create<BillTimeOutRecord>();
  47. predicate = predicate.AndIF(!string.IsNullOrEmpty(BillTimeOutRecordQueryDto?.KeyWord), m => m.ContGrpBarCode.Contains(BillTimeOutRecordQueryDto.KeyWord) || m.Reason.Contains(BillTimeOutRecordQueryDto.KeyWord));
  48. predicate = predicate.AndIF(!string.IsNullOrEmpty(BillTimeOutRecordQueryDto?.ContGrpBarCode), m => m.ContGrpBarCode.Contains(BillTimeOutRecordQueryDto.ContGrpBarCode));
  49. predicate = predicate.AndIF(!string.IsNullOrEmpty(BillTimeOutRecordQueryDto?.Reason), m => m.Reason.Contains(BillTimeOutRecordQueryDto.Reason));
  50. predicate = predicate.AndIF(BillTimeOutRecordQueryDto != null && BillTimeOutRecordQueryDto.AddTimeBegin.HasValue, m => m.AddTime >= BillTimeOutRecordQueryDto.AddTimeBegin);
  51. predicate = predicate.AndIF(BillTimeOutRecordQueryDto != null && BillTimeOutRecordQueryDto.AddTimeEnd.HasValue, m => m.AddTime <= BillTimeOutRecordQueryDto.AddTimeEnd);
  52. predicate = predicate.AndIF(BillTimeOutRecordQueryDto != null && BillTimeOutRecordQueryDto.EditTimeBegin.HasValue, m => m.AddTime >= BillTimeOutRecordQueryDto.EditTimeBegin);
  53. predicate = predicate.AndIF(BillTimeOutRecordQueryDto != null && BillTimeOutRecordQueryDto.EditTimeEnd.HasValue, m => m.AddTime <= BillTimeOutRecordQueryDto.EditTimeEnd);
  54. var billTimeOutRecordQuery = _billTimeOutRecordRepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(p => p.Take(3));
  55. if (BillTimeOutRecordQueryDto != null && BillTimeOutRecordQueryDto.AddTimeBegin.HasValue)
  56. {
  57. var endtime = DateTime.Now;
  58. if (BillTimeOutRecordQueryDto.AddTimeEnd.HasValue)
  59. {
  60. endtime = BillTimeOutRecordQueryDto.AddTimeEnd.Value;
  61. }
  62. billTimeOutRecordQuery = _billTimeOutRecordRepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(BillTimeOutRecordQueryDto.AddTimeBegin.Value, endtime);
  63. }
  64. return billTimeOutRecordQuery;
  65. }
  66. public PagedInfo<BillTimeOutRecordDto> GetPageList(Pagination pagination, BillTimeOutRecordQueryDto billTimeOutRecordQueryDto)
  67. {
  68. ISugarQueryable<BillTimeOutRecord> billTimeOutRecordQuery = GetQueryable(billTimeOutRecordQueryDto);
  69. // var lists = billTimeOutRecordQuery.OrderBy(o => o.AddTime, OrderByType.Asc).ToList().Adapt<List<BillTimeOutRecordDto>>();
  70. var invnowQuery = _billInvnowrepository.Queryable().With(SqlWith.NoLock);
  71. var lists = billTimeOutRecordQuery.LeftJoin(invnowQuery, (billTimeOutRecord, invnow) => billTimeOutRecord.ContGrpBarCode == invnow.ContGrpBarCode)
  72. .Where((billTimeOutRecord, invnow) => invnow.InvStateCode == "InvEcecState_In")
  73. .Where((billTimeOutRecord, invnow) => SqlFunc.DateDiff(DateType.Hour, invnow.ProductTime, DateTime.Now) >= 72)
  74. .Where((billTimeOutRecord, invnow) => !invnow.InDocsNo.StartsWith("CHA"))
  75. .Select((billTimeOutRecord, invnow) => billTimeOutRecord).MergeTable()
  76. .ToPage<BillTimeOutRecord, BillTimeOutRecordDto>(pagination);
  77. return lists;
  78. }
  79. }
  80. }