分支自 SuZhouGuanHong/TaiYuanTaiZhong

陈勇
2024-02-23 c9dd47185d603ccd09dd567f7eb5baeaf03b2746
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/StationTask.cs
@@ -9,6 +9,7 @@
using WIDESEA_Core.FreeDB;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Comm;
using static System.Collections.Specialized.BitVector32;
namespace WIDESEA_WCS.JobsPart.Common
{
@@ -27,8 +28,9 @@
            foreach (var item in stationinfos)
            {
                //根据下料口的绑定信息查询对应工单,检测此工单是否已完成  å®Œæˆå³å¯å°†å…¶é€å…¥åº“
                dt_Workinfo workinfo = workinfoRepository.FindFirst(x => x.WorkNumber == item.Number);
                int CompeletedNum = Convert.ToInt32(workinfo.PlannedQuantity) - Convert.ToInt32(workinfo.QuantityCompletion);
                dt_mes_head mesinfo = freeDB.Select<dt_mes_head>().Where(x => x.jobID == item.Number).First();
                int CompeletedNum = Convert.ToInt32(mesinfo.quantity) - Convert.ToInt32(mesinfo.finishNum);
                //判定任务是否已创建//如已存在  
                if (freeDB.Select<dt_agvtask>().Where(x => x.agv_fromaddress == item.stationCode).Count() > 0)
@@ -36,7 +38,25 @@
                if (item.quantity == 5 || CompeletedNum == 0)  //循环读取车轮数为5或者订单已完成数量的下料口    â†’工单人工关闭的工单
                {
                    dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository, workinfo, item);
                    if (mesinfo.quantity <= 50)    //小于50件直接出库
                    {
                        //todo å¯»æ‰¾å¯æ”¾è´§å¤–协放货台
                        dt_agvtask agvtask = new dt_agvtask()
                        {
                            agv_fromaddress = item.stationCode,
                            agv_id = Guid.NewGuid(),
                            agv_grade = 0,
                            agv_barcode = "",
                            agv_createtime = DateTime.Now,
                            agv_taskstate = TaskStatus.Created.ToString(),
                            //agv_toaddress = ,
                        };
                        freeDB.Add(agvtask);
                    }
                    else
                    {
                        dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository, mesinfo, item);
                    if (TargetLocation != null)
                    {
@@ -50,7 +70,6 @@
                            agv_createtime = DateTime.Now,
                            agv_taskstate = TaskStatus.Created.ToString(),
                            agv_toaddress = TargetLocation.stationCode,
                        };
                        freeDB.Add(agvtask);
@@ -58,7 +77,7 @@
                        freeDB.Update(TargetLocation);
                    }
                }
                }
            }
        }
