1
pulg
2025-05-27 bc3d7a828114cb9df154da869ec986cf6733a779
1
13个文件已修改
707 ■■■■ 已修改文件
HH.WCS.ZCQTJ/Bll/StateTaskBLL.cs 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/Bll/ZCBLL.cs 105 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/Config/Config.json 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/Entitys/ConfigJsonEntitys.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/Entitys/S_AGV_CONDITIONEntitys.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/api/WmsController.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/core/TaskCore.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/dispatch/WcsTask.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/process/TaskProcess.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/util/LogHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/util/STAttribute .cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/wms/LocationHelper.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.ZCQTJ/wms/WMSModel.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
HH.WCS.ZCQTJ/Bll/ZCBLL.cs
@@ -34,7 +34,7 @@
                var newDb = chi.CopyNew();
                foreach (var task in TaskList)
                {
                    LogHelper.Info("处理自管任务", " 出库 开始------任务:" + task.S_TASK_NO);
                    LogHelper.DanInfo("处理自管任务", " 出库 开始------任务:" + task.S_TASK_NO);
                    try
                    {
                        bool ggf = true;
@@ -48,6 +48,7 @@
                            string lkBit = task.S_START_LOC;
                            var locationBit = LocationHelper.LocationCode(lkBit);
                            var tTaskNum = newDb.Queryable<OutAreaTaskAnyJbEntitys>().Where(e => e.S_AreaCode == task.S_START_LAREA && e.S_IsUse == "Y")?.First();
                            //获取托盘号  如果起点管控的话
                            var endArea = newDb.Queryable<TN_AreaEntitys>().Where(e => e.S_AREA_CODE == task.S_END_LAREA)?.First();
                            if (endArea != null && endArea.S_CONTROL_QTY == "Y")
@@ -55,7 +56,7 @@
                                var locaBit = newDb.Queryable<LocCntrRel>().Where(e => e.S_CNTR_CODE == task.S_CNTRS).First();
                                if (locaBit == null)
                                {
                                    LogHelper.Info("处理自管任务", "未找到托盘货位绑定:其中 S_CNTRS=" + task.S_CNTRS);
                                    LogHelper.DanInfo("处理自管任务", "未找到托盘货位绑定:其中 S_CNTRS=" + task.S_CNTRS);
                                    throw new Exception("未找到托盘货位绑定:其中 S_CNTRS=" + task.S_CNTRS);
                                }
                            }
@@ -63,7 +64,7 @@
                            var ToBit = LocationHelper.LocationCodeJbw(task.S_START_LOC);
                            if (ToBit == null)
                            {
                                LogHelper.Info("处理自管任务", "未找到巷道号:其中 S_START_LOC=" + task.S_START_LOC);
                                LogHelper.DanInfo("处理自管任务", "未找到巷道号:其中 S_START_LOC=" + task.S_START_LOC);
                                throw new Exception("未找到巷道号:其中 S_START_LOC=" + task.S_START_LOC);
                            }
                            if (locationBit == null)
@@ -71,7 +72,41 @@
                            //通过任务类型找接驳位
                            var _bit = "";
                            string input = task.S_Jb_Bit;
                            string[] result = input.Split(',');
                            List<string> result = input.Split(',').ToList();
                            if (tTaskNum != null && Itemgh != null)
                            {
                                //查询起点库区对应巷道总任务量
                                var TaskLis = newDb.Queryable<WMSTask>().Where(e => e.S_START_LAREA == task.S_START_LAREA && e.S_Main_task == "主任务" && e.S_B_STATE == "未执行" && (e.S_Jb_Bit.Contains(result.FirstOrDefault()) || e.S_Jb_Bit.Contains(result.LastOrDefault()))).ToList();
                                if (TaskLis.Count > 0)
                                {
                                    //筛选出库的全部满托任务
                                    var TaskTray = TaskLis.Select(e => e.S_CNTRS).ToList();
                                    LogHelper.DanInfo("处理自管任务", "筛选出库的全部满托任务" + JsonConvert.SerializeObject(TaskTray));
                                    //查托盘空满
                                    var TaskItemghList = newDb.Queryable<CntrItemRel>().Where(e => TaskTray.Contains(e.S_CNTR_CODE)).ToList();
                                    if (TaskItemghList.Count() > 0)
                                    {
                                        //获取满托的托盘集合
                                        var MtTray = TaskItemghList.Select(e => e.S_CNTR_CODE).ToList();
                                        LogHelper.DanInfo("处理自管任务", "筛选出库的全部满托任务" + JsonConvert.SerializeObject(MtTray));
                                        TaskLis = TaskLis.FindAll(e => MtTray.Contains(e.S_CNTRS)).ToList();
                                    }
                                }
                                if (TaskLis.Count() > 0)
                                {
                                    LogHelper.DanInfo("处理自管任务", $"起点库区{task.S_START_LAREA} 所处的巷道的 未执行的任务量为:{TaskLis.Count()}");
                                    LogHelper.DanInfo("处理自管任务", $"最大任务数为{tTaskNum.N_TaskQuantity}");
                                    if (TaskLis.Count() < tTaskNum.N_TaskQuantity)
                                    {
                                        if (result.Count > 1)
                                        {
                                            LogHelper.DanInfo("处理自管任务", $"排除前接驳位有{JsonConvert.SerializeObject(result)}");
                                            result.RemoveRange(1, result.Count - 1);
                                            LogHelper.DanInfo("处理自管任务", $"排除后接驳位有{JsonConvert.SerializeObject(result)}");
                                        }
                                    }
                                }
                            }
                            Location connectBit = new Location();
                            foreach (var item in result)
                            {
@@ -129,7 +164,7 @@
                                if (lstLocation.Count() == 0)
                                {
                                    LogHelper.Info("处理自管任务", "移库任务:: 货位表没有可用货位");
                                    LogHelper.DanInfo("处理自管任务", "移库任务:: 货位表没有可用货位");
                                    throw new Exception("没有可用货位");
                                }
                                //如果外侧有阻挡,就将外侧的货位的CN_S_TASK_NO  获取到
@@ -154,7 +189,7 @@
                                        if (emptyLocation.Count() == 0)
                                        {
                                            LogHelper.Info("处理自管任务", "移库任务:: 货位表没有该巷道中的可用空货位 CN_S_AREA_CODE=" + locationBit.S_AREA_CODE);
                                            LogHelper.DanInfo("处理自管任务", "移库任务:: 货位表没有该巷道中的可用空货位 CN_S_AREA_CODE=" + locationBit.S_AREA_CODE);
                                            throw new Exception("没有可用货位");
                                        }
@@ -173,13 +208,13 @@
                                            loca.And(it => it.S_LOCK_STATE == "出库锁");
                                            List<Location> locationOutLock = newDb.Queryable<Location>().Where(loca.ToExpression()).ToList();
                                            LogHelper.Info("处理自管任务", "locationOutLock数据:" + JsonConvert.SerializeObject(locationOutLock));
                                            LogHelper.DanInfo("处理自管任务", "locationOutLock数据:" + JsonConvert.SerializeObject(locationOutLock));
                                            foreach (Location lEntity in locationOutLock)
                                            {
                                                emptyLocation.RemoveAll(o => o.N_ROW == lEntity.N_ROW && o.N_COL == lEntity.N_COL && o.N_LAYER == lEntity.N_LAYER);
                                            }
                                            LogHelper.Info("处理自管任务", "去除预出库锁定后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation));
                                            LogHelper.DanInfo("处理自管任务", "去除预出库锁定后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation));
                                            //去除预入库锁定的排列层
                                            var locaIn = Expressionable.Create<Location>();
@@ -187,13 +222,13 @@
                                            locaIn.And(it => it.S_AREA_CODE == obstructBit.S_AREA_CODE);
                                            locaIn.And(it => it.S_LOCK_STATE == "入库锁");
                                            List<Location> locationInLock = newDb.Queryable<Location>().Where(locaIn.ToExpression()).ToList();
                                            LogHelper.Info("处理自管任务", "locationInLock数据:" + JsonConvert.SerializeObject(locationInLock));
                                            LogHelper.DanInfo("处理自管任务", "locationInLock数据:" + JsonConvert.SerializeObject(locationInLock));
                                            foreach (Location lEntity in locationInLock)
                                            {
                                                emptyLocation.RemoveAll(o => o.N_ROW == lEntity.N_ROW && o.N_COL == lEntity.N_COL && o.N_LAYER == lEntity.N_LAYER);
                                            }
                                            LogHelper.Info("处理自管任务", "去除预入库锁定后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation));
                                            LogHelper.DanInfo("处理自管任务", "去除预入库锁定后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation));
                                            //去除被外侧货物阻挡的货位
                                            var locaWc = Expressionable.Create<Location>();
@@ -203,14 +238,14 @@
                                            locaWc.And(it => it.N_SIDE == 1);
                                            lca.And(it => it.N_CURRENT_NUM > 0);
                                            List<Location> lstLocationHasItem = newDb.Queryable<Location>().Where(locaWc.ToExpression()).ToList();
                                            LogHelper.Info("处理自管任务", "lstLocationHasItem数据:" + JsonConvert.SerializeObject(lstLocationHasItem));
                                            LogHelper.DanInfo("处理自管任务", "lstLocationHasItem数据:" + JsonConvert.SerializeObject(lstLocationHasItem));
                                            List<Location> lstLocationHasItemOrder = new List<Location>();
                                            foreach (Location itemC in lstLocationHasItem)
                                            {
                                                emptyLocation.RemoveAll(o => o.N_ROW == itemC.N_ROW && o.N_COL == itemC.N_COL && o.N_LAYER == itemC.N_LAYER && o.N_SIDE > itemC.N_SIDE);
                                            }
                                            LogHelper.Info("处理自管任务", "去除阻挡后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation));
                                            LogHelper.DanInfo("处理自管任务", "去除阻挡后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation));
                                            if (emptyLocation.Count() > 0)
                                            {
                                                var emptyLocation_inside = emptyLocation.FindAll(f => f.N_SIDE == 2);
@@ -221,7 +256,7 @@
                                            }
                                            else
                                            {
                                                LogHelper.Info("处理自管任务", "移库任务:: 货位表没有该巷道中的可用空货位 S_AREA_CODE=" + locationBit.S_AREA_CODE);
                                                LogHelper.DanInfo("处理自管任务", "移库任务:: 货位表没有该巷道中的可用空货位 S_AREA_CODE=" + locationBit.S_AREA_CODE);
                                                throw new Exception("没有可用货位");
                                            }
                                            //
@@ -276,7 +311,7 @@
                            taskEntity1.S_Main_task = "子任务";
                            taskEntity1.S_TOOLS_TPYE = task.S_TOOLS_TPYE;
                            LogHelper.Info("处理自管任务", "11---" + JsonConvert.SerializeObject(taskEntity1));
                            LogHelper.DanInfo("处理自管任务", "11---" + JsonConvert.SerializeObject(taskEntity1));
                            string taskNo2 = task.S_TASK_NO + "_2";
                            //创建第二个任务
                            WMSTask taskEntity2 = new WMSTask()
@@ -303,7 +338,7 @@
                                S_Main_task = "子任务",
                                S_TOOLS_TPYE = task.S_TOOLS_TPYE
                            };
                            LogHelper.Info("处理自管任务", "12---" + JsonConvert.SerializeObject(taskEntity2));
                            LogHelper.DanInfo("处理自管任务", "12---" + JsonConvert.SerializeObject(taskEntity2));
                            #region 任务下达
                            #region 如果有阻挡需要移库则产生移库任务
@@ -323,7 +358,7 @@
                                    throw new Exception("锁定终点货位并发异常:" + taskEntityYk.S_END_LOC);
                                }
                                LogHelper.Info("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntityYk.S_END_LOC + "--锁定终点货位 任务号为:" + taskNoYk);
                                LogHelper.DanInfo("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntityYk.S_END_LOC + "--锁定终点货位 任务号为:" + taskNoYk);
                                A = newDb.Updateable<Location>().SetColumns(it => new Location
                                {
                                    S_LOCK_STATE = "出库锁",
@@ -334,12 +369,12 @@
                                    newDb.RollbackTran();
                                    throw new Exception("锁定起点货位并发异常:" + taskEntityYk.S_START_LOC);
                                }
                                LogHelper.Info("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntityYk.S_START_LOC + "--锁定终点货位 任务号为:" + taskNoYk);
                                LogHelper.Info("处理自管任务", "移库任务下发给WCS 参数为" + JsonConvert.SerializeObject(taskEntityYk));
                                LogHelper.DanInfo("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntityYk.S_START_LOC + "--锁定终点货位 任务号为:" + taskNoYk);
                                LogHelper.DanInfo("处理自管任务", "移库任务下发给WCS 参数为" + JsonConvert.SerializeObject(taskEntityYk));
                                //下发任务给WCS--立库
                                var tr = BLLCreator.CreateSingleton<WcsTask>().WcsTaskEntity(taskEntityYk);
                                LogHelper.Info("处理自管任务", "移库任务调用WCS接口执行任务  执行结果:" + JsonConvert.SerializeObject(tr));
                                LogHelper.DanInfo("处理自管任务", "移库任务调用WCS接口执行任务  执行结果:" + JsonConvert.SerializeObject(tr));
                                if (!tr.Success)
                                {
                                    WCSBOOL = tr.Success;
@@ -368,7 +403,7 @@
                             S_LOCK_STATE = "入库锁",
                             T_MODIFY = DateTime.Now
                         }).Where(x => x.S_LOC_CODE == taskEntity1.S_END_LOC && x.S_LOCK_STATE == "无").ExecuteCommand();
                                LogHelper.Info("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntity1.S_END_LOC + "--锁定货位为预入库 任务号为:" + taskNo1 + JsonConvert.SerializeObject(B));
                                LogHelper.DanInfo("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntity1.S_END_LOC + "--锁定货位为预入库 任务号为:" + taskNo1 + JsonConvert.SerializeObject(B));
                                if (B == 0)
                                {
                                    newDb.RollbackTran();
@@ -386,8 +421,8 @@
                            }
                            #endregion
                            #region 发送Wcs任务
                            LogHelper.Info("处理自管任务", "下发给WCS 参数为" + JsonConvert.SerializeObject(taskEntity1));
                            LogHelper.Info("处理自管任务", "调用WCS接口");
                            LogHelper.DanInfo("处理自管任务", "下发给WCS 参数为" + JsonConvert.SerializeObject(taskEntity1));
                            LogHelper.DanInfo("处理自管任务", "调用WCS接口");
                            var re = BLLCreator.CreateSingleton<WcsTask>().WcsTaskEntity(taskEntity1, Itemgh);
                            //如果任务成功下达 则主任务不需要在循环了
                            if (!re.Success)
@@ -400,7 +435,7 @@
                            {
                                WCSBOOL = re.Success;
                            }
                            LogHelper.Info("处理自管任务", "调用WCS接口执行任务  执行结果:" + JsonConvert.SerializeObject(re));
                            LogHelper.DanInfo("处理自管任务", "调用WCS接口执行任务  执行结果:" + JsonConvert.SerializeObject(re));
                            #endregion
                            #region  添加第二个子任务
                            B = newDb.Insertable(taskEntity2).ExecuteCommand();
@@ -412,7 +447,7 @@
                            #endregion
                            #region agv任务
                            //下达任务给Agv
                            //LogHelper.Info("处理自管任务", "调用agv接口");
                            //LogHelper.DanInfo("处理自管任务", "调用agv接口");
                            //var Are = TaskProcess.SendTask(taskEntity2);
                            //if (!Are)
                            //{
@@ -447,11 +482,11 @@
                        ors.Add(OperateResult.Error(ex.Message));
                    }
                }
                LogHelper.Info("处理自管任务", JsonConvert.SerializeObject(ors));
                LogHelper.DanInfo("处理自管任务", JsonConvert.SerializeObject(ors));
            }
            catch (Exception ex)
            {
                LogHelper.Info("处理自管任务", " Error:" + ex.Message + ex.StackTrace);
                LogHelper.DanInfo("处理自管任务", " Error:" + ex.Message + ex.StackTrace);
            }
        }
@@ -1353,7 +1388,7 @@
                        return OperateResult.Succeed();
                        //  }
                    }
                  //  return OperateResult.Succeed();
                    //  return OperateResult.Succeed();
                }
                else
                {
@@ -2130,5 +2165,21 @@
            }
        }
        private bool ContainsAnyChar(string input, List<string> charList)
        {
            bool gf = false;
            foreach (var item in charList)
            {
                if (input.Contains(input))
                {
                    gf = true;
                    break;
                }
            }
            return gf;
        }
    }
}
HH.WCS.ZCQTJ/Config/Config.json
@@ -128,5 +128,19 @@
  "TcpClient": {
    "ip": "",
    "port": 8801
  }
  },
  "TTXB-送满取空": [
    {
      "LocationCode1": "LC12A01TCM1",
      "LocationCode2": [ "LC12A01TCK", "LC12A02TCK", "LC12A03TCK", "LC12A04TCK", "LC12A05TCK", "LC12A06TCK", "LC12A07TCK", "LC12A08TCK", "LC12A09TCK", "LC12A10TCK", "LC12A11TCK", "LC12A12TCK", "LC12A13TCK", "LC12A14TCK", "LC12A15TCK", "LC12A16TCK", "LC12A17TCK", "LC12A18TCK", "LC12A19TCK", "LC12A20TCK", "LC12A21TCK", "LC12A22TCK" ]
    },
    {
      "LocationCode1": "LC12A01TCM2",
      "LocationCode2": [ "LC12A01TCK", "LC12A02TCK", "LC12A03TCK", "LC12A04TCK", "LC12A05TCK", "LC12A06TCK", "LC12A07TCK", "LC12A08TCK", "LC12A09TCK", "LC12A10TCK", "LC12A11TCK", "LC12A12TCK", "LC12A13TCK", "LC12A14TCK", "LC12A15TCK", "LC12A16TCK", "LC12A17TCK", "LC12A18TCK", "LC12A19TCK", "LC12A20TCK", "LC12A21TCK", "LC12A22TCK" ]
    },
    {
      "LocationCode1": "LC12A01TCM3",
      "LocationCode2": [ "LC12A01TCK", "LC12A02TCK", "LC12A03TCK", "LC12A04TCK", "LC12A05TCK", "LC12A06TCK", "LC12A07TCK", "LC12A08TCK", "LC12A09TCK", "LC12A10TCK", "LC12A11TCK", "LC12A12TCK", "LC12A13TCK", "LC12A14TCK", "LC12A15TCK", "LC12A16TCK", "LC12A17TCK", "LC12A18TCK", "LC12A19TCK", "LC12A20TCK", "LC12A21TCK", "LC12A22TCK" ]
    }
  ]
}
HH.WCS.ZCQTJ/Entitys/ConfigJsonEntitys.cs
@@ -56,6 +56,34 @@
        public string S_Note { get; set; }
    }
    /// <summary>
    /// 出库任务量临界表
    /// </summary>
    [ST("出库任务量临界表")]
    public class OutAreaTaskAnyJbEntitys : BaseModel
    {
        /// <summary>
        /// 出库的库区
        /// </summary>
        public string S_AreaCode { get; set; }
        /// <summary>
        /// 任务数量
        /// </summary>
        public int N_TaskQuantity { get; set; }
        /// <summary>
        /// 开关
        /// </summary>
        public string S_IsUse { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        public string S_Note { get; set; }
    }
    /// <summary>
    /// 功能开关表
    /// </summary>
@@ -149,6 +177,17 @@
        /// </summary>
        public string LocationCode2 { get; set; }
    }
    public class ConfigValueListTwo
    {
        /// <summary>
        /// 满货位
        /// </summary>
        public string LocationCode1 { get; set; }
        /// <summary>
        /// 空货位
        /// </summary>
        public List<string> LocationCode2 { get; set; }
    }
    /// <summary>
    /// 大屏库区任务数统计
