111
jinxin
2025-06-03 d0c1502a17c8d945e16b498792bd8e50ea9fea9f
111
2个文件已添加
8个文件已修改
305 ■■■■ 已修改文件
.vs/VSWorkspaceState.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vs/slnx.sqlite 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.WeiLi/HH.WCS.Mobox3.WeiLi.sln 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.WeiLi/api/ApiHelper.cs 181 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.WeiLi/api/MoboxController.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.WeiLi/core/WCSCore.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.WeiLi/core/WMSCore.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.WeiLi/models/TN_Material.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.WeiLi/wms/WCSHelper.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.WeiLi/wms/WMSHelper.cs 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vs/VSWorkspaceState.json
New file
@@ -0,0 +1,7 @@
{
  "ExpandedNodes": [
    ""
  ],
  "SelectedNode": "\\E:\\项目\\Weili",
  "PreviewInSolutionExplorer": false
}
.vs/slnx.sqlite
Binary files differ
HH.WCS.Mobox3.WeiLi/HH.WCS.Mobox3.WeiLi.sln
New file
@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.33529.622
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.WeiLi", "HH.WCS.Mobox3.WeiLi.csproj", "{E98DD345-9B0E-46C8-B0AB-20B9915ACAEA}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {E98DD345-9B0E-46C8-B0AB-20B9915ACAEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {E98DD345-9B0E-46C8-B0AB-20B9915ACAEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {E98DD345-9B0E-46C8-B0AB-20B9915ACAEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {E98DD345-9B0E-46C8-B0AB-20B9915ACAEA}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {D73F8D67-E77E-493C-A8A2-A6CFB6FDDE06}
    EndGlobalSection
EndGlobal
HH.WCS.Mobox3.WeiLi/api/ApiHelper.cs
@@ -207,6 +207,30 @@
            return result;
        }
        internal static SimpleResult ErrorOperation(MoboxOperationBase model)
        {
            var result = new SimpleResult();
            var db = new SqlHelper<object>().GetInstance();
            var wmsTask = db.Queryable<WMSTask>().Where(a => a.S_CODE == model.OperationNo).First();
            if (wmsTask != null)
            {
                LogHelper.Info($"清除错误作业 解绑托盘 托盘{wmsTask.S_CNTR_CODE}");
                db.Deleteable<LocCntrRel>().Where(a => a.S_CNTR_CODE == wmsTask.S_CNTR_CODE).ExecuteCommand();
                db.Deleteable<CntrItemRel>().Where(a => a.S_CNTR_CODE == wmsTask.S_CNTR_CODE).ExecuteCommand();
                var locInfo = db.Queryable<Location>().Where(a => a.S_CODE == wmsTask.S_START_LOC).First();
                if (locInfo != null)
                {
                    LogHelper.Info($"清除错误作业 重置货位状态 货位{locInfo.S_CODE}");
                    locInfo.N_CURRENT_NUM = 0;
                    locInfo.N_LOCK_STATE = 0;
                    locInfo.S_LOCK_STATE = "无";
                    db.Updateable(locInfo).UpdateColumns(it => new { it.N_CURRENT_NUM, it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
                }
            }
            return result;
        }
        internal static TaskStateresutl GetTaskState(GetTaskStateModel model)
        {
            var db = new SqlHelper<object>().GetInstance();
@@ -785,9 +809,13 @@
                            //if (task.S_B_STATE != "取消" && task.S_B_STATE != "完成" && task.S_B_STATE != "关闭" && task.S_B_STATE != "强制完成")
                            //{
                            TaskProcess.OperateStatus(task, 6);
                            if (task.S_TYPE.Contains("入库"))
                            if (task.S_OP_NAME =="入库")
                            {
                                WMSHelper.AddChange(task);
                            }
                            if (task.S_OP_NAME == "出库")
                            {
                                WMSHelper.DeleteChange(task);
                            }
                            if (task.S_TYPE == "分拣回")
                            {
@@ -849,28 +877,28 @@
                }
            }
            else
            {
                LogHelper.Info($"{locinfo.N_ROADWAY} 巷道找不到可入货位 随机分配货位");
                endbit = WMSHelper.GetLiKuLocationIn(locinfo.S_AREA_CODE, 0, locinfo.S_TYPE);
                if (endbit != null)
                {
                    LogHelper.Info($"查找到改道货位为{endbit.S_CODE}");
                    //修改任务数据 终点 备注:改位
                    LocationHelper.LockLoc(endbit.S_CODE, 1);
                    wmstask.S_END_LOC = endbit.S_CODE;
                    db.Updateable(wmstask).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand();
                    task.S_END_LOC = endbit.S_CODE;
                    task.S_NOTE = "改位";
                    db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_NOTE }).ExecuteCommand();
                    var agvBit = db.Queryable<PeiZhi>().Where(it => it.BitCode == endbit.S_CODE).First();
                    if (agvBit != null)
                    {
                        result.new_locate_no = agvBit.PlcLocation;
                    }
                }
            }
            //else
            //{
            //    LogHelper.Info($"{locinfo.N_ROADWAY} 巷道找不到可入货位 随机分配货位");
            //    endbit = WMSHelper.GetLiKuLocationIn(locinfo.S_AREA_CODE, 0, locinfo.S_TYPE);
            //    if (endbit != null)
            //    {
            //        LogHelper.Info($"查找到改道货位为{endbit.S_CODE}");
            //        //修改任务数据 终点 备注:改位
            //        LocationHelper.LockLoc(endbit.S_CODE, 1);
            //        wmstask.S_END_LOC = endbit.S_CODE;
            //        db.Updateable(wmstask).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand();
            //        task.S_END_LOC = endbit.S_CODE;
            //        task.S_NOTE = "改位";
            //        db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_NOTE }).ExecuteCommand();
            //
            //        var agvBit = db.Queryable<PeiZhi>().Where(it => it.BitCode == endbit.S_CODE).First();
            //        if (agvBit != null)
            //        {
            //            result.new_locate_no = agvBit.PlcLocation;
            //        }
            //    }
            //}
        }
        internal static SimpleResult OutboundOrderExecute(OutboundOrderCheck model)
        {
@@ -1631,46 +1659,98 @@
        {
            WeiLiResult result = new WeiLiResult();
            var db = new SqlHelper<object>().GetInstance();
            var tasks = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.orderNo).ToList();
            if (tasks.Count >= 1)
            {
                //流程任务数量执行超过一条 任务不允许取消
                result.code = 500;
                result.msg = "流程任务执行中途不允许取消";
                return result;
            }
            //var tasks = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.orderNo).ToList();
            //if (tasks.Count >= 1)
            //{
            //    //流程任务数量执行超过一条 任务不允许取消
            //    result.code = 500;
            //    result.msg = "流程任务执行中途不允许取消";
            //    return result;
            //}
            //var task = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.orderNo).OrderByDescending(a => a.T_CREATE).First();
            //if (task != null)
            //{
            //    if (WCSHelper.CheckActionRecordExist(task.S_CODE, 4))
            //    {
            //        result.code = 500;
            //        result.msg = "任务已取货完成 不允许取消";
            //        return result;
            //    }
            //    if (task.N_B_STATE == 0)
            //    {
            //        //等待直接修改状态为取消
            //        WCSHelper.UpdateStatus(model.orderNo, 5);
            //        //result.msg = "任务等待,直接取消";
            //    }
            //    else if (task.N_B_STATE != 3 && task.N_B_STATE != 4)
            //    {
            //        if (task.S_TYPE == "杭奥")
            //        {
            //            //通知立库取消任务
            //        }
            //        else
            //        {
            //            //已推送但是没有完成或者取消,通知hosttoagv
            //            NDCHelper.Cancel(task.S_CODE.Trim());
            //            //result.msg = "任务取消已经发送给小车";
            //        }
            //    }
            //    else
            //    {
            //        result.code = 500;
            //        result.msg = "任务已结束";
            //    }
            //}
            //else
            //{
            //    result.code = 500;
            //    result.msg = "任务不存在";
            //}
            var task = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.orderNo).OrderByDescending(a => a.T_CREATE).First();
            if (task != null)
            {
                if (WCSHelper.CheckActionRecordExist(task.S_CODE, 4))
                var wmsTask = WMSHelper.GetWmsTask(task.S_OP_CODE);
                if (wmsTask != null)
                {
                    result.code = 500;
                    result.msg = "任务已取货完成 不允许取消";
                    return result;
                }
                if (task.N_B_STATE == 0)
                {
                    //等待直接修改状态为取消
                    WCSHelper.UpdateStatus(model.orderNo, 5);
                    //result.msg = "任务等待,直接取消";
                }
                else if (task.N_B_STATE != 3 && task.N_B_STATE != 4)
                {
                    if (task.S_TYPE == "杭奥")
                    if (task.N_B_STATE == 0)
                    {
                        //通知立库取消任务
                        //等待直接修改状态为取消
                        WCSHelper.UpdateStatus(task.S_CODE, 4);
                        wmsTask.N_B_STATE = 6;
                        WMSHelper.UpdateTaskState(wmsTask);
                        LocationHelper.UnLockLoc(task.S_START_LOC);
                        LocationHelper.UnLockLoc(task.S_END_LOC);
                        LocationHelper.UnLockLoc(wmsTask.S_END_LOC);
                        result.msg = "任务等待,直接取消";
                    }
                    else if (task.N_B_STATE != 3 && task.N_B_STATE != 4)
                    {
                        if (task.S_SCHEDULE_TYPE == "NDC")
                        {
                            //已推送但是没有完成或者取消,通知hosttoagv
                            NDCApi.CancelOrder(task.S_CODE.Trim());
                        }
                        else
                        {
                            TaskProcess.Cancel(task);
                            TaskProcess.OperateStatus(task, 7);
                            WCSHelper.Fail(task);
                            WMSHelper.Fail(task);
                        }
                        result.msg = "任务取消已经发送给小车";
                    }
                    else
                    {
                        //已推送但是没有完成或者取消,通知hosttoagv
                        NDCHelper.Cancel(task.S_CODE.Trim());
                        //result.msg = "任务取消已经发送给小车";
                        result.msg = "任务已结束";
                    }
                }
                else
                {
                    result.code = 500;
                    result.msg = "任务已结束";
                    result.msg = "任务所处的作业不存在";
                }
            }
            else
@@ -1678,6 +1758,7 @@
                result.code = 500;
                result.msg = "任务不存在";
            }
            return result;
        }
