林豪 左 4 mēneši atpakaļ
vecāks
revīzija
87cd994db3
1 mainītis faili ar 363 papildinājumiem un 351 dzēšanām
  1. 363 351
      wms.service/Service/FJService.cs

+ 363 - 351
wms.service/Service/FJService.cs

@@ -2396,6 +2396,9 @@ namespace wms.service.Service
                             : mach.NearestWarehouseName
                     });
                     _db.CommitTran();
+                    res.ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode();
+                    res.ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode();
+                    res.Memo1 = sotcks.First().Grade;
                 }
                 catch (Exception ex)
                 {
@@ -2508,6 +2511,7 @@ namespace wms.service.Service
                     };
                     _taskdetailrepository.InsertableSplitTable(taskdetail);
                     res.ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode();
+                    res.ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode(); 
                 }
                 catch (Exception ex)
                 {
@@ -3829,74 +3833,94 @@ namespace wms.service.Service
         public SRes SpoolMaterialInfoTrans(SpoolMaterialInfoTransRequest reqDto)
         {
             var res = new SRes();
-            var dateTime = DateTime.Now.AddHours(-12);
+            try 
+            {
+                var dateTime = DateTime.Now.AddHours(-12);
 
-            #region 超时判断
+                #region 超时判断
 
-            //获取时间
-            var prodate = reqDto.ProductDate.GetDateTime(_logger);
+                //获取时间
+                var prodate = reqDto.ProductDate.GetDateTime(_logger);
 
-            if (prodate < dateTime)
-            {
-                res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
-                res.ResMsg = $"工字轮注册时间为{reqDto.ProductDate},已超过12小时不允许创建自动化上线任务!!!";
-                var error = new BaseErrorInfo
+                if (prodate < dateTime)
                 {
-                    BusName = "湿拉下盘注册",
-                    Message = $"{res.ResMsg},[{DateTime.Now:yyyyMMddHH}]",
-                    Count = 1,
-                    Memo = "WCS"
-                };
-                error.UpdataErrorinfo(_baseErrorInfoRepository);
-                return res;
-            }
+                    res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                    res.ResMsg = $"工字轮注册时间为{reqDto.ProductDate},已超过12小时不允许创建自动化上线任务!!!";
+                    var error = new BaseErrorInfo
+                    {
+                        BusName = "湿拉下盘注册",
+                        Message = $"{res.ResMsg},[{DateTime.Now:yyyyMMddHH}]",
+                        Count = 1,
+                        Memo = "WCS"
+                    };
+                    error.UpdataErrorinfo(_baseErrorInfoRepository);
+                    return res;
+                }
 
-            #endregion
+                #endregion
 
 
-            //清除十二小时小时前的新建数据
-            if (_taskrepository.AsQueryable().With(SqlWith.NoLock).Any(x =>
-                    x.Status == TaskStatus.NewBuild && x.Type == TaskType.SetPlate && x.AddTime < dateTime))
-            {
-                var taskIdList = _taskrepository.AsQueryable().With("WITH(READPAST,ROWLOCK)")
-                    .Where(x => x.Status == TaskStatus.NewBuild && x.Type == TaskType.SetPlate && x.AddTime < dateTime)
-                    .ToList();
-                var ids = taskIdList.Select(x => x.ID).ToList();
-                //有超过十二小时小时的数据,开始清除
-                _taskrepository.Delete(x => ids.Contains(x.ID));
-                _wcstaskoldrepository.UpdateSplitTableModelColumns(x => new WCS_TaskOld
+                //清除十二小时小时前的新建数据
+                if (_taskrepository.AsQueryable().With(SqlWith.NoLock).Any(x =>
+                        x.Status == TaskStatus.NewBuild && x.Type == TaskType.SetPlate && x.AddTime < dateTime))
                 {
-                    Status = TaskStatus.Cancel,
-                    ManualRemarks = "产品超时,自动清除任务"
-                }, x => ids.Contains(x.Id));
-                //清除相关条码、码垛信息
-                var barCodes = taskIdList.Select(x => x.BarCode).ToList();
-                _billSpoolTransrepository.Delete(x => barCodes.Contains(x.ConBarCode));
-                _billInvinitrepository.Delete(x => barCodes.Contains(x.HWBarCode));
-            }
+                    var taskIdList = _taskrepository.AsQueryable().With("WITH(READPAST,ROWLOCK)")
+                        .Where(x => x.Status == TaskStatus.NewBuild && x.Type == TaskType.SetPlate && x.AddTime < dateTime)
+                        .ToList();
+                    var ids = taskIdList.Select(x => x.ID).ToList();
+                    //有超过十二小时小时的数据,开始清除
+                    _taskrepository.Delete(x => ids.Contains(x.ID));
+                    _wcstaskoldrepository.UpdateSplitTableModelColumns(x => new WCS_TaskOld
+                    {
+                        Status = TaskStatus.Cancel,
+                        ManualRemarks = "产品超时,自动清除任务"
+                    }, x => ids.Contains(x.Id));
+                    //清除相关条码、码垛信息
+                    var barCodes = taskIdList.Select(x => x.BarCode).ToList();
+                    _billSpoolTransrepository.Delete(x => barCodes.Contains(x.ConBarCode));
+                    _billInvinitrepository.Delete(x => barCodes.Contains(x.HWBarCode));
+                }
 
 
-            //容器
-            var container = _baseContinfo.GetSingle(p => p.ContBarCode == reqDto.SpoolCode);
-            if (container == null)
-            {
-                var insertcon = new BaseContinfo
+                //容器
+                var container = _baseContinfo.GetSingle(p => p.ContBarCode == reqDto.SpoolCode);
+                if (container == null)
                 {
-                    ContBarCode = reqDto.SpoolCode,
-                    Name = reqDto.SpoolCode,
-                    TypeCode = ContainerType.ContainerType_Spool.ToString(),
-                    PrintQty = 1,
-                    IsStop = 0,
-                    WarehouseId = 0,
-                    WeightQty = 0,
-                    AddWho = "wms",
-                    AddTime = DateTime.Now
-                };
-                //新加载具信息
-                if (!_baseContinfo.Insert(insertcon))
+                    var insertcon = new BaseContinfo
+                    {
+                        ContBarCode = reqDto.SpoolCode,
+                        Name = reqDto.SpoolCode,
+                        TypeCode = ContainerType.ContainerType_Spool.ToString(),
+                        PrintQty = 1,
+                        IsStop = 0,
+                        WarehouseId = 0,
+                        WeightQty = 0,
+                        AddWho = "wms",
+                        AddTime = DateTime.Now
+                    };
+                    //新加载具信息
+                    if (!_baseContinfo.Insert(insertcon))
+                    {
+                        res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
+                        res.ResMsg = "工字轮载具初始化失败";
+                        var error = new BaseErrorInfo
+                        {
+                            BusName = "湿拉下盘注册",
+                            Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
+                            Count = 1,
+                            Memo = "WCS"
+                        };
+                        error.UpdataErrorinfo(_baseErrorInfoRepository);
+                        return res;
+                    }
+                }
+
+                //物料
+                var mater = _basematerrepository.GetSingle(p => p.Code == reqDto.MatCode);
+                if (mater == null)
                 {
-                    res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
-                    res.ResMsg = "工字轮载具初始化失败";
+                    res.ResCode = ResponseStatusCodeEnum.MaterInfoNotExist.GetHashCode();
+                    res.ResMsg = ResponseStatusCodeEnum.MaterInfoNotExist.GetDescription();
                     var error = new BaseErrorInfo
                     {
                         BusName = "湿拉下盘注册",
@@ -3907,161 +3931,143 @@ namespace wms.service.Service
                     error.UpdataErrorinfo(_baseErrorInfoRepository);
                     return res;
                 }
-            }
 
-            //物料
-            var mater = _basematerrepository.GetSingle(p => p.Code == reqDto.MatCode);
-            if (mater == null)
-            {
-                res.ResCode = ResponseStatusCodeEnum.MaterInfoNotExist.GetHashCode();
-                res.ResMsg = ResponseStatusCodeEnum.MaterInfoNotExist.GetDescription();
-                var error = new BaseErrorInfo
+                //码垛工字轮
+                var billSpoolTrans = new BillSpoolTrans();
+                billSpoolTrans.ConBarCode = reqDto.SpoolCode;
+                billSpoolTrans.BillCode = reqDto.BillCode;
+                billSpoolTrans.WorkOrder = reqDto.WorkOrder;
+                billSpoolTrans.MatCode = reqDto.MatCode;
+                billSpoolTrans.WarehouseCode = "";
+                billSpoolTrans.WarehouseSort = 0;
+                billSpoolTrans.LocSort = 0;
+                billSpoolTrans.ConveyorSort = 0;
+                billSpoolTrans.Direct = "";
+                billSpoolTrans.ErrType = 0;
+                billSpoolTrans.AddTime = DateTime.Now;
+                billSpoolTrans.EditTime = DateTime.Now;
+                billSpoolTrans.AddWho = "wms";
+                billSpoolTrans.EditWho = "wms";
+                //库存
+                var stock = _billInvnowrepository.GetSingle(p => p.HWBarCode == reqDto.SpoolCode);
+                if (stock != null && stock.InvStateCode == InvState.InvEcecState_In.ToString())
                 {
-                    BusName = "湿拉下盘注册",
-                    Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
-                    Count = 1,
-                    Memo = "WCS"
-                };
-                error.UpdataErrorinfo(_baseErrorInfoRepository);
-                return res;
-            }
-
-            //码垛工字轮
-            var billSpoolTrans = new BillSpoolTrans();
-            billSpoolTrans.ConBarCode = reqDto.SpoolCode;
-            billSpoolTrans.BillCode = reqDto.BillCode;
-            billSpoolTrans.WorkOrder = reqDto.WorkOrder;
-            billSpoolTrans.MatCode = reqDto.MatCode;
-            billSpoolTrans.WarehouseCode = "";
-            billSpoolTrans.WarehouseSort = 0;
-            billSpoolTrans.LocSort = 0;
-            billSpoolTrans.ConveyorSort = 0;
-            billSpoolTrans.Direct = "";
-            billSpoolTrans.ErrType = 0;
-            billSpoolTrans.AddTime = DateTime.Now;
-            billSpoolTrans.EditTime = DateTime.Now;
-            billSpoolTrans.AddWho = "wms";
-            billSpoolTrans.EditWho = "wms";
-            //库存
-            var stock = _billInvnowrepository.GetSingle(p => p.HWBarCode == reqDto.SpoolCode);
-            if (stock != null && stock.InvStateCode == InvState.InvEcecState_In.ToString())
-            {
-                res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
-                res.ResMsg = "该工字轮条码号已在库中,请检查RFID号是否重复";
-                return res;
-            }
+                    res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                    res.ResMsg = "该工字轮条码号已在库中,请检查RFID号是否重复";
+                    return res;
+                }
 
