1
pulg
2025-05-27 bc3d7a828114cb9df154da869ec986cf6733a779
HH.WCS.ZCQTJ/Bll/StateTaskBLL.cs
@@ -1,6 +1,7 @@
using HH.WCS.Hexafluo;
using HH.WCS.Hexafluo.device;
using HH.WCS.Hexafluo.dispatch;
using HH.WCS.Hexafluo.process;
using HH.WCS.Hexafluo.util;
using HH.WCS.Hexafluo.wms;
using HH.WCS.SJML.Comm;
@@ -1209,36 +1210,7 @@
            }
            var chi = new SqlHelper<object>().GetInstance();
            var newDb = chi.CopyNew();
            List<string> AreaLo = new List<string>() { "TCXB", "TTXB", "NCXB", "DSXB", "TMXB", "TQXB", "TQJT" };
            WMSTask PritTask = null;
            //查询是否是相关库区
            if (executeStatePara.transportTask.S_TYPE == "出库" && AreaLo.Contains(executeStatePara.transportTask.S_END_LAREA))
            {
                LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + executeStatePara.transportTask.S_TASK_NO + " 终点库区是否等于DSXB 本任务:" + executeStatePara.transportTask.S_END_LAREA);
                //查询配制表
                var transportTask = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == executeStatePara.transportTask.S_END_LAREA + "-送满取空")?.First();
                if (transportTask != null)
                {
                    var ListString = JsonConvert.DeserializeObject<List<ConfigValueList>>(transportTask.TypeJson);
                    if (ListString != null && ListString.Count > 0)
                    {
                        var Strin = ListString.Find(e => e.LocationCode1 == executeStatePara.transportTask.S_END_LOC);
                        LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + executeStatePara.transportTask.S_TASK_NO + "是否匹配到了队友的货位信息" + JsonConvert.SerializeObject(Strin));
                        if (Strin != null)
                        {
                            //查询旁边的货位是否有已推送但是没执行的任务
                            var SfgLo = newDb.Queryable<WMSTask>().Where(e => e.S_START_LOC == Strin.LocationCode2 && e.S_NOTE.Equals("agv任务") && (e.S_B_STATE == "已推送" || e.S_B_STATE == "执行中"))?.First();
                            LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + executeStatePara.transportTask.S_TASK_NO + "匹配到的货位 是否存在 是agv任务 并且任务上已推送" + JsonConvert.SerializeObject(SfgLo));
                            if (SfgLo != null)//有这个任务
                            {
                                var Agvstr = NDCHelper.ChangeParamPri(SfgLo.S_TASK_NO, 60);
                                LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + SfgLo.S_TASK_NO + "优先级为:" + 60 + "   是否成功 :" + Agvstr);
                                PritTask = SfgLo;
                            }
                        }
                    }
                }
            }
            try
            {
                LogHelper.TaskDetail(logPara, "更新任务状态 事务开始:" + executeStatePara.transportTask.S_TASK_NO);
@@ -1249,12 +1221,7 @@
                {
                    throw new Exception("更新任务状态失败");
                }
                if (PritTask != null)
                {
                    // var ddd = executeStatePara.transportTaskSrc.Select(e => e.S_ID).ToList();
                    var ggj = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { N_PRIORITY = 40 }).Where(e => e.S_ID == PritTask.S_ID).ExecuteCommand();
                    LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + PritTask.S_TASK_NO + "优先级为:" + 40 + "   是否成功 改wms任务 影响行数:" + ggj);
                }
                newDb.CommitTran();
                LogHelper.TaskDetail(logPara, "更新任务状态 事务结束:" + executeStatePara.transportTask.S_TASK_NO);
                return OperateResult.Succeed();