HH.WCS.Mobox3.WeiLi/api/MoboxController.cs
@@ -30,6 +30,7 @@
                var wmsTask = WMSHelper.GetWmsTask(task.S_OP_CODE);
                if (wmsTask != null)
                {
                    if (task.N_B_STATE == 0)
                    {
                        //等待直接修改状态为取消
@@ -49,7 +50,7 @@
                            //已推送但是没有完成或者取消,通知hosttoagv
                            NDCApi.CancelOrder(task.S_CODE.Trim());
                        }
                        else
                        else
                        {
                            TaskProcess.Cancel(task);
                            TaskProcess.OperateStatus(task, 7);
@@ -64,8 +65,9 @@
                        result.resultCode = 1;
                        result.resultMsg = "任务已结束";
                    }
                }
                else
                else
                {
                    result.resultCode = 1;
                    result.resultMsg = "任务所处的作业不存在";
@@ -98,7 +100,7 @@
                    WMSHelper.UpdateTaskState(op);
                    result.resultMsg = "任务等待,直接取消";
                }
                else if (op.N_B_STATE ==1)
                else if (op.N_B_STATE == 1)
                {
                    //已推送但是没有完成或者取消,通知hosttoagv
                    //NDCHelper.Cancel(task.S_CODE.Trim());
@@ -270,7 +272,18 @@
            return ApiHelper.WeiLiDisbutionIn(model);
        }
        /// <summary>
        /// PDA分拣回
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("ErrorOperation")]
        public SimpleResult ErrorOperation(MoboxOperationBase model)
        {
            LogHelper.Info($"清除错误作业 入参={JsonConvert.SerializeObject(model)}");
            return ApiHelper.ErrorOperation(model);
        }
        ///// <summary>
        ///// 呼叫空框