-            if (stock != null && stock.InvStateCode == InvState.InvEcecState_OutGoing.ToString())
-            {
-                res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
-                res.ResMsg = "该工字轮条码号存在出库中任务,请检查上一个任务是否已经完成";
-                var error = new BaseErrorInfo
+                if (stock != null && stock.InvStateCode == InvState.InvEcecState_OutGoing.ToString())
                 {
-                    BusName = "湿拉下盘注册",
-                    Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
-                    Count = 1,
-                    Memo = "WCS"
-                };
-                error.UpdataErrorinfo(_baseErrorInfoRepository);
-                return res;
-            }
+                    res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                    res.ResMsg = "该工字轮条码号存在出库中任务,请检查上一个任务是否已经完成";
+                    var error = new BaseErrorInfo
+                    {
+                        BusName = "湿拉下盘注册",
+                        Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
+                        Count = 1,
+                        Memo = "WCS"
+                    };
+                    error.UpdataErrorinfo(_baseErrorInfoRepository);
+                    return res;
+                }
 
-            //工字轮需要用到的托盘类型
-            var fJPalletType = FJPalletType.Pallet09;
-            if (reqDto.SpoolType != "WS09") fJPalletType = FJPalletType.PalletNo09;
+                //工字轮需要用到的托盘类型
+                var fJPalletType = FJPalletType.Pallet09;
+                if (reqDto.SpoolType != "WS09") fJPalletType = FJPalletType.PalletNo09;
 
