123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- using Microsoft.Extensions.Logging;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using wms.service.Help.Model;
- using wms.service.Service;
- using wms.sqlsugar;
- using wms.sqlsugar.model.sx;
- namespace wms.service.Help
- {
- /// <summary>
- /// 装箱帮助类
- /// </summary>
- public static class SxPackingHelp
- {
- /// <summary>
- /// 验证预占箱数
- /// </summary>
- /// <param name="_sysconfing">配置表</param>
- /// <param name="_boxrule">箱号表</param>
- /// <returns></returns>
- public static ValidationResult ValidatePreBoxCount(Repository<sxSysConfig> _sysconfing, Repository<BillPboxrule> _boxrule)
- {
- var result = new ValidationResult() { IsSuccess = true };
- var preBoxConfig = _sysconfing.GetFirst(p => p.Code == "CP_PreBoxNum");
- if (preBoxConfig == null)
- {
- result.IsSuccess = false;
- result.Message = "预占箱数配置不存在";
- return result;
- }
- int maxPreBoxCount = int.Parse(preBoxConfig.SContent);
- int currentPreBoxCount = _boxrule.Count(p => p.ZXStateCode > 2 && p.PackRule == "CP");
- if (currentPreBoxCount > maxPreBoxCount)
- {
- result.IsSuccess = false;
- result.Message = $"预占箱数已经大于设置值 (当前:{currentPreBoxCount}, 最大:{maxPreBoxCount})";
- }
- return result;
- }
- /// <summary>
- /// 根据装箱规则获取箱号
- /// </summary>
- /// <param name="packRule">装箱规则</param>
- /// <param name="_boxRule">箱号表</param>
- /// <returns></returns>
- public static List<BillPboxrule> GetAvailableBoxRules(string packRule, Repository<BillPboxrule> _boxRule)
- {
- return _boxRule.GetList(p =>
- p.ZXStateCode == 0 &&
- p.PackRule == packRule &&
- !string.IsNullOrEmpty(p.Wind) &&
- (p.FullCountQty == 72 || p.FullCountQty == 36));
- }
- /// <summary>
- /// 记录装箱超时信息
- /// </summary>
- /// <param name="contbars">条码</param>
- /// <param name="msg">信息</param>
- /// <param name="_timeoutrecord">超时记录表</param>
- /// <param name="_logger">日志</param>
- public static void WreTimeOutRecord(List<string> contbars, string msg, RepositoryTask<BillTimeOutRecord> _timeoutrecord, ILogger<SXService> _logger)
- {
- try
- {
- if (contbars.Any())
- {
- //存在的数据更新,不存在的新增
- if (msg.Length > 4900)
- {
- msg = msg.Substring(0, 4900);
- }
- _timeoutrecord.AsUpdateable().SetColumns(p => new BillTimeOutRecord() { Reason = msg, EditTime = DateTime.Now }).Where(p => contbars.Contains(p.ContGrpBarCode)).SplitTable(p => p.Take(2)).ExecuteCommand();
- var existlist = _timeoutrecord.AsQueryable().SplitTable(p => p.Take(2)).Select(p => p.ContGrpBarCode).Distinct().ToList();
- var noexistlist = contbars.Where(p => !existlist.Contains(p)).Distinct().ToList();
- List<BillTimeOutRecord> listrec = noexistlist.Select(p => new BillTimeOutRecord() { ContGrpBarCode = p, Reason = msg, AddTime = DateTime.Now, EditTime = DateTime.Now }).ToList();
- if (listrec.Any()) _timeoutrecord.Context.Insertable(listrec).SplitTable().ExecuteCommand();
- }
- }
- catch (Exception ex)
- {
- _logger.LogInformation("记录超时信息异常" + ex.ToString());
- }
- }
- }
- }
|