HH.WCS.Mobox3.WeiLi/core/WCSCore.cs
@@ -46,10 +46,10 @@
                                case 4:
                                    WCSHelper.UpdateStatus(TN_Task, "取货完成");
                                    TaskProcess.OperateStatus(TN_Task, 4);
                                    if (TN_Task.S_OP_NAME == "出库")
                                    {
                                        WMSHelper.DeleteChange(TN_Task);
                                    }
                                    //if (TN_Task.S_OP_NAME == "出库")
                                    //{
                                    //    WMSHelper.DeleteChange(TN_Task);
                                    //}
                                    break;
                                case 5:
                                    WCSHelper.UpdateStatus(TN_Task, "开始卸货");
@@ -86,6 +86,8 @@
                        {
                            //安全请求等
                            TaskProcess.AddTaskAction(model);
                            WCSHelper.AddActionRecord(model.task_no, model.State, model.forklift_no, model.ext_data);
                            //TaskProcess.OperateReq(TN_Task, model.State, model.forklift_no, model.ext_data);
                        }
                    }
HH.WCS.Mobox3.WeiLi/core/WMSCore.cs
@@ -359,10 +359,15 @@
                                        };
                                        if (WCSHelper.CreateTask(wcsTask))
                                        {
                                            LogHelper.Info($"作业{a.S_CODE} 创建任务成功 修改作业状态");
                                            //更新作业状态为执行
                                            a.N_B_STATE = 1;
                                            a.S_B_STATE = "执行";
                                            WMSHelper.UpdateTaskState(a);
                                        }
                                        else
                                        {
                                            LogHelper.Info($"作业{a.S_CODE} 创建任务失败");
                                        }
                                    }
                                    else
