分支自 SuZhouGuanHong/TaiYuanTaiZhong

dengjunjie
2024-03-05 db6156a92cc59467bde608a00c76952ebc75e488
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/StationTask.cs
@@ -16,8 +16,8 @@
    public class StationTask
    {
        FreeDB freeDB = new FreeDB();
        public void CreateTask()
        static FreeDB freeDB = new FreeDB();
        public static void CreateTask()
        {
            VOLContext context = new VOLContext();
            Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
@@ -30,7 +30,9 @@
                //根据下料口的绑定信息查询对应工单,检测此工单是否已完成  å®Œæˆå³å¯å°†å…¶é€å…¥åº“
                dt_mes_head mesinfo = freeDB.Select<dt_mes_head>().Where(x => x.jobID == item.Number).First();
                dt_geometry_data dt_Geometry_Data = freeDB.Select<dt_geometry_data>().Where(x => x.Description == mesinfo.drawingNo).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)
@@ -38,8 +40,11 @@
                if (item.quantity == 5 || CompeletedNum == 0)  //循环读取车轮数为5或者订单已完成数量的下料口    â†’工单人工关闭的工单
                {
                    if (mesinfo.quantity <= 50)    //小于50件直接出库
                    if (mesinfo.quantity <= 50 || item.stationCode.Contains("3"))    //小于50件直接出库
                    {
                        //var station =
                        //todo å¯»æ‰¾å¯æ”¾è´§å¤–协放货台
                        dt_agvtask agvtask = new dt_agvtask()
                        {
@@ -56,7 +61,7 @@
                    }
                    else
                    {
                        dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository, mesinfo, item);
                        dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository, mesinfo, item, CompeletedNum, dt_Geometry_Data.e);
                        if (TargetLocation != null)
                        {
@@ -88,11 +93,10 @@
        /// <param name="workinfo">订单</param>
        /// <param name="stationinfo">下料口信息</param>
        /// <returns></returns>
        private dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository, dt_mes_head mesinfo, dt_stationinfo stationinfo)
        private static dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository, dt_mes_head mesinfo, dt_stationinfo stationinfo, int CompeletedNum, float e)
        {
            //放货位
            dt_stationinfo TargetLocation = null;
            #region æ ¹æ®è®¢å•数量来寻找对应库区且同物料类型库位
            //if (workinfo.PlannedQuantity < 50)    //库区1 ç‰©æ–™ç±»åž‹å¤š
@@ -169,22 +173,73 @@
            //} 
            #endregion
            //根据订单炉号/工单号/类型
            if (mesinfo.quantity >= 180)
            var detail = freeDB.Select<dt_mes_detail>().Where(x => x.jobID == mesinfo.jobID).First();
            dt_inventory inventory = null;
            if (detail.heatID != null)
            {
                //查询库存记录中是否存在同类型/工单/炉号的记录  å¦‚有则放置同一行,无则寻找新库位
                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)
                inventory = freeDB.Select<dt_inventory>().Where(x => x.HeatNumber == detail.heatID && x.FigureNumber == mesinfo.drawingNo && x.jobID == mesinfo.jobID).First();
            }
            else
            {
                inventory = freeDB.Select<dt_inventory>().Where(x => x.FigureNumber == mesinfo.drawingNo && x.jobID == mesinfo.jobID).First();
            }
            if (inventory != null)
            {
                var station = stationinfoRepository.FindFirst(x => x.stationCode == inventory.stationCode);
                if (CompeletedNum <= 15 || station.area == "1")
                {
                    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();
                    TargetLocation = stationinfoRepository.Find(x => x.column == station.column && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == inventory.area).OrderBy(x => x.line).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();
                    TargetLocation = stationinfoRepository.Find(x => x.line == station.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == inventory.area).OrderBy(x => x.column).FirstOrDefault();
                }
                if (TargetLocation != null) return TargetLocation;
            }
            if (CompeletedNum <= 15)
            {
                TargetLocation = stationinfoRepository.Find(x => x.line == 1 && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == "1").OrderBy(x => x.column).FirstOrDefault();
            }
            else
            {
                //if (50 < mesinfo.quantity && mesinfo.quantity <= 180 && e < 1100)
                //    TargetLocation = stationinfoRepository.Find(x => x.column == 1 && x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault();
                //else if (180 < mesinfo.quantity && mesinfo.quantity <= 225 && e < 1100)
                //    TargetLocation = stationinfoRepository.Find(x => x.column == 1 && x.area == "3" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault();
                //if (50 < mesinfo.quantity && e > 1100 || TargetLocation == null)
                var area = GetArea(mesinfo.quantity, e);
                TargetLocation = stationinfoRepository.Find(x => x.column == 1 && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault();
                if (TargetLocation == null)
                    TargetLocation = stationinfoRepository.Find(x => x.column == 1 && x.area == "4" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault();
            }
            #region
            //根据订单炉号/工单号/类型
            //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.FigureNumber == mesinfo.drawingNo && x.jobID == mesinfo.jobID).First();
            //    if (inventory != null)
            //    {
            //        //int line = Convert.ToInt16(inventory.stationCode.Split("-")[0]);
            //        var line = stationinfoRepository.FindFirst(x => x.stationCode == inventory.stationCode).line;
            //        TargetLocation = stationinfoRepository.Find(x => x.line == line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == inventory.area).OrderBy(x => x.column).FirstOrDefault();
            //        if (TargetLocation == null && CompeletedNum <= 15)
            //        {
            //            TargetLocation = stationinfoRepository.Find(x => x.area == "1" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).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();
            //    }
            //}
            #endregion
            if (TargetLocation == null)
            {
@@ -198,14 +253,26 @@
        /// </summary>
        /// <param name="quantity"></param>
        /// <returns></returns>
        private string GetArea(int quantity)
        private static string GetArea(int quantity, float e)
        {
            if (quantity >= 50 && quantity < 180)
                return "2";
            else if (quantity >= 180 && quantity < 180)
                return "3";
            else if (quantity >= 180 && quantity < 220)
            if (e < 1100)
            {
                if (quantity <= 180)
                    return "2";
                else if (quantity <= 225)
                    return "3";
            }
            else
            {
                return "4";
            }
            //if (quantity > 50 && quantity <= 180 && e < 1100)
            //    return "2";
            //else if (quantity > 180 && quantity <= 225 && e < 1100)
            //    return "3";
            //else if (quantity > 50 && e > 1100)
            //    return "4";
            return null;
        }
    }