@@ -158,4 +197,10 @@
        public string AreaCode { get; set; }
        public string TrayState { get; set; }
    }
    public class AgvCodeTs
    {
        public List<string> LocationCode { get; set; }
        public List<string> EndAreaCode { get; set; }
    }
}
HH.WCS.ZCQTJ/Entitys/S_AGV_CONDITIONEntitys.cs
@@ -1,6 +1,7 @@
using HH.WCS.Hexafluo.util;
using HH.WCS.Hexafluo.wms;
using SqlSugar;
using System.Collections.Generic;
namespace HH.WCS.ZCQTJ.Entitys
{
@@ -137,4 +138,81 @@
        public string Agvstate_s { get; set; }
        #endregion
    }
    public class AgvWcsCarryMsg
    {
        /// <summary>
        /// Agv车体信息
        /// </summary>
        public List<AgvCarryMsg> AgvMsgList { get; set; }
        /// <summary>
        /// Wcs设备信息
        /// </summary>
        public List<WcsCarryMsg> WcsMsgList { get; set; }
    }
    /// <summary>
    /// 给站台的Agv信息
    /// </summary>
    public class AgvCarryMsg
    {
        /// <summary>
        /// 车号
        /// </summary>
        public string forkliftNo { get; set; }
        /// <summary>
        /// agv状态
        /// </summary>
        public string Agvstate_s { get; set; }
        /// <summary>
        /// 电池电量
        /// </summary>
        public string Battery_Soc { get; set; }
        /// <summary>
        /// 托盘码
        /// </summary>
        public string TrayCode { get; set; }
        /// <summary>
        /// 车辆XY坐标(cm)
        /// </summary>
        public string Pos_XY { get; set; }
    }
    public class WcsCarryMsg
    {
        /// <summary>
        /// 设备编号
        /// </summary>
        public string dvcNo { get; set; }
        /// <summary>
        /// X坐标
        /// </summary>
        public string posX { get; set; }
        /// <summary>
        /// Y坐标
        /// </summary>
        public string posY { get; set; }
        /// <summary>
        /// Y坐标
        /// </summary>
        public string posZ { get; set; }
        /// <summary>
        /// 运行状态
        /// </summary>
        public string dvcState { get; set; }
        /// <summary>
        /// 载货托盘
        /// </summary>
        public string dvcCont { get; set; }
    }
}
HH.WCS.ZCQTJ/api/WmsController.cs
@@ -1570,7 +1570,6 @@
                    {
                        throw new Exception("未查询到该任务");
                    }
                    if (transportTask.S_TYPE == "入库" && !string.IsNullOrEmpty(transportTask.mark))
                    {
                        if (State.clientType == "1")
@@ -1580,6 +1579,7 @@
                    }
                    else if (transportTask.S_TYPE == "入库")
                    {
                        if (State.clientType == "1")
                        {
                            NDCHelper.ChangeParam(State.requestPk, 1103, 18);
@@ -1587,9 +1587,20 @@
                    }
                    else if (transportTask.S_TYPE == "出库")
                    {
                        if (State.clientType == "1")
                        var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == transportTask.S_END_LOC)?.First();
                        if (tac?.CtiaMode == "立库")
                        {
                            NDCHelper.ChangeParam(State.requestPk, 1101, 18);
                            if (State.clientType == "1")
                            {
                                NDCHelper.ChangeParam(State.requestPk, 1103, 18);
                            }
                        }
                        else
                        {
                            if (State.clientType == "1")
                            {
                                NDCHelper.ChangeParam(State.requestPk, 1101, 18);
                            }
                        }
                    }
                }