@@ -472,6 +477,7 @@
                                        if (WCSHelper.CreateTask(wcsTask))
                                        {
                                            LogHelper.Info($"作业{a.S_CODE} 创建任务成功 修改作业状态");
                                            //更新作业状态为执行
                                            a.N_B_STATE = 1;
                                            a.S_B_STATE = "执行";
HH.WCS.Mobox3.WeiLi/models/TN_Material.cs
@@ -9,6 +9,7 @@
    {
        public string S_ITEM_CODE { get; set; }
        public string S_ITEM_NAME { get; set; }
        public string S_HEIGHT { get; set; }
        public string S_MP_TYPE { get; set; }
        public Nullable<float> F_WEIGHT { get; set; }
        public string S_MATERIAL { get; set; }
HH.WCS.Mobox3.WeiLi/wms/WCSHelper.cs
@@ -104,15 +104,21 @@
        internal static bool AddActionRecord(string no, int state, string forkliftNo, string extData) {
            var db = new SqlHelper<TaskAction>().GetInstance();
            var action = new TaskAction()
            var result = true;
            var info = db.Queryable<TaskAction>().Where(a => a.S_TASK_CODE == no && a.N_ACTION_CODE == state).First();
            if (info == null)
            {
                N_ACTION_CODE = state,
                S_TASK_CODE = no,
                S_EQ_CODE = forkliftNo,
                S_EQ_TYPE = "agv",
                S_DATA = extData
            };
            return db.Insertable(action).ExecuteCommand() > 0;
                var action = new TaskAction()
                {
                    N_ACTION_CODE = state,
                    S_TASK_CODE = no,
                    S_EQ_CODE = forkliftNo,
                    S_EQ_TYPE = "agv",
                    S_DATA = extData
                };
                result= db.Insertable(action).ExecuteCommand() > 0;
            }
            return result;
        }
        internal static bool CheckActionRecordExist(string no, int code) {
            var db = new SqlHelper<TaskAction>().GetInstance();
HH.WCS.Mobox3.WeiLi/wms/WMSHelper.cs
@@ -714,12 +714,12 @@
                db.Updateable(InventoryCntr).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
            }
            var InventoryCntr2 = db.Queryable<PlanInventory>().Where(a => a.S_CNTR_CODE == task.S_CNTR_CODE && a.N_B_STATE == 3).First();
            if (InventoryCntr2 != null && task.S_TYPE == "盘点回")
            {
                InventoryCntr2.N_B_STATE = 4;
                db.Updateable(InventoryCntr2).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
            }
            //var InventoryCntr2 = db.Queryable<PlanInventory>().Where(a => a.S_CNTR_CODE == task.S_CNTR_CODE && a.N_B_STATE == 3).First();
            //if (InventoryCntr2 != null && task.S_TYPE == "盘点回")
            //{
            //    InventoryCntr2.N_B_STATE = 4;
            //    db.Updateable(InventoryCntr2).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
            //}
        }
@@ -1098,6 +1098,26 @@
                        {
                            LogHelper.Info($"该料框无特殊规格 不需区分高低货位");
                        }
                        if (a.S_END_AREA == "11TLKQ")
                        {
                            //托盘高度从物料表中获取
                            var itemList = db.Queryable<CntrItemRel>().Where(it => it.S_CNTR_CODE == a.S_CNTR_CODE).ToList();
                            foreach (var item in itemList)
                            {
                                var itemInfo = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == item.S_ITEM_CODE).First();
                                if (itemInfo != null)
                                {
                                    loctype = itemInfo.S_HEIGHT;
                                    if (loctype == "高货位")
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                        //终点为立库的任务
                        result = GetLiKuLocationIn(a.S_END_AREA, 0, loctype);
                        if (result != null)