SxPackingHelp.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using Microsoft.Extensions.Logging;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using wms.service.Help.Model;
  6. using wms.service.Service;
  7. using wms.sqlsugar;
  8. using wms.sqlsugar.model.sx;
  9. namespace wms.service.Help
  10. {
  11. /// <summary>
  12. /// 装箱帮助类
  13. /// </summary>
  14. public static class SxPackingHelp
  15. {
  16. /// <summary>
  17. /// 验证预占箱数
  18. /// </summary>
  19. /// <param name="_sysconfing">配置表</param>
  20. /// <param name="_boxrule">箱号表</param>
  21. /// <returns></returns>
  22. public static ValidationResult ValidatePreBoxCount(Repository<sxSysConfig> _sysconfing, Repository<BillPboxrule> _boxrule)
  23. {
  24. var result = new ValidationResult() { IsSuccess = true };
  25. var preBoxConfig = _sysconfing.GetFirst(p => p.Code == "CP_PreBoxNum");
  26. if (preBoxConfig == null)
  27. {
  28. result.IsSuccess = false;
  29. result.Message = "预占箱数配置不存在";
  30. return result;
  31. }
  32. int maxPreBoxCount = int.Parse(preBoxConfig.SContent);
  33. int currentPreBoxCount = _boxrule.Count(p => p.ZXStateCode > 2 && p.PackRule == "CP");
  34. if (currentPreBoxCount > maxPreBoxCount)
  35. {
  36. result.IsSuccess = false;
  37. result.Message = $"预占箱数已经大于设置值 (当前:{currentPreBoxCount}, 最大:{maxPreBoxCount})";
  38. }
  39. return result;
  40. }
  41. /// <summary>
  42. /// 根据装箱规则获取箱号
  43. /// </summary>
  44. /// <param name="packRule">装箱规则</param>
  45. /// <param name="_boxRule">箱号表</param>
  46. /// <returns></returns>
  47. public static List<BillPboxrule> GetAvailableBoxRules(string packRule, Repository<BillPboxrule> _boxRule)
  48. {
  49. return _boxRule.GetList(p =>
  50. p.ZXStateCode == 0 &&
  51. p.PackRule == packRule &&
  52. !string.IsNullOrEmpty(p.Wind) &&
  53. (p.FullCountQty == 72 || p.FullCountQty == 36));
  54. }
  55. /// <summary>
  56. /// 记录装箱超时信息
  57. /// </summary>
  58. /// <param name="contbars">条码</param>
  59. /// <param name="msg">信息</param>
  60. /// <param name="_timeoutrecord">超时记录表</param>
  61. /// <param name="_logger">日志</param>
  62. public static void WreTimeOutRecord(List<string> contbars, string msg, RepositoryTask<BillTimeOutRecord> _timeoutrecord, ILogger<SXService> _logger)
  63. {
  64. try
  65. {
  66. if (contbars.Any())
  67. {
  68. //存在的数据更新,不存在的新增
  69. if (msg.Length > 4900)
  70. {
  71. msg = msg.Substring(0, 4900);
  72. }
  73. _timeoutrecord.AsUpdateable().SetColumns(p => new BillTimeOutRecord() { Reason = msg, EditTime = DateTime.Now }).Where(p => contbars.Contains(p.ContGrpBarCode)).SplitTable(p => p.Take(2)).ExecuteCommand();
  74. var existlist = _timeoutrecord.AsQueryable().SplitTable(p => p.Take(2)).Select(p => p.ContGrpBarCode).Distinct().ToList();
  75. var noexistlist = contbars.Where(p => !existlist.Contains(p)).Distinct().ToList();
  76. List<BillTimeOutRecord> listrec = noexistlist.Select(p => new BillTimeOutRecord() { ContGrpBarCode = p, Reason = msg, AddTime = DateTime.Now, EditTime = DateTime.Now }).ToList();
  77. if (listrec.Any()) _timeoutrecord.Context.Insertable(listrec).SplitTable().ExecuteCommand();
  78. }
  79. }
  80. catch (Exception ex)
  81. {
  82. _logger.LogInformation("记录超时信息异常" + ex.ToString());
  83. }
  84. }
  85. }
  86. }