-            //通过订单找到对应的机台信息
-            //通过投入物料找到垛型编码
-            var stackdetail = _billBomsetinfoRepository.GetFirst(p => p.MatCode == reqDto.MatCode && p.IsStop == 0);
-            if (stackdetail == null)
-            {
-                _logger.LogInformation(reqDto.SpoolCode + "没有对应的垛型信息,物料编码" + reqDto.MatCode);
-                _billInvinitrepository.Delete(x => x.ContGrpBarCode == billSpoolTrans.ConBarCode);
-                _billSpoolTransrepository.Delete(x => x.ConBarCode == billSpoolTrans.ConBarCode);
-                _logger.LogInformation($"找不到垛形信息时删除缓存信息{billSpoolTrans.ConBarCode}");
-                var task = _taskrepository.GetSingle(x => x.BarCode == billSpoolTrans.ConBarCode);
-                if (task != null)
+                //通过订单找到对应的机台信息
+                //通过投入物料找到垛型编码
+                var stackdetail = _billBomsetinfoRepository.GetFirst(p => p.MatCode == reqDto.MatCode && p.IsStop == 0);
+                if (stackdetail == null)
                 {
-                    //删除当前任务与更新历史任务
-                    _taskrepository.Delete(x => x.ID == task.ID);
-                    _wcstaskoldrepository.UpdateSplitTableModelColumns(x => new WCS_TaskOld
+                    _logger.LogInformation(reqDto.SpoolCode + "没有对应的垛型信息,物料编码" + reqDto.MatCode);
+                    _billInvinitrepository.Delete(x => x.ContGrpBarCode == billSpoolTrans.ConBarCode);
+                    _billSpoolTransrepository.Delete(x => x.ConBarCode == billSpoolTrans.ConBarCode);
+                    _logger.LogInformation($"找不到垛形信息时删除缓存信息{billSpoolTrans.ConBarCode}");
+                    var task = _taskrepository.GetSingle(x => x.BarCode == billSpoolTrans.ConBarCode);
+                    if (task != null)
                     {
-                        Status = TaskStatus.Cancel,
-                        ManualRemarks = "产品重新投放,自动覆盖历史信息"
-                    }, x => x.Id == task.ID);
+                        //删除当前任务与更新历史任务
+                        _taskrepository.Delete(x => x.ID == task.ID);
+                        _wcstaskoldrepository.UpdateSplitTableModelColumns(x => new WCS_TaskOld
+                        {
+                            Status = TaskStatus.Cancel,
+                            ManualRemarks = "产品重新投放,自动覆盖历史信息"
+                        }, x => x.Id == task.ID);
+                    }
+
+                    res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                    res.ResMsg = reqDto.SpoolCode + "没有对应的垛型信息,物料编码" + reqDto.MatCode;
+                    var error = new BaseErrorInfo
+                    {
+                        BusName = "湿拉下盘注册",
+                        Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
+                        Count = 1,
+                        Memo = "WCS"
+                    };
+                    error.UpdataErrorinfo(_baseErrorInfoRepository);
+                    return res;
                 }
 