@@ -3337,11 +3348,136 @@
            }
        }
        #endregion
        #region Agv载货信息接口
        /// <summary>
        /// Agv载货信息接口
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("ZcAgvVanAge")]
        public OperateResult ZcAgvVanAge()
        {
            try
            {
                var chi = new SqlHelper<object>().GetInstance();
                var newDb = chi.CopyNew();
                //查询所有正在执行的agv任务 并且有车号
                List<string> AgvTaskState = new List<string> { "未执行", "已推送", "执行中", "完成", "取消" };
                var AgvtransportTask = newDb.Queryable<WMSTask>().Where(e => e.S_NOTE == "agv任务" && !AgvTaskState.Contains(e.S_B_STATE)).ToList();
                var agv = newDb.Queryable<S_AGV_CONDITIONEntitys>().ToList();
                //根据车号排序
                agv = agv.OrderBy(e => int.Parse(e.forkliftNo)).ToList();
                AgvWcsCarryMsg agvWcsCar = new AgvWcsCarryMsg();
                List<AgvCarryMsg> AgvMsgL = new List<AgvCarryMsg>();
                foreach (var item in agv)
                {
                    var Model = new AgvCarryMsg();
                    Model.forkliftNo = item.forkliftNo;
                    Model.Agvstate_s = item.Agvstate_s;
                    Model.Battery_Soc = item.Battery_Soc;
                    Model.Pos_XY = $"{item.Pos_X},{item.Pos_Y}";
                    var agvTask = AgvtransportTask.Find(e => e.S_EQ_NO == item.forkliftNo);
                    if (agvTask != null)
                    {
                        Model.TrayCode = agvTask.S_CNTRS;
                    }
                    AgvMsgL.Add(Model);
                }
                var Wcs = BLLCreator.Create<WcsTask>().WcsdataBoard();
                agvWcsCar.AgvMsgList = AgvMsgL;
                agvWcsCar.WcsMsgList = Wcs;
                return OperateResult.Succeed("", JsonConvert.SerializeObject(agvWcsCar));
            }
            catch (Exception ex)
            {
                return OperateResult.Error(ex.Message);
            }
        }
        #endregion
        #region MES修改智能空桶对应空托缓存点容量
        /// <summary>
        /// MES修改智能空桶对应空托缓存点容量
        /// </summary>
        /// <param name="LocationCode">满托入库点位</param>
        /// <returns></returns>
        [HttpGet]
        [Route("ZcMesUpdateLoNum")]
        public OperateResult ZcMesUpdateLoNum(string LocationCode)
        {
            LogHelper.Info("MES", $"MES修改智能空桶对应空托缓存点容量 入参:{LocationCode}");
            var chi = new SqlHelper<object>().GetInstance();
            var newDb = chi.CopyNew();
            try
            {
                Location location2 = null;
                List<ConfigValueList> ListValues = new List<ConfigValueList>();
                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 == LocationCode);
                        if (ggf != null)
                        {
                            location2 = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == ggf.LocationCode2)?.First();
                            if (location2 != null && (location2.N_CURRENT_NUM - 1 >= 0))
                            {
                                try
                                {
                                    newDb.BeginTran();
                                    var 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失败");
                                    }
                                    LogHelper.Info("MES", $"MES修改智能空桶对应空托缓存点容量  修改成功 修改的货位为{location2.S_LOC_CODE}");
                                    newDb.CommitTran();
                                    return OperateResult.Succeed();
                                }
                                catch (Exception ex)
                                {
                                    newDb.RollbackTran();
                                    LogHelper.Info("MES", $"MES修改智能空桶对应空托缓存点容量 {ex.Message}");
                                    return OperateResult.Error(ex.Message);
                                }
                            }
                            else
                            {
                                LogHelper.Info("MES", $"MES修改智能空桶对应空托缓存点容量 {location2.N_CURRENT_NUM} 减去1后不在大于/等于0  故而不允许减少");
                                return OperateResult.Succeed();
                            }
                        }
                    }
                }
                throw new Exception("未查询到 智能空桶缓存 相关配置信息");
            }
            catch (Exception ex)
            {
                LogHelper.Info("MES", $"MES修改智能空桶对应空托缓存点容量 报错:{ex.Message}");
                return OperateResult.Error(ex.Message);
            }
        }
        #endregion
        #endregion
        [HttpGet]
        [Route("asss")]
        public OperateResult asss(int T)
        public OperateResult asss()
        {
            var transportTask = STAttribute.GetValueTwo("TTXB-送满取空");
            var ListString = JsonConvert.DeserializeObject<List<ConfigValueListTwo>>(transportTask);
            return OperateResult.Succeed(JsonConvert.SerializeObject(ListString));
            // List<OperateResult> nn = new List<OperateResult>();
            //var ca = BLLCreator.Create<IdGuid>().TaskNo("CK");
            //LogHelper.Info("任务下发", "MES下发任务参数:");
HH.WCS.ZCQTJ/core/TaskCore.cs
@@ -2,6 +2,7 @@
using HH.WCS.Hexafluo.process;
using HH.WCS.Hexafluo.util;
using HH.WCS.Hexafluo.wms;
using HH.WCS.SJML.Entitys;
using HH.WCS.SJML.util;
using HH.WCS.ZCQTJ.Entitys;
using Newtonsoft.Json;
@@ -90,11 +91,38 @@
            //获取所有未执行的任务
            lock (locko9)
            {
                var Lo = SqlSugarHelper.Db.Queryable<TaskLockEntitys>().Where(a => a.DeviceName == "AGV")?.First();
                var chi = new SqlHelper<object>().GetInstance();
                var newDb = chi.CopyNew();
                var Lo = newDb.Queryable<TaskLockEntitys>().Where(a => a.DeviceName == "AGV")?.First();
                DateTime date = DateTime.Now;
                if (Lo != null && Lo.IsEnable == "Y")
                {
                    List<string> state = new List<string> { "未执行", "待推送" };
                    var list = TaskHelper.GetTaskListByState(state);
                    //查询是否有送满取空的 空入任务 有的话需要等待20分钟
                    var transportTask = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "送满取空对应的空托点位")?.First();
                    if (transportTask != null)
                    {
                        var ListString = JsonConvert.DeserializeObject<List<string>>(transportTask.TypeJson);
                        if (ListString.Count() > 0)
                        {
                            //剔除时间没到20分钟的空托入库--特制
                            var TiemTask = list.FindAll(e => ListString.Contains(e.S_START_LOC) && e.S_TYPE == "入库").ToList();
                            if (TiemTask.Count() > 0)
                            {
                                foreach (var item in TiemTask)
                                {
                                    if (item.T_CREATE.AddMinutes(20) > date)//没超时20分钟
                                    {
                                        //排除
                                        list.Remove(item);
                                        LogHelper.Info("NDC", $"没超时20分钟 排除的任务有:{JsonConvert.SerializeObject(item)}");
                                    }
                                }
                            }
                        }
                    }
                    var RkTask = list.FindAll(e => e.S_TYPE == "入库").ToList();
                    //  var CkTask = list.FindAll(e => e.S_TYPE == "出库").ToList();
                    if (RkTask.Count > 0)
@@ -105,7 +133,7 @@
                            TaskProcess.SendTask(item);
                        }
                    }
                    var CkTaskList = SqlSugarHelper.Db.Queryable<WMSTask>().Where(a => state.Contains(a.S_B_STATE.Trim())
                    var CkTaskList = newDb.Queryable<WMSTask>().Where(a => state.Contains(a.S_B_STATE.Trim())
                    && a.S_NOTE == "agv任务" && a.S_TYPE == "出库" && a.S_START_LAREA != "TMCKJBW").ToList();
                    if (CkTaskList.Count > 0)
                    {
@@ -140,7 +168,7 @@
                            //else
                            //{
                            List<string> States = new List<string>() { "已推送", "执行中", "开始取货" };
                            var taskList = SqlSugarHelper.Db.Queryable<WMSTask>().Where(e => e.S_START_LOC == item.S_START_LOC
                            var taskList = newDb.Queryable<WMSTask>().Where(e => e.S_START_LOC == item.S_START_LOC
                            && States.Contains(e.S_B_STATE.Trim()) && e.S_NOTE == "agv任务").ToList();
                            LogHelper.Info("NDC", $"出库正在判断是否可以下发的 agv任务 起点库区不是LC11M的agv任务(判断是否有相同起点的别的agv任务):{JsonConvert.SerializeObject(taskList)}");
                            if (taskList.Count > 0)
@@ -151,7 +179,7 @@
                            //  }
                        }
                    }
                    var CkTaskList1 = SqlSugarHelper.Db.Queryable<WMSTask>().Where(a => state.Contains(a.S_B_STATE.Trim())
                    var CkTaskList1 = newDb.Queryable<WMSTask>().Where(a => state.Contains(a.S_B_STATE.Trim())
                  && a.S_NOTE == "agv任务" && a.S_TYPE == "出库" && a.S_START_LAREA == "TMCKJBW").OrderBy(e => e.T_CREATE).ToList();
                    if (CkTaskList1.Count() > 0)
@@ -162,7 +190,7 @@
                        {
                            LogHelper.Info("NDC", $"出库正在判断是否可以下发的 agv任务号:{item.S_TASK_NO}");
                            //查询主任务的起点库区
                            var ZhuTask = SqlSugarHelper.Db.Queryable<WMSTask>().Where(e => e.S_SRC_NO == item.S_SRC_NO).ToList();
                            var ZhuTask = newDb.Queryable<WMSTask>().Where(e => e.S_SRC_NO == item.S_SRC_NO).ToList();
                            LogHelper.Info("NDC", $"出库正在判断是否可以下发的 agv任务 所对应的所有相关任务:{JsonConvert.SerializeObject(ZhuTask)}");
                            var hh = ZhuTask.FindAll(e => e.S_START_LAREA == "LC11M").ToList();
                            if (hh.Any())
HH.WCS.ZCQTJ/dispatch/WcsTask.cs
@@ -1,6 +1,8 @@
using HH.WCS.Hexafluo;
using HH.WCS.Hexafluo.util;
using HH.WCS.Hexafluo.wms;
using HH.WCS.SJML.Bll;
using HH.WCS.SJML.Comm;
using HH.WCS.SJML.Dto;
using HH.WCS.ZCQTJ.Entitys;
using Newtonsoft.Json;
@@ -393,10 +395,44 @@
                return returnEntity;
            }
        }
        /// <summary>
        /// WCS设备信息查询
        /// </summary>
        /// <returns></returns>
        public List<WcsCarryMsg> WcsdataBoard()
        {
            List<WcsCarryMsg> WcsCarry = new List<WcsCarryMsg>();
            try
            {
                var interact = new
                {
                    requestPk = BLLCreator.Create<IdWorker>().nextId("CX"),
                    reqTime = DateTime.Now
                };
                LogHelper.Info("立库", "查询立库设备信息 参数为:" + JsonConvert.SerializeObject(interact));
                var result = apiHelper.Post(baseUrl + "/wcs-admin/api/dataBoard", JsonConvert.SerializeObject(interact));
                LogHelper.Info("立库", "给立库下达安全请求 立库返回参数为:" + result);
                if (string.IsNullOrEmpty(result))
                {
                    return WcsCarry;
                }
                var data = JsonConvert.DeserializeObject<List<WcsCarryMsg>>(result);
                return data;
            }
            catch (Exception ex)
            {
                LogHelper.Info("立库", "查询立库设备信息 报错:" + ex.Message);
                return WcsCarry;
            }
        }
        public OperateResult WcsCallbackAnyc(string JsonValue)
        {
            try
            {
                var result = apiHelper.Post(baseUrl + "/wcs-admin/api/agvCallback", JsonValue);
                LogHelper.Info("立库", "给立库下达安全请求 立库返回参数为:" + result);
                if (string.IsNullOrEmpty(result))
HH.WCS.ZCQTJ/process/TaskProcess.cs
@@ -870,6 +870,11 @@
                                    }
                                }
                            }
                            else if (tac.CtiaMode == "立库")
                            {
                                task.S_TYPE = "入库";
                                BLLCreator.CreateSingleton<WcsTask>().WcsCallback(task, state, forkliftNo);
                            }
                        }
                    }
                }