@@ -69,68 +88,67 @@
        /// <param name="workinfo">订单</param>
        /// <param name="stationinfo">下料口信息</param>
        /// <returns></returns>
        private dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository, dt_Workinfo workinfo, dt_stationinfo stationinfo)
        private dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository, dt_mes_head mesinfo, dt_stationinfo stationinfo)
        {
            //放货位
            dt_stationinfo TargetLocation = null;
            //根据订单数量来寻找对应库区且同物料类型库位
            if (workinfo.PlannedQuantity < 50)    //库区1 ç‰©æ–™ç±»åž‹å¤š
            {
                dt_stationinfo station = stationinfoRepository.Find(x => x.stationType == stationinfo.stationType && x.area == "1").OrderByDescending(x => x.lastUpdateTime).FirstOrDefault();
                if (station != null)
                {
                    //如存在同物料类型且在1行的库存则新入库的物料放至同列 ä¸å­˜åœ¨åˆ™å¯»æ‰¾æ–°è¡Œåº“位
                    if (station.line == 1)
                    {
                        TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.column == station.column && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                    }
                    TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.line == 1 && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                }
                else
                {
                    TargetLocation = stationinfoRepository.Find(x => x.area == "1" && x.location_state == LocationStateEnum.Empty.ToString() && x.line == 1 && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                }
            }
            else
            {
            #region æ ¹æ®è®¢å•数量来寻找对应库区且同物料类型库位
            //if (workinfo.PlannedQuantity < 50)    //库区1 ç‰©æ–™ç±»åž‹å¤š
            //{
            //    dt_stationinfo station = stationinfoRepository.Find(x => x.stationType == stationinfo.stationType && x.area == "1").OrderByDescending(x => x.lastUpdateTime).FirstOrDefault();
            //    if (station != null)
            //    {
            //        //如存在同物料类型且在1行的库存则新入库的物料放至同列 ä¸å­˜åœ¨åˆ™å¯»æ‰¾æ–°è¡Œåº“位
            //        if (station.line == 1)
            //        {
            //            TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.column == station.column && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
            //        }
            //        TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.line == 1 && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
            //    }
            //    else
            //    {
            //        TargetLocation = stationinfoRepository.Find(x => x.area == "1" && x.location_state == LocationStateEnum.Empty.ToString() && x.line == 1 && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
            //    }
            //}
            //else
            //{
                //int quantity = Convert.ToInt32(workinfo.PlannedQuantity);
                //string area = GetArea(quantity);
                dt_materielinfo materielinfo = freeDB.Select<dt_materielinfo>().Where(x => x.materiel_id == stationinfo.stationType).First();
            //dt_materielinfo materielinfo = freeDB.Select<dt_materielinfo>().Where(x => x.materiel_id == stationinfo.stationType).First();
                if (materielinfo == null)
                    throw new Exception($"无此物料类型{stationinfo.stationType}库区");
            //if (materielinfo == null)
            //    throw new Exception($"无此物料类型{stationinfo.stationType}库区");
                string area = materielinfo.materiel_areaid.ToString();
            //string area = materielinfo.materiel_areaid.ToString();
                //如存在同类型物料则放置同行库位 ä¸å­˜åœ¨åˆ™æ”¾ç½®æ–°è¡Œçš„第一列中
                dt_stationinfo station = stationinfoRepository.Find(x => x.stationType == stationinfo.stationType && x.area == area).OrderBy(x => x.lastUpdateTime).FirstOrDefault();
                if (station != null)
                {
                    TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.line == station.line).OrderBy(x => x.column).FirstOrDefault();
                    if (TargetLocation == null)
                    {
                        TargetLocation = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.column == '1').OrderBy(x => x.line).FirstOrDefault();
                    }
                }
                else
                {
                    TargetLocation = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.column == '1').OrderBy(x => x.line).FirstOrDefault();
                }
            //dt_stationinfo station = stationinfoRepository.Find(x => x.stationType == stationinfo.stationType && x.area == area).OrderBy(x => x.lastUpdateTime).FirstOrDefault();
            //if (station != null)
            //{
            //    TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.line == station.line).OrderBy(x => x.column).FirstOrDefault();
            //    if (TargetLocation == null)
            //    {
            //        TargetLocation = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.column == '1').OrderBy(x => x.line).FirstOrDefault();
            //    }
            //}
            //else
            //{
            //    TargetLocation = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.column == '1').OrderBy(x => x.line).FirstOrDefault();
            //}
                //todo  å¦‚物料已满则放置其他库区
                //if (TargetLocation == null)
                //{
                //    stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.column == '1').OrderBy(x => x.line).FirstOrDefault();
                //}
            }
            if (TargetLocation == null)
            {
                throw new Exception("库位已满");
            }
            //}
            //if (TargetLocation == null)
            //{
            //    throw new Exception("库位已满");
            //}
            //else if (workinfo.PlannedQuantity >= 50 && workinfo.PlannedQuantity < 110)  //库区2 
            //{
@@ -149,6 +167,29 @@
            //{
            //}
            #endregion
            //根据订单炉号/工单号/类型
            if (mesinfo.quantity >= 180)
            {
                //查询库存记录中是否存在同类型/工单/炉号的记录  å¦‚有则放置同一行,无则寻找新库位
                var detail = freeDB.Select<dt_mes_detail>().Where(x => x.jobID == mesinfo.jobID).First();
                var inventory = freeDB.Select<dt_inventory>().Where(x => x.HeatNumber == detail.heatID /*&& x.*/).First();
                if (inventory != null)
                {
                    int line = Convert.ToInt16(inventory.stationCode.Split("-")[0]);
                    TargetLocation = stationinfoRepository.Find(x => x.line == line && x.location_state == LocationStateEnum.Empty.ToString() && x.area == inventory.area).FirstOrDefault();
                }
                else
                {
                    TargetLocation = stationinfoRepository.Find(x => x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                }
            }
            if (TargetLocation == null)
            {
                throw new Exception("库位已满");
            }
            return TargetLocation;
        }