xiaojiao
4 小时以前 557f02072fa311eefe3123aa44afebac22adc465
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA.Services/Common/GetEmptyLocationAction.cs
@@ -1,4 +1,6 @@
using System;
using NewLife.Serialization;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -6,6 +8,7 @@
using WIDESEA.Core.Utilities;
using WIDESEA.Entity.DomainModels;
using WIDESEA.Services.Repositories;
using WIDESEA_Common.LogEnum;
using WIDESEA_Entity.CustomModels.RGVModel;
using WIDESEA_Services.Services.APIInvoke.RGV;
using static WIDESEA_Entity.CustomModels.RGVModel.RgvDeviceStatusModel;
@@ -18,7 +21,7 @@
        /// ç»™å…¥åº“请求分配货位
        /// </summary>
        /// <returns></returns>
        public static Dt_locationinfo GetEmptyLocationAction()
        public static Dt_locationinfo GetEmptyLocationAction(int? Gznumber = 0)
        {
            List<string> locationId = new List<string>();
            //出库任务
@@ -28,71 +31,101 @@
            //入库任务
            Dt_locationinfo locationinfo = null;
            List<Dt_taskinfo> inboundTask = Dt_taskinfoRepository.Instance.Find(r => r.task_type.Contains("Inbound"));
            List<int> listLayer = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
            //// æ›´æ”¹èŽ·å–è´§ä½çš„ä¿¡æ¯ è¿™é‡Œè¦å†™ä¸€ä¸ªå¾ªçޝ
            //List<Dt_taskinfo> outboundTask_temp = Dt_taskinfoRepository.Instance.Find(x => x.task_tolocationid == "10301" || x.task_endstation == "10301");
            //if (outboundTask_temp != null)
            //{
            //    string temp_layer = "";
            //    foreach (var item in outboundTask_temp)
            //    {
            //    }
            //}
            if (null != inboundTask && inboundTask.Count > 0)
            // å½“传进来的是1 å¤„理入库区的逻辑 å½“传进来的是2处理出库区的逻辑
            if (Gznumber == 1)
            {
                foreach (var item in inboundTask)
                List<Dt_taskinfo> inbound = Dt_taskinfoRepository.Instance.Find(x =>
                x.task_beginstation == "20101"
                );
                foreach (var item in inbound)
                {
                    //如果取货完成,可以分配
                    if (string.IsNullOrEmpty(item.task_bak_2) || !"2".Equals(item.task_bak_2))
                    string[] location = item.task_tolocationid.Split('-');
                    //获取当前有任务的层
                    int layer = int.Parse(location[0]);
                    LogRecord.WriteLog((int)LogEnum.InBound, $"分配任务时,有入库任务需要删除的层:{layer},当前层货位编号:{item.ToJson()},当前现有任务{inbound.ToJson()}");
                    listLayer.Remove(layer);
                }
                List<Dt_taskinfo> outboundTask = Dt_taskinfoRepository.Instance.Find(r => ((r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString())
       && (r.task_state == TaskState.TaskState_RGV_Received.ToString() || r.task_state == TaskState.TaskState_RGV_Finished.ToString()))
   || r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString());
                if (null != outboundTask && outboundTask.Count > 0)
                {
                    List<string> fromStation = outboundTask.Where(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString()).Select(r => r.task_fromlocationid).ToList();
                    fromStation.AddRange(outboundTask.Where(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()).Select(r => r.task_tolocationid).ToList());
                    foreach (var item in fromStation)
                    {
                        string[] location = item.task_tolocationid.Split('-');
                        string[] location = item.Split('-');
                        //获取当前有任务的层
                        int layer = int.Parse(location[0]);
                        LogRecord.WriteLog((int)LogEnum.InBound, $"分配任务时,有入库任务需要删除的层:{layer},当前层货位编号:{item.ToJson()},当前现有任务{outboundTask.ToJson()}");
                        listLayer.Remove(layer);
                    }
                }
            }
  //          List<Dt_taskinfo> outboundTask = Dt_taskinfoRepository.Instance.Find(r => ((r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString())
  //    && (r.task_state.Equals(TaskState.TaskState_RGV_Received.ToString()) || r.task_state.Equals(TaskState.TaskState_RGV_Finished.ToString())))
  //|| r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString());
            List<Dt_taskinfo> outboundTask = Dt_taskinfoRepository.Instance.Find(r => ((r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString())
     && (r.task_state == TaskState.TaskState_RGV_Received.ToString() || r.task_state == TaskState.TaskState_RGV_Finished.ToString()))
 || r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString());
            //List<Dt_taskinfo> outboundTask = Dt_taskinfoRepository.Instance.Find(r =>(r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() || r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString())
            //&& (r.task_state != TaskState.TaskState_Create.ToString()));
            //if (outboundTask.Count < 3)
            //{
            //    int crtacount = 3 - outboundTask.Count;
            //    List<Dt_taskinfo> outboundcCrteateTask = Dt_taskinfoRepository.Instance.Find(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString()
            //&& r.task_state == TaskState.TaskState_Create.ToString()).OrderBy(r=>r.task_createtime).Take(crtacount).ToList();
            //    outboundTask.AddRange(outboundcCrteateTask);
            //}
            if (null != outboundTask && outboundTask.Count > 0)
            else if (Gznumber == 2)
            {
                List<string> fromStation = outboundTask.Where(r=>r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString()).Select(r => r.task_fromlocationid).ToList();
                fromStation.AddRange(outboundTask.Where(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()).Select(r => r.task_tolocationid).ToList());
                foreach (var item in fromStation)
                List<Dt_taskinfo> outbound = Dt_taskinfoRepository.Instance.Find(x =>
                x.task_beginstation == "90101"
                );
                foreach (var item in outbound)
                {
                    string[] location = item.Split('-');
                    string[] location = item.task_tolocationid.Split('-');
                    //获取当前有任务的层
                    int layer = int.Parse(location[0]);
                    LogRecord.WriteLog((int)LogEnum.InBound, $"分配任务时,有入库任务需要删除的层:{layer},当前层货位编号:{item.ToJson()},当前现有任务{outbound.ToJson()}");
                    listLayer.Remove(layer);
                }
            }
            else
            {
                List<Dt_taskinfo> inboundTask = Dt_taskinfoRepository.Instance.Find(r => r.task_type.Contains("Inbound"));
                if (null != inboundTask && inboundTask.Count > 0)
                {
                    foreach (var item in inboundTask)
                    {
                        //如果取货完成,可以分配
                        if (string.IsNullOrEmpty(item.task_bak_2) || !"2".Equals(item.task_bak_2))
                        {
                            string[] location = item.task_tolocationid.Split('-');
                            //获取当前有任务的层
                            int layer = int.Parse(location[0]);
                            LogRecord.WriteLog((int)LogEnum.InBound, $"分配任务时,有入库任务需要删除的层:{layer},当前层货位编号:{item.ToJson()},当前现有任务{inboundTask.ToJson()}");
                            listLayer.Remove(layer);
                        }
                    }
                }
                List<Dt_taskinfo> outboundTask = Dt_taskinfoRepository.Instance.Find(r => ((r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString())
       && (r.task_state == TaskState.TaskState_RGV_Received.ToString() || r.task_state == TaskState.TaskState_RGV_Finished.ToString()))
   || r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString());
                if (null != outboundTask && outboundTask.Count > 0)
                {
                    List<string> fromStation = outboundTask.Where(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString()).Select(r => r.task_fromlocationid).ToList();
                    fromStation.AddRange(outboundTask.Where(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()).Select(r => r.task_tolocationid).ToList());
                    foreach (var item in fromStation)
                    {
                        string[] location = item.Split('-');
                        //获取当前有任务的层
                        int layer = int.Parse(location[0]);
                        LogRecord.WriteLog((int)LogEnum.InBound, $"分配任务时,有入库任务需要删除的层:{layer},当前层货位编号:{item.ToJson()},当前现有任务{outboundTask.ToJson()}");
                        listLayer.Remove(layer);
                    }
                }
            }
            List<int> rgvLayer = new List<int>();
@@ -112,24 +145,25 @@
            }
            if (locationId.Count > 0)
            {
                //优先分配穿梭车的层
                if (rgvLayer.Count > 0)
                {
                    locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() &&
                    !locationId.Contains(x.location_id) && !x.location_islocked && rgvLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer)
                    locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString()
                    && !x.location_islocked && rgvLayer.Contains(x.location_layer) && !locationId.Contains(x.location_id)).OrderBy(x => x.location_layer)
                     .ThenBy(x => x.location_column).FirstOrDefault();
                    if (null != locationinfo)
                        return locationinfo;
                        return locationinfo;
                    else
                        locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() &&
                   !locationId.Contains(x.location_id) && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer)
                        locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString()
                    && !x.location_islocked && listLayer.Contains(x.location_layer) && !locationId.Contains(x.location_id)).OrderBy(x => x.location_layer)
                    .ThenBy(x => x.location_column).FirstOrDefault();
                }
                else
                    locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() &&
                    !locationId.Contains(x.location_id) && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer)
                    locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString()
                     && !x.location_islocked && listLayer.Contains(x.location_layer) && !locationId.Contains(x.location_id)).OrderBy(x => x.location_layer)
                     .ThenBy(x => x.location_column).FirstOrDefault();
                if (null != locationinfo)
@@ -153,7 +187,14 @@
              && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer).ThenBy(x => x.location_column).FirstOrDefault();
                if (null != locationinfo)
                    return locationinfo;
            }
            if (locationinfo == null)
            {
                locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString()
              && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer).ThenBy(x => x.location_column).FirstOrDefault();
                if (null != locationinfo)
                    return locationinfo;
            }
            throw new Exception("暂无货位可分配");