zhao
2021-07-02 081df17b8cc4a6e7e4f4e1e1887f24810e3ec2f9
HH.WMS.BLL/External/WmsApiBaseBLL.cs
@@ -1512,16 +1512,29 @@
            #endregion
            string tno = executeStatePara.transportTask.CN_S_TASK_NO.Trim();
            if (tno.IndexOf('_') > 0)
            {
                tno = tno.Split('_')[0];
            }
            // 获取主任务
            var task = BLLCreator.CreateDapper<TN_WM_TASKEntity>().GetSingleEntity(new
            var task = executeStatePara.transportTask;
            if (!string.IsNullOrEmpty(task.CN_S_EXT1))
            {
                CN_S_TASK_NO = tno
            });
                task = BLLCreator.CreateDapper<TN_WM_TASKEntity>().GetSingleEntity(new
                {
                    CN_S_TASK_NO = task.CN_S_EXT1
                });
            }
            TN_WM_TASKEntity task_kthk = null;
            // 特殊业务
            // 成型机满托出库完成时,要执行空托回库任务
            if (executeStatePara.transportTask.CN_S_EXT2 == TaskFlagConstants.CXJ_MTCK_SUB_2)
            {
                // 查找终点货位(线边货位)是否有未执行的空托回库任务
                task_kthk = BLLCreator.CreateDapper<TN_WM_TASKEntity>().GetSingleEntity(new
                {
                    CN_S_START_AREA = executeStatePara.transportTask.CN_S_END_AREA,
                    CN_S_START_BIT = executeStatePara.transportTask.CN_S_END_BIT,
                    CN_S_STATE = Constants.TaskState_NoExecuted,
                    CN_S_EXT3 = TaskSectionConstants.CXJ_KTHK_RECORD
                });
            }
            return UseTransaction(trans =>
            {
@@ -1545,92 +1558,295 @@
                    #region 海潮中策
                    // 半成品满托入库流程
                    if (task.CN_S_EXT1 == BusinessTypeConstants.BCP_MTRK)
                    #region 半成品
                    #region 空托出库
                    // 半成品-空托出库第一条子任务
                    if (executeStatePara.transportTask.CN_S_EXT2 == TaskFlagConstants.BCP_KTCK_SUB_1)
                    {
                        // 空托出库第一条子任务
                        if (executeStatePara.transportTask.CN_S_EXT2 == "ktck_sub_1")
                        // 接驳位状态改为:满
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            // 接驳位状态改为:满
                            CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                            {
                                CN_S_LOCATION_STATE = Constants.Location_State_Full
                            }, new
                            {
                                CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT
                            }, trans);
                            // 立库货位状态改为:空
                            CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                            {
                                CN_S_LOCATION_STATE = Constants.Location_State_Empty
                            }, new
                            {
                                CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
                            }, trans);
                            CN_S_LOCATION_STATE = Constants.Location_State_Full
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT
                        }, trans);
                        // 立库货位状态改为:空
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Empty
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
                        }, trans);
                            Log.Detail(logPara, "子任务完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO + ",更新接驳位状态-货位号:" + executeStatePara.transportTask.CN_S_END_BIT + "状态为:" + Constants.Location_State_Full + ",更新立库状态-货位号:" + executeStatePara.transportTask.CN_S_START_BIT + "状态为:" + Constants.Location_State_Empty);
                        }
                        // 空托出库第二条子任务
                        if (executeStatePara.transportTask.CN_S_EXT2 == "ktck_sub_2")
                        Log.Detail(logPara, "半成品-空托出库子任务一完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO
                            + ",更新接驳位状态-货位号:" + executeStatePara.transportTask.CN_S_END_BIT + "状态为:" + Constants.Location_State_Full
                            + ",更新立库状态-货位号:" + executeStatePara.transportTask.CN_S_START_BIT + "状态为:" + Constants.Location_State_Empty);
                    }
                    // 半成品-空托出库第二条子任务
                    else if (executeStatePara.transportTask.CN_S_EXT2 == TaskFlagConstants.BCP_KTCK_SUB_2)
                    {
                        // 主任务状态置为完成部分
                        // 主任务阶段置为半成品-满托入库
                        CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
                        {
                            // 主任务状态置为完成部分
                            // 主任务的子任务标识置空
                            // 主任务阶段置为半成品-满托入库
                            CN_S_STATE = Constants.TaskState_CompletePart,
                            CN_S_EXT3 = TaskSectionConstants.BCP_MTRK
                        }, new { CN_S_TASK_NO = task.CN_S_TASK_NO }, trans);
                        // 接驳位状态改为:正常
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Normal
                        }, new
                        {
                            CN_S_LOCATION_CODE = task.CN_S_CONNECT_BIT
                        }, trans);
                        // 准备点货位状态改为:正常
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Normal
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
                        }, trans);
                        // 线边货位不管控
                        Log.Detail(logPara, "半成品-空托出库子任务二完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO
                            + ",更新接驳位状态-货位号:" + task.CN_S_CONNECT_BIT + "状态为:" + Constants.Location_State_Normal
                            + ",更新准备点状态-货位号:" + executeStatePara.transportTask.CN_S_START_BIT + "状态为:" + Constants.Location_State_Normal
                            + ",更新主任务-任务号:" + task.CN_S_TASK_NO + "状态为:" + Constants.TaskState_CompletePart + "-阶段为:" + TaskSectionConstants.BCP_MTRK);
                    }
                    #endregion
                    #region 满托入库
                    // 半成品-满托入库第一条子任务
                    else if (executeStatePara.transportTask.CN_S_EXT2 == TaskFlagConstants.BCP_MTRK_SUB_1)
                    {
                        // 主任务状态置为完成部分
                        // 主任务阶段置为半成品-满托入库-第二阶段
                        CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
                        {
                            CN_S_STATE = Constants.TaskState_CompletePart,
                            CN_S_EXT3 = TaskSectionConstants.BCP_MTRK_SECOND
                        }, new { CN_S_TASK_NO = task.CN_S_TASK_NO }, trans);
                        // 线边货位不管控
                        // 接驳位状态改为:满
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Full
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT
                        }, trans);
                        Log.Detail(logPara, "半成品-满托入库子任务一完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO
                            + ",更新接驳位状态-货位号:" + executeStatePara.transportTask.CN_S_END_BIT + "状态为:" + Constants.Location_State_Full
                            + ",更新主任务-任务号:" + task.CN_S_TASK_NO + "状态为:" + Constants.TaskState_CompletePart + "-阶段为:" + TaskSectionConstants.BCP_MTRK_SECOND);
                    }
                    // 半成品-满托入库第二条子任务
                    else if (executeStatePara.transportTask.CN_S_EXT2 == TaskFlagConstants.BCP_MTRK_SUB_2)
                    {
                        // 主任务状态置为完成
                        // 阶段置为任务完成
                        CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
                        {
                            CN_S_STATE = Constants.TaskState_Complete,
                            CN_S_EXT3 = TaskSectionConstants.COMPLETE
                        }, new { CN_S_TASK_NO = task.CN_S_TASK_NO }, trans);
                        // 接驳位状态改为:正常
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Normal
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
                        }, trans);
                        // 立库状态改为:满
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Full
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT
                        }, trans);
                        Log.Detail(logPara, "半成品-满托入库子任务二完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO
                            + ",更新接驳位状态-货位号:" + executeStatePara.transportTask.CN_S_START_BIT + "状态为:" + Constants.Location_State_Normal
                            + ",更新立库状态-货位号:" + executeStatePara.transportTask.CN_S_END_BIT + "状态为:" + Constants.Location_State_Full
                            + ",更新主任务-任务号:" + task.CN_S_TASK_NO + "状态为:" + Constants.TaskState_Complete + "-阶段为:" + TaskSectionConstants.COMPLETE);
                    }
                    #endregion
                    #endregion
                    #region 成型机
                    #region 半成品回库
                    // 成型机-半成品回库第一条子任务
                    else if (executeStatePara.transportTask.CN_S_EXT2 == TaskFlagConstants.CXJ_BCPHK_SUB_1)
                    {
                        // 主任务状态置为完成部分
                        // 主任务阶段置为成型机-半成品回库-第二阶段
                        CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
                        {
                            CN_S_STATE = Constants.TaskState_CompletePart,
                            CN_S_EXT3 = TaskSectionConstants.CXJ_BCPHK_SECOND
                        }, new { CN_S_TASK_NO = task.CN_S_TASK_NO }, trans);
                        // 线边货位不管控
                        // 接驳位状态改为:满
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Full
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT
                        }, trans);
                        Log.Detail(logPara, "成型机-半成品回库子任务一完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO
                            + ",更新接驳位状态-货位号:" + executeStatePara.transportTask.CN_S_END_BIT + "状态为:" + Constants.Location_State_Full
                            + ",更新主任务-任务号:" + task.CN_S_TASK_NO + "状态为:" + Constants.TaskState_CompletePart + "-阶段为:" + TaskSectionConstants.CXJ_BCPHK_SECOND);
                    }
                    // 成型机-半成品回库第二条子任务
                    else if (executeStatePara.transportTask.CN_S_EXT2 == TaskFlagConstants.CXJ_BCPHK_SUB_2)
                    {
                        // 主任务状态置为完成
                        // 主任务阶段置为任务完成
                        CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
                        {
                            CN_S_STATE = Constants.TaskState_Complete,
                            CN_S_EXT3 = TaskSectionConstants.COMPLETE
                        }, new { CN_S_TASK_NO = task.CN_S_TASK_NO }, trans);
                        // 接驳位状态改为:正常
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Normal
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
                        }, trans);
                        // 立库状态改为:满
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Full
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT
                        }, trans);
                        Log.Detail(logPara, "成型机-半成品回库子任务二完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO
                            + ",更新接驳位状态-货位号:" + executeStatePara.transportTask.CN_S_START_BIT + "状态为:" + Constants.Location_State_Normal
                            + ",更新立库状态-货位号:" + executeStatePara.transportTask.CN_S_END_BIT + "状态为:" + Constants.Location_State_Full
                            + ",更新主任务-任务号:" + task.CN_S_TASK_NO + "状态为:" + Constants.TaskState_Complete + "-阶段为:" + TaskSectionConstants.COMPLETE);
                    }
                    #endregion
                    #region 满托出库
                    // 成型机-满托出库第一条子任务
                    if (executeStatePara.transportTask.CN_S_EXT2 == TaskFlagConstants.CXJ_MTCK_SUB_1)
                    {
                        // 接驳位状态改为:满
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Full
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT
                        }, trans);
                        // 立库货位状态改为:空
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Empty
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
                        }, trans);
                        Log.Detail(logPara, "成型机-满托出库子任务一完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO
                            + ",更新接驳位状态-货位号:" + executeStatePara.transportTask.CN_S_END_BIT + "状态为:" + Constants.Location_State_Full
                            + ",更新立库状态-货位号:" + executeStatePara.transportTask.CN_S_START_BIT + "状态为:" + Constants.Location_State_Empty);
                    }
                    // 成型机-满托出库第二条子任务
                    else if (executeStatePara.transportTask.CN_S_EXT2 == TaskFlagConstants.CXJ_MTCK_SUB_2)
                    {
                        // 接驳位状态改为:正常
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Normal
                        }, new
                        {
                            CN_S_LOCATION_CODE = task.CN_S_CONNECT_BIT
                        }, trans);
                        // 准备点货位状态改为:正常
                        CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                        {
                            CN_S_LOCATION_STATE = Constants.Location_State_Normal
                        }, new
                        {
                            CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
                        }, trans);
                        // 线边货位不管控
                        if (task_kthk == null)
                        {
                            // 没有需要执行的空托回库任务
                            // 主任务状态置为完成
                            // 主任务阶段置为完成
                            CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
                            {
                                CN_S_STATE = Constants.TaskState_CompletePart,
                                CN_S_EXT2 = "",
                                CN_S_EXT3 = TaskSectionConstants.BCP_MTRK
                                CN_S_STATE = Constants.TaskState_Complete,
                                CN_S_EXT3 = TaskSectionConstants.COMPLETE
                            }, new { CN_S_TASK_NO = task.CN_S_TASK_NO }, trans);
                            // 接驳位状态改为:正常
                            CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                            {
                                CN_S_LOCATION_STATE = Constants.Location_State_Normal
                            }, new
                            {
                                CN_S_LOCATION_CODE = task.CN_S_CONNECT_BIT
                            }, trans);
                            // 准备点货位状态改为:正常
                            CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                            {
                                CN_S_LOCATION_STATE = Constants.Location_State_Normal
                            }, new
                            {
                                CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
                            }, trans);
                            // 终点货位状态改为:满
                            CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                            {
                                CN_S_LOCATION_STATE = Constants.Location_State_Full
                            }, new
                            {
                                CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT
                            }, trans);
                            Log.Detail(logPara, "子任务完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO + ",更新接驳位状态-货位号:" + task.CN_S_CONNECT_BIT + "状态为:" + Constants.Location_State_Normal + ",更新准备点状态-货位号:" + executeStatePara.transportTask.CN_S_START_BIT + "状态为:" + Constants.Location_State_Normal + ",更新终点状态-货位号:" + executeStatePara.transportTask.CN_S_END_BIT + "状态为:" + Constants.Location_State_Full);
                            // 在主循环中创建后继任务
                            Log.Detail(logPara, "成型机-满托出库子任务二完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO
                            + ",更新接驳位状态-货位号:" + task.CN_S_CONNECT_BIT + "状态为:" + Constants.Location_State_Normal
                            + ",更新准备点状态-货位号:" + executeStatePara.transportTask.CN_S_START_BIT + "状态为:" + Constants.Location_State_Normal
                            + ",更新主任务-任务号:" + task.CN_S_TASK_NO + "状态为:" + Constants.TaskState_Complete + "-阶段为:" + TaskSectionConstants.COMPLETE
                            + ",未匹配到空托回库任务");
                        }
                        // 满托入库第一条子任务
                        if (executeStatePara.transportTask.CN_S_EXT2 == "bcp_mtrk_sub_1")
                        else
                        {
                            // 主任务状态置为完成部分
                            // 主任务的子任务标识置为bcp_mtrk_sub_1_completed
                            // 有需要执行的空托回库任务
                            // 主任务状态置为执行中(防止再次循环到)
                            // 主任务阶段置为成型机-空托入库
                            CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
                            {
                                CN_S_STATE = Constants.TaskState_CompletePart,
                                CN_S_EXT2 = "bcp_mtrk_sub_1_completed"
                                CN_S_STATE = Constants.TaskState_Executing,
                                CN_S_EXT3 = TaskSectionConstants.CXJ_KTRK
                            }, new { CN_S_TASK_NO = task.CN_S_TASK_NO }, trans);
                            // 在主循环中创建后继任务
                        }
                        // 满托入库第二条子任务
                        if (executeStatePara.transportTask.CN_S_EXT2 == "bcp_mtrk_sub_2")
                        {
                            // 空托回库任务阶段置为成型机-空托回库-入库阶段
                            // 空托回库任务主任务编号置为当前主任务
                            CreateDAL<DapperDAL<TN_WM_TASKBLL>>().Update(new
                            {
                                CN_S_EXT3 = TaskSectionConstants.CXJ_KTHK_KTRK,
                                CN_S_EXT1 = task.CN_S_TASK_NO
                            }, new { CN_S_TASK_NO = task_kthk.CN_S_TASK_NO });
                            Log.Detail(logPara, "成型机-满托出库子任务二完成-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO
                            + ",更新接驳位状态-货位号:" + task.CN_S_CONNECT_BIT + "状态为:" + Constants.Location_State_Normal
                            + ",更新准备点状态-货位号:" + executeStatePara.transportTask.CN_S_START_BIT + "状态为:" + Constants.Location_State_Normal
                            + ",更新主任务-任务号:" + task.CN_S_TASK_NO + "状态为:" + Constants.TaskState_Executing + "-阶段为:" + TaskSectionConstants.CXJ_KTRK
                            + ",匹配到空托回库任务-任务号:" + task_kthk.CN_S_TASK_NO + "阶段为:" + TaskSectionConstants.CXJ_KTHK_KTRK + "-关联主任务:" + task.CN_S_TASK_NO);
                        }
                    }
                    #endregion
                    #endregion
                    #endregion
                    //A到B的AGV搬运任务
                    if (hzNo == "1")