|  | @@ -65,41 +65,7 @@ namespace WCS.Service.Works.SRM
 | 
	
		
			
				|  |  |                  if (srmDevice.Data2.SRMMode != SCMode.远程) return;
 | 
	
		
			
				|  |  |                  if (srmDevice.Data2.SRMStatus != SCRunStatus.空闲) return;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                ////检查标记好的出库任务,并将出库任务下达至堆垛机
 | 
	
		
			
				|  |  | -                DB.Do(db =>
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    //找到两个任务
 | 
	
		
			
				|  |  | -                    var taksLsit = db.Default.Set<WCS_TASK>().Where(v =>
 | 
	
		
			
				|  |  | -                        v.ID == srmDevice.Data.TaskID_1 ||
 | 
	
		
			
				|  |  | -                        v.ID == srmDevice.Data.TaskID_2 && v.STATUS == TaskStatus.堆垛机执行).ToList();
 | 
	
		
			
				|  |  | -                    var itemList = taksLsit.Select(v => v.Create<Task>()).OrderBy(v => v.Col).ToArray();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    if (!taksLsit.Any()) return;
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                        for (var i = 0; i < itemList.Length; i++)
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                            var item = itemList[i];
 | 
	
		
			
				|  |  | -                            item.SRMSTATION = taksLsit.FirstOrDefault(v => v.ID == item.ID)!.SRMSTATION;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                            var fork = srmDevice.GetFork(item, i);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                            switch (fork)
 | 
	
		
			
				|  |  | -                            {
 | 
	
		
			
				|  |  | -                                // 列数较小的放一工位
 | 
	
		
			
				|  |  | -                                case SrmFork.货叉1:
 | 
	
		
			
				|  |  | -                                    obj.WriteTask1(item, (short)itemList.Length);
 | 
	
		
			
				|  |  | -                                    break;
 | 
	
		
			
				|  |  | -                                //列数较大的放二工位
 | 
	
		
			
				|  |  | -                                case SrmFork.货叉2:
 | 
	
		
			
				|  |  | -                                    obj.WriteTask2(item, (short)itemList.Length);
 | 
	
		
			
				|  |  | -                                    break;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                                default:
 | 
	
		
			
				|  |  | -                                    throw new ArgumentOutOfRangeException();
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                });
 | 
	
		
			
				|  |  | +              
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  var isTransfer = new List<WCS_TASK>(); //是否有移库任务
 | 
	
		
			
				|  |  |                  WCS_TASK enterPriority = new(), outPriority = new(); //出入库优先级任务
 | 
	
	
		
			
				|  | @@ -289,8 +255,6 @@ namespace WCS.Service.Works.SRM
 | 
	
		
			
				|  |  |                      srmDevice.Entity.Set("LastOutFloor", floor);
 | 
	
		
			
				|  |  |                      if (enterPriority != null && outPriority != null && enterPriority.Priority > outPriority.Priority) return;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    if (obj.Data.TaskID_1 != 0 || obj.Data.TaskID_2 != 0) return;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |                      //获取当前堆垛机所有的放货点
 | 
	
		
			
				|  |  |                      var list = srmDevice.GetDeliveryPoint();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -331,8 +295,7 @@ namespace WCS.Service.Works.SRM
 | 
	
		
			
				|  |  |                              foreach (var stationDevice in devise)
 | 
	
		
			
				|  |  |                              {
 | 
	
		
			
				|  |  |                                  //放货点是否有货
 | 
	
		
			
				|  |  | -                                if (stationDevice.Data.VoucherNo != stationDevice.Data2.VoucherNo) res = false;
 | 
	
		
			
				|  |  | -                                else if (stationDevice.Data3.Status.HasFlag(StationStatus.运行状态位)) res = false;
 | 
	
		
			
				|  |  | +                                if (stationDevice.Data3.Status.HasFlag(StationStatus.运行状态位)) res = false;
 | 
	
		
			
				|  |  |                                  else if (stationDevice.Data2.Status.HasFlag(IstationStatus.光电状态)) res = false;
 | 
	
		
			
				|  |  |                                  else if (stationDevice.Data2.Request == IstationRequest.堆垛机放货完成请求目标地址) res = false;
 | 
	
		
			
				|  |  |                                  else if (stationDevice.Data2.Tasknum > 10000) res = false;
 | 
	
	
		
			
				|  | @@ -347,7 +310,7 @@ namespace WCS.Service.Works.SRM
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      //堆垛机设备
 | 
	
		
			
				|  |  |                      var srm = srmDevice.Entity.CODE;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +                    var finishTaskList = new List<FinishTaskList<SrmFork, Task>>();
 | 
	
		
			
				|  |  |                      DB.Do(db =>
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  |                          //堆垛机当前是否有正在执行的任务
 | 
	
	
		
			
				|  | @@ -402,8 +365,6 @@ namespace WCS.Service.Works.SRM
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          #endregion 校验两个产品是否为同规格
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                        var finishTaskList = new List<FinishTaskList<SrmFork, Task>>();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |                          for (var i = 0; i < tasks.Length; i++)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  |                              var item = tasks[i];
 | 
	
	
		
			
				|  | @@ -425,6 +386,7 @@ namespace WCS.Service.Works.SRM
 | 
	
		
			
				|  |  |                              var msg = "";
 | 
	
		
			
				|  |  |                              msg = fork == SrmFork.货叉1 ? $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{srmDevice.Data.SLine_1}-{srmDevice.Data.SCol_1}-{srmDevice.Data.SLayer_1}][{srmDevice.Data.ELine_1}][{srmDevice.Data.VoucherNo_1}]" : $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{srmDevice.Data.SLine_2}-{srmDevice.Data.SCol_2}-{srmDevice.Data.SLayer_2}][{srmDevice.Data.ELine_2}][{srmDevice.Data.VoucherNo_2}]";
 | 
	
		
			
				|  |  |                              task.CreateStatusLog(db, msg, this.GetType());
 | 
	
		
			
				|  |  | +                            item.SRMSTATION = task.SRMSTATION;
 | 
	
		
			
				|  |  |                              finishTaskList.Add(new FinishTaskList<SrmFork, Task>(fork, item));
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -450,6 +412,30 @@ namespace WCS.Service.Works.SRM
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                    ////检查标记好的出库任务,并将出库任务下达至堆垛机
 | 
	
		
			
				|  |  | +                    DB.Do(db =>
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        //此处只做标记,表示当前事务已经提交
 | 
	
		
			
				|  |  | +                        foreach (var finish in finishTaskList)
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            var task = db.Default.Set<WCS_TASK>().Find(finish.Station.ID).Create<Task>();
 | 
	
		
			
				|  |  | +                            switch (finish.FinishCode)
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                // 列数较小的放一工位
 | 
	
		
			
				|  |  | +                                case SrmFork.货叉1:
 | 
	
		
			
				|  |  | +                                    obj.WriteTask1(task, (short)finishTaskList.Count);
 | 
	
		
			
				|  |  | +                                    break;
 | 
	
		
			
				|  |  | +                                //列数较大的放二工位
 | 
	
		
			
				|  |  | +                                case SrmFork.货叉2:
 | 
	
		
			
				|  |  | +                                    obj.WriteTask2(task, (short)finishTaskList.Count);
 | 
	
		
			
				|  |  | +                                    break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                default:
 | 
	
		
			
				|  |  | +                                    throw new ArgumentOutOfRangeException();
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                      #endregion 出库
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              });
 | 
	
	
		
			
				|  | @@ -460,4 +446,4 @@ namespace WCS.Service.Works.SRM
 | 
	
		
			
				|  |  |              return dev.Is(DF.SRM);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +}
 |