@@ -1028,7 +1033,7 @@
                                }
                            }
                            if (tac.CtiaMode == "VMI")
                            else if (tac.CtiaMode == "VMI")
                            {
                                var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
                                if (Alone == null)
@@ -1105,6 +1110,11 @@
                                    }
                                    LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0成功");
                                }
                            }
                            else if (tac.CtiaMode == "立库")
                            {
                                task.S_TYPE = "入库";
                                var tra = BLLCreator.Create<WcsTask>().WcsCallback(task, state, forkliftNo);
                            }
                        }
                    }
@@ -2673,18 +2683,31 @@
        /// <param name="mst"></param>
        internal static bool SendTask(WMSTask mst)
        {
            var chi = new SqlHelper<object>().GetInstance();
            var newDb = chi.CopyNew();
            try
            {
                var result = false;
                var start = 0; var end = 0;
                var taskType = mst.S_TYPE.Trim();
                var taskState = mst.S_B_STATE.Trim();
                if (taskState == "未执行" || taskState == "待推送")
                {
                    var dic = new Dictionary<string, string>();
                    var dic1 = new Dictionary<string, string>();
                    LogHelper.Info("NDC", $"agv任务号:{mst.S_TASK_NO}");
                    LogHelper.Info("NDC", $"agv任务起点:{mst.S_START_LOC}");
                    start = LocationHelper.GetAgvSiteZc(mst.S_START_LOC);
                    var transportTask = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "特殊流程站点")?.First();
                    if (transportTask != null)
                    {
                        var ListString = JsonConvert.DeserializeObject<AgvCodeTs>(transportTask.TypeJson);
                        if (ListString != null && ListString.LocationCode != null && ListString.EndAreaCode != null && ListString.LocationCode.Contains(mst.S_START_LOC) && ListString.EndAreaCode.Contains(mst.S_END_LAREA))
                        {
                            start = LocationHelper.GetAgvSiteZc2(mst.S_START_LOC);
                        }
                    }
                    LogHelper.Info("NDC", $"agv 查询的站点(起点):{start}");
                    LogHelper.Info("NDC", $"agv任务终点:{mst.S_END_LOC}");
                    end = LocationHelper.GetAgvSiteZc(mst.S_END_LOC);
@@ -2692,8 +2715,6 @@
                    Console.WriteLine($"SendTask {mst.S_TASK_NO}");
                    Console.WriteLine("start=" + start);
                    Console.WriteLine("end= " + end);
                    var dic = new Dictionary<string, string>();
                    var dic1 = new Dictionary<string, string>();
                    dic.Add("Pri", mst.N_PRIORITY.ToString());//优先级
                    dic.Add("No", mst.S_TASK_NO.Trim());
                    dic1.Add("From", start.ToString());//起点
@@ -2706,7 +2727,7 @@
                    }
                    else
                    {
                        var tac = SqlSugarHelper.Db.Queryable<TN_TcpCont>().Where(a => a.LocationCode == mst.S_END_LOC)?.First();
                        var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == mst.S_END_LOC)?.First();
                        if (tac != null && tac.C_IS_RFID == "Y")
                        {
HH.WCS.ZCQTJ/util/LogHelper.cs
@@ -206,7 +206,7 @@
            var loggerNames = new List<string>() { "HosttoagvTask", "HosttoagvCar", "NDC", "MES", "绑定解绑", "重量计算", "物料品质修改", "入库",
                "入库算法", "出库", "出库算法", "处理自管任务", "更换终点", "更换起点", "执行的SQL", "ERP传参", "完工回报",
                "任务下发", "给立库下达任务", "立库", "立库任务下达", "发送给MES", "回滚任务服务", "INFO",
                "Wcs报警信息", "巷道用禁用", "接驳位用禁用", "转运", "钉钉通知", "下发无托盘入库立库任务","调整优先级","确定入库托盘信息","计算AGV时间","出库到接驳位","入库改道","ts切换路线" };
                "Wcs报警信息", "巷道用禁用", "接驳位用禁用", "转运", "钉钉通知", "下发无托盘入库立库任务","调整优先级","确定入库托盘信息","计算AGV时间","出库到接驳位","入库改道","ts切换路线","获取json文件" };
            LogManager.Configuration = DefaultConfig(loggerNames);
        }
        public static ILogger CreateLogger(string name)