-                res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
-                res.ResMsg = reqDto.SpoolCode + "没有对应的垛型信息,物料编码" + reqDto.MatCode;
-                var error = new BaseErrorInfo
+                //机台垛型编码
+                var stack = _BillBomsetgrpRepository.GetSingle(p => p.Id == stackdetail.BomSetHdrId && p.IsStop == 0);
+                var macList = _basemachinforepository.GetList(p => stack.Code == p.SetGrpCode); //找到垛型对应的机台信息
+                                                                                                //查询出来的垛型没有对应的机台,开始尝试通过产出匹配机台(适配同产出配多个垛型的情况)
+                if (macList.Count <= 0)
                 {
-                    BusName = "湿拉下盘注册",
-                    Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
-                    Count = 1,
-                    Memo = "WCS"
-                };
-                error.UpdataErrorinfo(_baseErrorInfoRepository);
-                return res;
-            }
-
-            //机台垛型编码
-            var stack = _BillBomsetgrpRepository.GetSingle(p => p.Id == stackdetail.BomSetHdrId && p.IsStop == 0);
-            var macList = _basemachinforepository.GetList(p => stack.Code == p.SetGrpCode); //找到垛型对应的机台信息
-            //查询出来的垛型没有对应的机台,开始尝试通过产出匹配机台(适配同产出配多个垛型的情况)
-            if (macList.Count <= 0)
-            {
-                //查出当前这个垛型同产出对应的所有启用垛型
-                var stacks =
-                    _BillBomsetgrpRepository.GetList(p => p.ProMaterCode == stack.ProMaterCode && p.IsStop == 0);
-                var stackCodes = stacks.Select(x => x.Code).ToList();
-                macList = _basemachinforepository.GetList(p => stackCodes.Contains(p.SetGrpCode));
-            }
+                    //查出当前这个垛型同产出对应的所有启用垛型
+                    var stacks =
+                        _BillBomsetgrpRepository.GetList(p => p.ProMaterCode == stack.ProMaterCode && p.IsStop == 0);
+                    var stackCodes = stacks.Select(x => x.Code).ToList();
+                    macList = _basemachinforepository.GetList(p => stackCodes.Contains(p.SetGrpCode));
+                }
 
-            //查询机台
-            var wareList = macList.Where(x => !x.WarehouseCode.IsNullOrEmpty()).Select(p => p.WarehouseCode).Distinct()
-                .OrderBy(v => v); //找到机台对应的仓库信息
-            if (!wareList.Any()) //当前订单没有对应仓库信息
-            {
-                res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
-                res.ResMsg =  $"条码:[{reqDto.SpoolCode}]对应的垛型[{stack.Code}]没有配置机台信息";
-                var error = new BaseErrorInfo
+                //查询机台
+                var wareList = macList.Where(x => !x.WarehouseCode.IsNullOrEmpty()).Select(p => p.WarehouseCode).Distinct()
+                    .OrderBy(v => v); //找到机台对应的仓库信息
+                if (!wareList.Any()) //当前订单没有对应仓库信息
                 {
-                    BusName = "湿拉下盘注册",
-                    Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
-                    Count = 1,
-                    Memo = "WCS"
-                };
-                error.UpdataErrorinfo(_baseErrorInfoRepository);
-                return res;
-            }
-
-            if (wareList.Count() == 1) //当前订单对应一个仓库信息
-            {
-                var sort = int.Parse(wareList.First().Substring(0, 1));
+                    res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                    res.ResMsg = $"条码:[{reqDto.SpoolCode}]对应的垛型[{stack.Code}]没有配置机台信息";
+                    var error = new BaseErrorInfo
+                    {
+                        BusName = "湿拉下盘注册",
+                        Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
+                        Count = 1,
+                        Memo = "WCS"
+                    };
+                    error.UpdataErrorinfo(_baseErrorInfoRepository);
+                    return res;
+                }
 