@@ -2201,24 +2168,24 @@
            var newDb = chi.CopyNew();
            Location location2 = null;
            List<ConfigValueList> ListValues = new List<ConfigValueList>();
            if (executeStatePara.startIsCurrentTask.S_NOTE == "智能空桶满托")
            {
                //查询配置表信息
                var transport = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "智能空桶缓存")?.First();
                if (transport != null)
                {
                    ListValues = JsonConvert.DeserializeObject<List<ConfigValueList>>(transport.TypeJson);
                    if (ListValues.Count() > 0)
                    {
                        //查询出对应的空托缓存位
                        var ggf = ListValues.Find(e => e.LocationCode1 == executeStatePara.transportTask.S_START_LOC);
                        if (ggf != null)
                        {
                            location2 = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == ggf.LocationCode2)?.First();
                        }
                    }
                }
            }
            //if (executeStatePara.startIsCurrentTask.S_NOTE == "智能空桶满托")
            //{
            //    //查询配置表信息
            //    var transport = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "智能空桶缓存")?.First();
            //    if (transport != null)
            //    {
            //        ListValues = JsonConvert.DeserializeObject<List<ConfigValueList>>(transport.TypeJson);
            //        if (ListValues.Count() > 0)
            //        {
            //            //查询出对应的空托缓存位
            //            var ggf = ListValues.Find(e => e.LocationCode1 == executeStatePara.transportTask.S_START_LOC);
            //            if (ggf != null)
            //            {
            //                location2 = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == ggf.LocationCode2)?.First();
            //            }
            //        }
            //    }
            //}
            try
            {
                LogHelper.TaskDetail(logPara, "更新任务状态 事务开始:" + executeStatePara.transportTask.S_TASK_NO);
@@ -2258,22 +2225,22 @@
                    //}
                    //LogHelper.TaskDetail(logPara, "更新任务终点货位" + executeStatePara.transportTask.S_START_LOC + "的状态锁为无!");
                }
                if (executeStatePara.transportTask.S_TYPE.Equals("入库") && executeStatePara.startIsCurrentTask.S_NOTE == "智能空桶满托")
                {
                    if (location2 != null && (location2.N_CURRENT_NUM - 1 >= 0))
                    {
                        I = newDb.Updateable<Location>().SetColumns(it => new Location()
                        {
                            T_MODIFY = DateTime.Now,
                            N_CURRENT_NUM = it.N_CURRENT_NUM - 1,
                            T_EMPTY_TIME = DateTime.Now
                        }).Where(x => x.S_LOC_CODE == location2.S_LOC_CODE).ExecuteCommand();
                        if (I == 0)
                        {
                            throw new Exception("更新终点当前容量-1失败");
                        }
                    }
                }
                //if (executeStatePara.transportTask.S_TYPE.Equals("入库") && executeStatePara.startIsCurrentTask.S_NOTE == "智能空桶满托")
                //{
                //    if (location2 != null && (location2.N_CURRENT_NUM - 1 >= 0))
                //    {
                //        I = newDb.Updateable<Location>().SetColumns(it => new Location()
                //        {
                //            T_MODIFY = DateTime.Now,
                //            N_CURRENT_NUM = it.N_CURRENT_NUM - 1,
                //            T_EMPTY_TIME = DateTime.Now
                //        }).Where(x => x.S_LOC_CODE == location2.S_LOC_CODE).ExecuteCommand();
                //        if (I == 0)
                //        {
                //            throw new Exception("更新终点当前容量-1失败");
                //        }
                //    }
                //}
                if (executeStatePara.transportTask.S_TYPE.Equals("出库"))
                {
                    //删除托盘产品关联
@@ -2337,6 +2304,70 @@
            }
            var chi = new SqlHelper<object>().GetInstance();
            var newDb = chi.CopyNew();
            List<string> AreaLo = new List<string>() { "TCXB", "TTXB", "NCXB", "DSXB", "TMXB", "TQXB", "TQJT" };
            WMSTask PritTask = null;
            //查询是否是相关库区
            if (executeStatePara.transportTask.S_TYPE == "出库" && AreaLo.Contains(executeStatePara.transportTask.S_END_LAREA))
            {
                LogHelper.TaskDetail(logPara, $"更新任务优先级-任务号:{executeStatePara.transportTask.S_TASK_NO} 终点库区是否包含{JsonConvert.SerializeObject(AreaLo)} 本任务:" + executeStatePara.transportTask.S_END_LAREA);
                //查询配置文件
                var transportTask = STAttribute.GetValueTwo(executeStatePara.transportTask.S_END_LAREA + "-送满取空");
                if (transportTask != null)
                {
                    var ListString = JsonConvert.DeserializeObject<List<ConfigValueListTwo>>(transportTask);
                    if (ListString != null && ListString.Count > 0)
                    {
                        var Strin = ListString.Find(e => e.LocationCode1 == executeStatePara.transportTask.S_END_LOC);
                        LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + executeStatePara.transportTask.S_TASK_NO + "是否匹配到了队友的货位信息" + JsonConvert.SerializeObject(Strin));
                        if (Strin != null)
                        {
                            //查询旁边的货位是否有已推送但是没执行的任务
                            //  List<string> TaskState2 = new List<string> { "未执行", "已推送", "执行中" };
                            var SfgLo = newDb.Queryable<WMSTask>().Where(e => Strin.LocationCode2.Contains(e.S_START_LOC) && e.S_NOTE.Equals("agv任务") && (e.S_B_STATE == "未执行" || e.S_B_STATE == "已推送" || e.S_B_STATE == "执行中")).ToList();
                            LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + executeStatePara.transportTask.S_TASK_NO + "匹配到的货位 是否存在 是agv任务 并且任务状态为 未执行/已推送/执行中 的任务有:" + JsonConvert.SerializeObject(SfgLo));
                            if (SfgLo.Count() > 0)//有这个任务
                            {
                                //看这个任务是否是有处于配置空托第一位的货位
                                var OneLoc = Strin.LocationCode2.FirstOrDefault();
                                LogHelper.TaskDetail(logPara, "更新任务优先级  配置中第一个货位为:" + OneLoc);
                                var OneTask = SfgLo.Find(e => e.S_START_LOC == OneLoc);
                                if (OneTask != null)
                                {
                                    if (OneTask.S_B_STATE == "未执行")//推送任务
                                    {
                                        OneTask.N_PRIORITY = 60;
                                        TaskProcess.SendTask(OneTask);
                                    }
                                    else
                                    {
                                        var Agvstr = NDCHelper.ChangeParamPri(OneTask.S_TASK_NO, 60);
                                        LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + OneTask.S_TASK_NO + "优先级为:" + 60 + "   是否成功 :" + Agvstr);
                                    }
                                    PritTask = OneTask;
                                }
                                else
                                {
                                    SfgLo = SfgLo.OrderBy(e => e.T_CREATE).ToList();
                                    var OneTaskR = SfgLo.FirstOrDefault();
                                    if (OneTaskR.S_B_STATE == "未执行")//推送任务
                                    {
                                        OneTaskR.N_PRIORITY = 60;
                                        TaskProcess.SendTask(OneTaskR);
                                    }
                                    else
                                    {
                                        var Agvstr = NDCHelper.ChangeParamPri(OneTaskR.S_TASK_NO, 60);
                                        LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + OneTaskR.S_TASK_NO + "优先级为:" + 60 + "   是否成功 :" + Agvstr);
                                    }
                                    PritTask = OneTaskR;
                                }
                            }
                        }
                    }
                }
            }
            try
            {
                LogHelper.TaskDetail(logPara, "更新任务状态 事务开始:" + executeStatePara.transportTask.S_TASK_NO);
@@ -2388,6 +2419,13 @@
                        }
                    }
                }
                if (PritTask != null)
                {
                    // var ddd = executeStatePara.transportTaskSrc.Select(e => e.S_ID).ToList();
                    var ggj = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { N_PRIORITY = 60 }).Where(e => e.S_ID == PritTask.S_ID).ExecuteCommand();
                    LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + PritTask.S_TASK_NO + "优先级为:" + 60 + "   是否成功 改wms任务 影响行数:" + ggj);
                }
                newDb.CommitTran();
                LogHelper.TaskDetail(logPara, "更新任务状态 事务结束:" + executeStatePara.transportTask.S_TASK_NO);
                return OperateResult.Succeed();