HH.WCS.ZCQTJ/util/STAttribute .cs
@@ -43,7 +43,28 @@
            }
        }
        public static string GetValueTwo(string name)
        {
            try
            {
                var jsonFile = System.AppDomain.CurrentDomain.BaseDirectory + "Config\\Config.json";
                using (System.IO.StreamReader file = System.IO.File.OpenText(jsonFile))
                {
                    using (JsonTextReader reader = new JsonTextReader(file))
                    {
                        JObject o = (JObject)JToken.ReadFrom(reader);
                        var value = o[name].ToString();
                        return value.Replace("\r\n", "");
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.DanInfo("获取json文件", "值timeSpan失败!原因:" + ex.Message);
                return "";
            }
        }
    }
HH.WCS.ZCQTJ/wms/LocationHelper.cs
@@ -91,6 +91,11 @@
            var location = GetLocZc(loc.Trim());
            return location.N_AGV_CODE;
        }
        internal static int GetAgvSiteZc2(string loc)
        {
            var location = GetLocZc(loc.Trim());
            return location.N_AGV_CODE_T;
        }
        internal static int ZcGetAgvSite(string loc)
HH.WCS.ZCQTJ/wms/WMSModel.cs
@@ -38,11 +38,17 @@
        public string S_AGV_SITE { get; set; }
        /// <summary>
        /// 需要注意
        /// 需要注意 agv站点1
        /// </summary>
        //[SugarColumn(IsIgnore = true)]
        public int N_AGV_CODE { get; set; }
        /// <summary>
        /// agv站点2
        /// </summary>
        public int N_AGV_CODE_T { get; set; }
        /// <summary>
        /// 出库时间
        /// </summary>