-                _billSpoolTransrepository.UpdateModelColumns(p => new BillSpoolTrans
+                if (wareList.Count() == 1) //当前订单对应一个仓库信息
                 {
-                    WarehouseCode = wareList.First(),
-                    WarehouseSort = sort,
-                    Direct = wareList.First().Substring(1, 1),
-                    EditTime = DateTime.Now
-                }, p => p.ConBarCode == billSpoolTrans.ConBarCode);
-                billSpoolTrans.WarehouseCode = wareList.First();
-                billSpoolTrans.WarehouseSort = sort;
-                billSpoolTrans.Direct = wareList.First().Substring(1, 1);
-            }
-            else //当前订单对应多个仓库信息
-            {
-                //先计算出当前物料在各仓库中应该的占比
-                var wareTempList = macList.Where(x => !x.WarehouseCode.IsNullOrEmpty())
-                    .Select(p => new { p.WarehouseCode }).Distinct();
-                var vaule=_sysconfigrepository.GetSingle(x => x.Code == "EqualDistributionTimeRange");
-                var equalDistributionTimeRange = Convert.ToInt32(vaule.SContent);
-                equalDistributionTimeRange=Math.Abs(equalDistributionTimeRange);
-                var statTime = DateTime.Now.AddHours(-equalDistributionTimeRange);
-                var warehouseGoods = _billSpoolTransrepository
-                    .GetList(s => s.MatCode == reqDto.MatCode && s.AddTime > statTime).ToList();
-                var specificGravity = wareTempList.Select(x =>
+                    var sort = int.Parse(wareList.First().Substring(0, 1));
+
+                    _billSpoolTransrepository.UpdateModelColumns(p => new BillSpoolTrans
+                    {
+                        WarehouseCode = wareList.First(),
+                        WarehouseSort = sort,
+                        Direct = wareList.First().Substring(1, 1),
+                        EditTime = DateTime.Now
+                    }, p => p.ConBarCode == billSpoolTrans.ConBarCode);
+                    billSpoolTrans.WarehouseCode = wareList.First();
+                    billSpoolTrans.WarehouseSort = sort;
+                    billSpoolTrans.Direct = wareList.First().Substring(1, 1);
+                }
+                else //当前订单对应多个仓库信息
+                {
+                    //先计算出当前物料在各仓库中应该的占比
+                    var wareTempList = macList.Where(x => !x.WarehouseCode.IsNullOrEmpty())
+                        .Select(p => new { p.WarehouseCode }).Distinct();
+                    var vaule = _sysconfigrepository.GetSingle(x => x.Code == "EqualDistributionTimeRange");
+                    var equalDistributionTimeRange = Convert.ToDecimal(vaule.SContent);
+                    equalDistributionTimeRange = Math.Abs(equalDistributionTimeRange);
+                    var statTime = DateTime.Now.AddHours(-Convert.ToInt32(equalDistributionTimeRange));
+                    var warehouseGoods = _billSpoolTransrepository
+                        .GetList(s => s.MatCode == reqDto.MatCode && s.AddTime > statTime).ToList();
+                    var specificGravity = wareTempList.Select(x =>
                     {
                         decimal currentWarehouseGoodsSum = warehouseGoods.Count(s =>
                             s.MatCode == reqDto.MatCode && s.WarehouseCode == x.WarehouseCode);
@@ -4089,146 +4095,180 @@ namespace wms.service.Service
                             Direct = x.WarehouseCode.Substring(1, 1)
                         };
                     }).OrderByDescending(x => x.ProportionGap) //比差越大应当越优先送过去
-                    .ThenByDescending(x => x.SpecificGravity); //在各库已有货物实际占比达到预期值时按照预期占比最多的优先分配
-
-                _logger.LogInformation($"SpoolMaterialInfoTrans:{JsonConvert.SerializeObject(specificGravity)}");
-                var sort = int.Parse(wareList.First().Substring(0, 1));
-                _billSpoolTransrepository.UpdateModelColumns(p => new BillSpoolTrans
-                {
-                    WarehouseCode = specificGravity.FirstOrDefault().WarehouseCode,
-                    WarehouseSort = sort,
-                    Direct = specificGravity.FirstOrDefault().Direct,
-                    EditTime = DateTime.Now
-                }, p => p.ConBarCode == billSpoolTrans.ConBarCode);
-                billSpoolTrans.WarehouseCode = specificGravity.FirstOrDefault().WarehouseCode;
-                billSpoolTrans.WarehouseSort = sort;
-                billSpoolTrans.Direct = specificGravity.FirstOrDefault().Direct;
-            }
+                        .ThenByDescending(x => x.SpecificGravity); //在各库已有货物实际占比达到预期值时按照预期占比最多的优先分配
 
-            var promat = _basematerrepository.GetSingle(p => p.Code == stack.ProMaterCode);
-            //创建条码
-            var wareHosue = _basewarehouserepository.GetSingle(p => p.Code == billSpoolTrans.WarehouseCode);
-            //检查条码
-            var barInfo = _billInvinitrepository.GetFirst(p => p.HWBarCode == reqDto.SpoolCode);
-            var gra = "";
-            if (reqDto.Grade != null && !string.IsNullOrEmpty(reqDto.Grade)) gra = reqDto.Grade;
-            if (barInfo == null) //当前条码无残留信息
-            {
-                var barinfo = InitInvinitInfo(reqDto, wareHosue, stack, mater, promat, fJPalletType);
+                    _logger.LogInformation($"SpoolMaterialInfoTrans:{JsonConvert.SerializeObject(specificGravity)}");
+                    var sort = int.Parse(wareList.First().Substring(0, 1));
+                    _billSpoolTransrepository.UpdateModelColumns(p => new BillSpoolTrans
+                    {
+                        WarehouseCode = specificGravity.FirstOrDefault().WarehouseCode,
+                        WarehouseSort = sort,
+                        Direct = specificGravity.FirstOrDefault().Direct,
+                        EditTime = DateTime.Now
+                    }, p => p.ConBarCode == billSpoolTrans.ConBarCode);
+                    billSpoolTrans.WarehouseCode = specificGravity.FirstOrDefault().WarehouseCode;
+                    billSpoolTrans.WarehouseSort = sort;
+                    billSpoolTrans.Direct = specificGravity.FirstOrDefault().Direct;
+                }
 
-                try
+                var promat = _basematerrepository.GetSingle(p => p.Code == stack.ProMaterCode);
+                //创建条码
+                var wareHosue = _basewarehouserepository.GetSingle(p => p.Code == billSpoolTrans.WarehouseCode);
+                //检查条码
+                var barInfo = _billInvinitrepository.GetFirst(p => p.HWBarCode == reqDto.SpoolCode);
+                var gra = "";
+                if (reqDto.Grade != null && !string.IsNullOrEmpty(reqDto.Grade)) gra = reqDto.Grade;
+                if (barInfo == null) //当前条码无残留信息
                 {
-                    _db.BeginTran();
-                    _billInvinitrepository.InsertReturnEntity(barinfo);
-                    _billSpoolTransrepository.InsertReturnEntity(billSpoolTrans);
-                    //删除因异常导致残留的对应库存信息
-                    _billInvnowrepository.Delete(x =>
-                        x.ContGrpBarCode == billSpoolTrans.ConBarCode || x.HWBarCode == billSpoolTrans.ConBarCode);
+                    var barinfo = InitInvinitInfo(reqDto, wareHosue, stack, mater, promat, fJPalletType);
 
-                    //开始生成WCS
-                    var createStockInWcsTaskReqest = new FJCreateStockInWcsTaskRequest
+                    try
                     {
-                        BusType = FJTaskBusType.二楼组盘.GetDescription(),
-                        ContGrpBarCode = reqDto.SpoolCode,
-                        Qty = 1,
-                        WarehouseCode = billSpoolTrans.WarehouseCode,
-                        Floor = 2,
-                        MatCode = billSpoolTrans.MatCode,
-                        EquCode = "Robot",
-                        Type = TaskType.SetPlate,
-                        DocCode = billSpoolTrans.WorkOrder,
-                        WorkBench = reqDto.WbCode
-                    };
+                        _db.BeginTran();
+                        _billInvinitrepository.InsertReturnEntity(barinfo);
+                        _billSpoolTransrepository.InsertReturnEntity(billSpoolTrans);
+                        //删除因异常导致残留的对应库存信息
+                        _billInvnowrepository.Delete(x =>
+                            x.ContGrpBarCode == billSpoolTrans.ConBarCode || x.HWBarCode == billSpoolTrans.ConBarCode);
 
-                    //下发wcs任务 - 分解方法
-                    var taskRes = CreateStockInWcsTask(createStockInWcsTaskReqest, gra, true);
-                    if (taskRes.ResCode != 200)
-                    {
-                        _db.RollbackTran();
-                        res.ResCode = taskRes.ResCode;
-                        res.ResMsg = taskRes.ResMsg;
-                        var error = new BaseErrorInfo
+                        //开始生成WCS
+                        var createStockInWcsTaskReqest = new FJCreateStockInWcsTaskRequest
                         {
-                            BusName = "湿拉下盘注册",
-                            Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
-                            Count = 1,
-                            Memo = "WCS"
+                            BusType = FJTaskBusType.二楼组盘.GetDescription(),
+                            ContGrpBarCode = reqDto.SpoolCode,
+                            Qty = 1,
+                            WarehouseCode = billSpoolTrans.WarehouseCode,
+                            Floor = 2,
+                            MatCode = billSpoolTrans.MatCode,
+                            EquCode = "Robot",
+                            Type = TaskType.SetPlate,
+                            DocCode = billSpoolTrans.WorkOrder,
+                            WorkBench = reqDto.WbCode
                         };
-                        error.UpdataErrorinfo(_baseErrorInfoRepository);
-                        return res;
-                    }
 
-                    _db.CommitTran();
-                    RedisHelper.Set($"AllocationWarehouseSort:{reqDto.SpoolCode}", JsonConvert.SerializeObject(
-                        new MainlineDiversion
+                        //下发wcs任务 - 分解方法
+                        var taskRes = CreateStockInWcsTask(createStockInWcsTaskReqest, gra, true);
+                        if (taskRes.ResCode != 200)
                         {
-                            TaskId = taskRes.ResData.ID,
-                            WarehouseCode = billSpoolTrans.WarehouseCode
-                        }));
-                }
-                catch (Exception ex)
-                {
-                    _db.RollbackTran();
-                    res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
-                    res.ResMsg = ex.StackTrace;
+                            _db.RollbackTran();
+                            res.ResCode = taskRes.ResCode;
+                            res.ResMsg = taskRes.ResMsg;
+                            var error = new BaseErrorInfo
+                            {
+                                BusName = "湿拉下盘注册",
+                                Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
+                                Count = 1,
+                                Memo = "WCS"
+                            };
+                            error.UpdataErrorinfo(_baseErrorInfoRepository);
+                            return res;
+                        }
+
+                        _db.CommitTran();
+                        RedisHelper.Set($"AllocationWarehouseSort:{reqDto.SpoolCode}", JsonConvert.SerializeObject(
+                            new MainlineDiversion
+                            {
+                                TaskId = taskRes.ResData.ID,
+                                WarehouseCode = billSpoolTrans.WarehouseCode
+                            }));
+                    }
+                    catch (Exception ex)
+                    {
+                        _db.RollbackTran();
+                        res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                        res.ResMsg = ex.StackTrace;
+                    }
                 }
-            }
-            else //有残留条码信息更新
-            {
-                try
+                else //有残留条码信息更新
                 {
-                    //开始生成WCS
-                    var createStockInWcsTaskReqest = new FJCreateStockInWcsTaskRequest
+                    try
                     {
-                        BusType = FJTaskBusType.二楼组盘.GetDescription(),
-                        ContGrpBarCode = reqDto.SpoolCode,
-                        Qty = 1,
-                        WarehouseCode = billSpoolTrans.WarehouseCode,
-                        Floor = 2,
-                        MatCode = billSpoolTrans.MatCode,
-                        EquCode = "Robot",
-                        Type = TaskType.SetPlate,
-                        DocCode = billSpoolTrans.WorkOrder,
-                        WorkBench = reqDto.WbCode
-                    };
-                    var barinfo = InitInvinitInfo(reqDto, wareHosue, stack, mater, promat, fJPalletType);
+                        //开始生成WCS
+                        var createStockInWcsTaskReqest = new FJCreateStockInWcsTaskRequest
+                        {
+                            BusType = FJTaskBusType.二楼组盘.GetDescription(),
+                            ContGrpBarCode = reqDto.SpoolCode,
+                            Qty = 1,
+                            WarehouseCode = billSpoolTrans.WarehouseCode,
+                            Floor = 2,
+                            MatCode = billSpoolTrans.MatCode,
+                            EquCode = "Robot",
+                            Type = TaskType.SetPlate,
+                            DocCode = billSpoolTrans.WorkOrder,
+                            WorkBench = reqDto.WbCode
+                        };
+                        var barinfo = InitInvinitInfo(reqDto, wareHosue, stack, mater, promat, fJPalletType);
 
-                    _db.BeginTran();
-                    //更新条码信息
-                    _billInvinitrepository.Delete(x => x.Id == barInfo.Id);
-                    _billInvinitrepository.InsertReturnEntity(barinfo);
-                    //更新码垛信息
-                    _billSpoolTransrepository.UpdateModelColumns(x => new BillSpoolTrans
-                    {
-                        ConBarCode = reqDto.SpoolCode,
-                        BillCode = reqDto.BillCode,
-                        WorkOrder = reqDto.WorkOrder,
-                        MatCode = reqDto.MatCode,
-                        WarehouseCode = billSpoolTrans.WarehouseCode,
-                        WarehouseSort = billSpoolTrans.WarehouseSort,
-                        LocSort = 0,
-                        ConveyorSort = 0,
-                        Direct = billSpoolTrans.Direct,
-                        ErrType = 0,
-                        EditTime = DateTime.Now,
-                        EditWho = "wms"
-                    }, x => x.ConBarCode == billSpoolTrans.ConBarCode);
-                    if (!_billSpoolTransrepository.GetList(x => x.ConBarCode == billSpoolTrans.ConBarCode).Any())
-                        _billSpoolTransrepository.InsertReturnEntity(billSpoolTrans);
-                    //删除对应的库存信息
-                    _billInvnowrepository.Delete(x =>
-                        x.ContGrpBarCode == billSpoolTrans.ConBarCode || x.HWBarCode == billSpoolTrans.ConBarCode);
+                        _db.BeginTran();
+                        //更新条码信息
+                        _billInvinitrepository.Delete(x => x.Id == barInfo.Id);
+                        _billInvinitrepository.InsertReturnEntity(barinfo);
+                        //更新码垛信息
+                        _billSpoolTransrepository.UpdateModelColumns(x => new BillSpoolTrans
+                        {
+                            ConBarCode = reqDto.SpoolCode,
+                            BillCode = reqDto.BillCode,
+                            WorkOrder = reqDto.WorkOrder,
+                            MatCode = reqDto.MatCode,
+                            WarehouseCode = billSpoolTrans.WarehouseCode,
+                            WarehouseSort = billSpoolTrans.WarehouseSort,
+                            LocSort = 0,
+                            ConveyorSort = 0,
+                            Direct = billSpoolTrans.Direct,
+                            ErrType = 0,
+                            EditTime = DateTime.Now,
+                            EditWho = "wms"
+                        }, x => x.ConBarCode == billSpoolTrans.ConBarCode);
+                        if (!_billSpoolTransrepository.GetList(x => x.ConBarCode == billSpoolTrans.ConBarCode).Any())
+                            _billSpoolTransrepository.InsertReturnEntity(billSpoolTrans);
+                        //删除对应的库存信息
+                        _billInvnowrepository.Delete(x =>
+                            x.ContGrpBarCode == billSpoolTrans.ConBarCode || x.HWBarCode == billSpoolTrans.ConBarCode);
+
+                        var taskIdList = _taskrepository.AsQueryable().With(SqlWith.NoLock)
+                            .Where(x => x.BarCode == billSpoolTrans.ConBarCode).Select(x => x.ID).ToList();
+
+                        //下发wcs任务 - 分解方法
+                        var taskRes = CreateStockInWcsTask(createStockInWcsTaskReqest, gra, true);
+                        if (taskRes.ResCode != 200)
+                        {
+                            _db.RollbackTran();
+                            res.ResCode = taskRes.ResCode;
+                            res.ResMsg = taskRes.ResMsg;
+                            var error = new BaseErrorInfo
+                            {
+                                BusName = "湿拉下盘注册",
+                                Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
+                                Count = 1,
+                                Memo = "WCS"
+                            };
+                            error.UpdataErrorinfo(_baseErrorInfoRepository);
+                            return res;
+                        }
 
-                    var taskIdList = _taskrepository.AsQueryable().With(SqlWith.NoLock)
-                        .Where(x => x.BarCode == billSpoolTrans.ConBarCode).Select(x => x.ID).ToList();
+                        if (taskIdList != null)
+                        {
+                            //删除当前任务与更新历史任务
+                            _taskrepository.Delete(x => taskIdList.Contains(x.ID));
+                            _wcstaskoldrepository.UpdateSplitTableModelColumns(x => new WCS_TaskOld
+                            {
+                                Status = TaskStatus.Cancel,
+                                ManualRemarks = "产品重新投放,自动覆盖历史信息"
+                            }, x => taskIdList.Contains(x.Id));
+                        }
 
-                    //下发wcs任务 - 分解方法
-                    var taskRes = CreateStockInWcsTask(createStockInWcsTaskReqest, gra, true);
-                    if (taskRes.ResCode != 200)
+                        _db.CommitTran();
+                        //RedisHelper.Set($"AllocationWarehouseSort:{reqDto.SpoolCode}", JsonConvert.SerializeObject(new MainlineDiversion
+                        //{
+                        //    TaskId = taskRes.ResData.ID,
+                        //    WarehouseCode = billSpoolTrans.WarehouseCode
+                        //}));
+                    }
+                    catch (Exception ex)
                     {
                         _db.RollbackTran();
-                        res.ResCode = taskRes.ResCode;
-                        res.ResMsg = taskRes.ResMsg;
+                        res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                        res.ResMsg = ex.StackTrace;
                         var error = new BaseErrorInfo
                         {
                             BusName = "湿拉下盘注册",
@@ -4237,42 +4277,14 @@ namespace wms.service.Service
                             Memo = "WCS"
                         };
                         error.UpdataErrorinfo(_baseErrorInfoRepository);
-                        return res;
-                    }
-
-                    if (taskIdList != null)
-                    {
-                        //删除当前任务与更新历史任务
-                        _taskrepository.Delete(x => taskIdList.Contains(x.ID));
-                        _wcstaskoldrepository.UpdateSplitTableModelColumns(x => new WCS_TaskOld
-                        {
-                            Status = TaskStatus.Cancel,
-                            ManualRemarks = "产品重新投放,自动覆盖历史信息"
-                        }, x => taskIdList.Contains(x.Id));
                     }
-
-                    _db.CommitTran();
-                    //RedisHelper.Set($"AllocationWarehouseSort:{reqDto.SpoolCode}", JsonConvert.SerializeObject(new MainlineDiversion
-                    //{
-                    //    TaskId = taskRes.ResData.ID,
-                    //    WarehouseCode = billSpoolTrans.WarehouseCode
-                    //}));
-                }
-                catch (Exception ex)
-                {
-                    _db.RollbackTran();
-                    res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
-                    res.ResMsg = ex.StackTrace;
-                    var error = new BaseErrorInfo
-                    {
-                        BusName = "湿拉下盘注册",
-                        Message = $"{res.ResMsg},{DateTime.Now:yyyyMMddHH}",
-                        Count = 1,
-                        Memo = "WCS"
-                    };
-                    error.UpdataErrorinfo(_baseErrorInfoRepository);
                 }
             }
+            catch (Exception e) 
+            {
+                res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                res.ResMsg = e.StackTrace;
+            }
 
             return res;
         }