api/ApiHelper.cs
@@ -123,10 +123,12 @@
        internal static SimpleResult PDAFullCheckIn(PDAFullCheckInfo model)
        {
            LogHelper.Info("触发API:PDA满托复检判断" + JsonConvert.SerializeObject(model), "API");
            var db = new SqlHelper<object>().GetInstance();
            var result = new SimpleResult();//返回结果
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var locCnt = db.Queryable<TN_Loc_Container>().First(a => a.S_CNTR_CODE == model.rfId);
                if (locCnt == null)
                {
@@ -200,10 +202,10 @@
                            && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位
                }
                else if (model.cgState == 6)//一级料二级料回库
                else if (model.cgState == 6)//E级料二级料回库
                {
                    cG_Detail.N_ITEM_STATE = 6;
                    cG_Detail.S_ITEM_STATE = "一级料";
                    cG_Detail.S_ITEM_STATE = "E级料";
                    endLoc = db.Queryable<TN_Location>().
                            Where(o => o.S_AREA_CODE == Settings.Areas[2] 
                            && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"
@@ -211,7 +213,7 @@
                            && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位
                }
                else if (model.cgState == 7)//一级料二级料回库
                else if (model.cgState == 7)//E级料二级料回库
                {
                    cG_Detail.N_ITEM_STATE = 7;
                    cG_Detail.S_ITEM_STATE = "二级料";
@@ -225,7 +227,7 @@
                else
                {
                    result.resultCode = 6;
                    result.resultMsg = $"物料状态只能为0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6一级料、7二级料,如果为其他值,则不处理";
                    result.resultMsg = $"物料状态只能为0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6E级料、7二级料,如果为其他值,则不处理";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
@@ -296,6 +298,7 @@
                                ITEMCODE = cG_Detail.S_ITEM_CODE,
                                LOGINNAME = model.staff,
                                SHIFT = model.shift,
                                STARTLOC = startLoc.S_CODE,
                            };
                            SpecHelper.InsertInventoryM(target);
                        }
@@ -323,6 +326,314 @@
        }
        /// <summary>
        /// 线边空托到空托堆叠区
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        internal static SimpleResult EmptyLineToEmptyMax(EmptyLineToEmptyMaxInfo model)
        {
            LogHelper.Info("触发API:线边空托到空托堆叠区" + JsonConvert.SerializeObject(model), "API");
            var result = new SimpleResult();//返回结果
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                if (model.cntCount<=0)
                {
                    result.resultCode = 1;
                    result.resultMsg = $"参数cntCount必须大于0,即最少要有一个空托";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                var startLoc = db.Queryable<TN_Location>().First(it => it.S_CODE == model.startLoc);
                if (startLoc == null)
                {
                    result.resultCode = 2;
                    result.resultMsg = $"未找到该起点{model.startLoc}";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                var settingArea = Settings.Areas[13];
                if (startLoc.S_AREA_CODE != settingArea)
                {
                    result.resultCode = 3;
                    result.resultMsg = $"该起点{model.startLoc}必须在此库区内{settingArea}";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                if (startLoc.N_LOCK_STATE != 0 || startLoc.S_LOCK_STATE != "无")
                {
                    result.resultCode = 4;
                    result.resultMsg = $"该起点{model.startLoc}已锁定,任务正在搬送";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                //查询符合的未锁定已启用指定货区的当前数量合计后最接近容量的货位,终点
                var endLoc = db.Queryable<TN_Location>().
                    Where(a => a.N_CURRENT_NUM + model.cntCount <= a.N_CAPACITY && a.S_AREA_CODE == Settings.Areas[3] && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y").
                    ToList().OrderByDescending(a => a.N_CURRENT_NUM + model.cntCount - a.N_CAPACITY).ThenBy(a => a.N_ROW).ThenBy(a => a.N_COL).ToList().First();
                using (var trans = db.Ado.UseTran())
                {
                    startLoc.N_CURRENT_NUM = model.cntCount;
                    startLoc.N_LOCK_STATE = 2;
                    startLoc.S_LOCK_STATE = "出库锁";
                    endLoc.N_LOCK_STATE = 1;
                    endLoc.S_LOCK_STATE = "入库锁";
                    var locCntList = new List<TN_Loc_Container>();
                    string cntStr = "";
                    for (int i = 0; i < model.cntCount; i++)
                    {
                        var locCnt = new TN_Loc_Container()
                        {
                            S_LOC_CODE = startLoc.S_CODE,
                            S_CNTR_CODE = Guid.NewGuid().ToString("D"),
                        };
                        cntStr += locCnt.S_CNTR_CODE + ",";
                        locCntList.Add(locCnt);
                    }
                    cntStr= cntStr.Trim(',');
                    var task = new TN_Task()
                    {
                        S_CODE = WCSHelper.GenerateTaskNo(),
                        S_START_AREA = startLoc.S_AREA_CODE,
                        S_END_AREA = endLoc.S_AREA_CODE,
                        S_START_LOC = startLoc.S_CODE,
                        S_END_LOC = endLoc.S_CODE,
                        S_TYPE = "空托下线堆叠",
                        N_PRIORITY = 3,
                        N_SCHEDULE_TYPE = 1,
                        N_B_STATE = 0,
                        S_B_STATE = "等待",
                        S_CNTR_CODE = cntStr,
                    };
                    if (
                        db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() == 1 &&
                        db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() == 1 &&
                        db.Insertable<TN_Loc_Container>(locCntList).ExecuteCommand() == locCntList.Count &&
                        db.Insertable<TN_Task>(task).ExecuteCommand() == 1
                        )
                    {
                        Task task1 = Task.Run(() =>
                        {
                            WMSHelper.InsertOpInfo(model.staff, "点对点", cntStr);
                        });
                        trans.CommitTran();
                        result.resultCode = 0;
                        result.resultMsg = $"创建 空托下线堆叠 任务成功,起点:{startLoc.S_CODE},终点:{endLoc.S_CODE}";
                        LogHelper.Info(result.resultMsg);
                        return result;
                    }
                    else
                    {
                        trans.RollbackTran();
                        result.resultCode = 12;
                        result.resultMsg = $"创建 空托下线堆叠 任务失败,起点:{startLoc.S_CODE},终点:{endLoc.S_CODE}";
                        LogHelper.Info(result.resultMsg);
                        return result;
                    }
                }
            }
            catch (Exception ex)
            {
                result.resultCode = -1;
                result.resultMsg = $"PDA满托复检判断,发生了异常:{ex.Message}";
                LogHelper.Info(result.resultMsg);
                return result;
            }
        }
        /// <summary>
        /// 线边空托到原材料输送线
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        internal static SimpleResult EmptyLineToLine(EmptyLineToLineInfo model)
        {
            LogHelper.Info("触发API:线边空托到原材料输送线" + JsonConvert.SerializeObject(model), "API");
            var result = new SimpleResult();//返回结果
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var startLoc = db.Queryable<TN_Location>().First(o => o.S_CODE == model.startLoc);
                if (startLoc == null)
                {
                    result.resultCode = 1;
                    result.resultMsg = $"数据库中未找到此货位:{model.startLoc}";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                if (startLoc.N_CURRENT_NUM == 1 || db.Queryable<TN_Loc_Container>().Any(a=>a.S_LOC_CODE==model.startLoc))
                {
                    result.resultCode = 2;
                    result.resultMsg = $"此货位:{model.startLoc},已绑定托盘";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                if (startLoc.N_LOCK_STATE != 0  || startLoc.S_LOCK_STATE != "无")
                {
                    result.resultCode = 3;
                    result.resultMsg = $"此货位:{model.startLoc},已上锁";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                if (startLoc.C_ENABLE != "Y")
                {
                    result.resultCode = 4;
                    result.resultMsg = $"此货位:{model.startLoc},未启用";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                var startLocArea = Settings.Areas[13];
                if (startLoc.S_AREA_CODE != startLocArea)
                {
                    result.resultCode = 5;
                    result.resultMsg = $"此货位:{model.startLoc},不属于线边空托区{startLocArea}";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                var endLocIndex = Settings.LineSorting;
                var endLocLine = Settings.ProductionLines.FirstOrDefault(a => a.Sorting == endLocIndex);
                if (endLocLine == null)
                {
                    result.resultCode = 6;
                    result.resultMsg = $"配置文件中未找到序号为:{endLocIndex}的原材料产线的信息";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == endLocLine.PointIn);
                if (endLoc == null)
                {
                    result.resultCode = 7;
                    result.resultMsg = $"数据库中未找到原材料产线空托上线口:{endLocLine.PointIn}";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                var endLocArea = Settings.Areas[14];
                if (endLoc.S_AREA_CODE != endLocArea)
                {
                    result.resultCode = 8;
                    result.resultMsg = $"此货位:{endLoc.S_CODE},不属于原材料产线空托上线口库区{endLocArea}";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                if (endLoc.N_CURRENT_NUM == 1 || db.Queryable<TN_Loc_Container>().Any(a => a.S_LOC_CODE == endLocLine.PointIn))
                {
                    result.resultCode = 9;
                    result.resultMsg = $"此货位:{model.startLoc},已绑定托盘";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                if (endLoc.N_LOCK_STATE != 0 || endLoc.S_LOCK_STATE != "无")
                {
                    result.resultCode = 10;
                    result.resultMsg = $"此货位:{model.startLoc},已上锁";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                if (endLoc.C_ENABLE != "Y")
                {
                    result.resultCode = 11;
                    result.resultMsg = $"此货位:{model.startLoc},未启用";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                var Cnt = Guid.NewGuid().ToString("D");
                using (var trans = db.Ado.UseTran())
                {
                    startLoc.N_CURRENT_NUM = 1;
                    startLoc.N_LOCK_STATE = 2;
                    startLoc.S_LOCK_STATE = "出库锁";
                    endLoc.N_LOCK_STATE = 1;
                    endLoc.S_LOCK_STATE = "入库锁";
                    var locCnt = new TN_Loc_Container()
                    {
                        S_LOC_CODE = startLoc.S_CODE,
                        S_CNTR_CODE = Cnt,
                    };
                    var task = new TN_Task()
                    {
                        S_CODE = WCSHelper.GenerateTaskNo(),
                        S_START_AREA = startLoc.S_AREA_CODE,
                        S_END_AREA = endLoc.S_AREA_CODE,
                        S_START_LOC = startLoc.S_CODE,
                        S_END_LOC = endLoc.S_CODE,
                        S_TYPE = "线边空托上线",
                        N_PRIORITY = 3,
                        N_SCHEDULE_TYPE = 1,
                        N_B_STATE = 0,
                        S_B_STATE = "等待",
                        S_CNTR_CODE = Cnt,
                    };
                    if (
                        db.Updateable<TN_Location>(startLoc).UpdateColumns(it=>new {it.N_CURRENT_NUM,it.N_LOCK_STATE,it.S_LOCK_STATE }).ExecuteCommand() == 1 &&
                        db.Updateable<TN_Location>(endLoc).UpdateColumns(it=>new {it.N_LOCK_STATE,it.S_LOCK_STATE }).ExecuteCommand() == 1 &&
                        db.Insertable<TN_Loc_Container>(locCnt).ExecuteCommand() == 1 &&
                        db.Insertable<TN_Task>(task).ExecuteCommand() == 1
                        )
                    {
                        if (Settings.LineSorting < Settings.ProductionLines.Count - 1)
                        {
                            Settings.LineSorting++;
                        }
                        else
                        {
                            Settings.LineSorting = 0;
                        }
                        Task task1 = Task.Run(() =>
                        {
                            WMSHelper.InsertOpInfo(model.staff, "点对点", Cnt);
                        });
                        trans.CommitTran();
                        result.resultCode = 0;
                        result.resultMsg = $"创建 线边空托上线 任务成功,起点:{startLoc.S_CODE},终点:{endLoc.S_CODE}";
                        LogHelper.Info(result.resultMsg);
                        return result;
                    }
                    else
                    {
                        trans.RollbackTran();
                        result.resultCode = 12;
                        result.resultMsg = $"创建 线边空托上线 任务失败,起点:{startLoc.S_CODE},终点:{endLoc.S_CODE}";
                        LogHelper.Info(result.resultMsg);
                        return result;
                    }
                }
            }
            catch(Exception ex)
            {
                result.resultCode = -1;
                result.resultMsg = $"PDA满托复检判断,发生了异常:{ex.Message}";
                LogHelper.Info(result.resultMsg);
                return result;
            }
        }
        /// <summary>
        /// 人工次品回炉
        /// </summary>
        /// <param name="model"></param>
@@ -330,11 +641,13 @@
        internal static SimpleResult PDAReturnReset(PDAReturnResetInfo model)
        {
            LogHelper.Info("触发API:人工次品回炉" + JsonConvert.SerializeObject(model), "API");
            var db = new SqlHelper<object>().GetInstance();
            var result = new SimpleResult();//返回结果
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var startLoc  =  db.Queryable<TN_Location>().First(o => o.S_CODE == model.startLoc && o.N_CURRENT_NUM ==0 && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE=="无" && o.S_AREA_CODE == Settings.Areas[4]);
                if (startLoc == null)
                {
@@ -679,11 +992,13 @@
        /// </summary>
        internal static SimpleResult PDAFullInArea(PDAFullInAreaInfo model)
        {
            var db = new SqlHelper<object>().GetInstance();
            var result = new SimpleResult();//返回结果
            LogHelper.Info("触发API:PDA满托下线入库" + JsonConvert.SerializeObject(model), "API");
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                if (model.RfId.Length < 16)
                {
                    result.resultCode = 1;
@@ -763,7 +1078,7 @@
                                                      && c.N_CURRENT_NUM == 0 && c.C_ENABLE == "Y"
                                                      && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == c.S_CODE).NotAny()//不能有货
                                                      ).
                                                      OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位,直接判断当前数量为0即可
                                                      OrderBy(o => o.N_LAYER, OrderByType.Asc).First();//查询合适的终点货位,1层先入库
                                if (endLoc != null)
                                {
@@ -854,6 +1169,7 @@
                                                    ITEMSTATE = "待检",
                                                    LOGINNAME = model.staff,
                                                    SHIFT = model.shift,
                                                    STARTLOC = startLoc.S_CODE,
                                                };
                                                SpecHelper.InsertInventoryM(target);
                                            });
@@ -971,10 +1287,11 @@
            LogHelper.Info("触发API:满托出库上线" + JsonConvert.SerializeObject(model), "API");
            var result = new SimpleResult();
            var db = new SqlHelper<object>().GetInstance();
            TN_Location endLoc = new TN_Location();
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                if (model.EndLoc != string.Empty)//指定终点货位
                {
                    endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.EndLoc);
@@ -1092,11 +1409,6 @@
                        };
                        SpecHelper.InsertComponentDetail(target);
                    });
                    Task task27 = Task.Run(() =>
                    {
                        SpecHelper.DeleteInventoryM(cgInfo.S_ID);
                    });
                }
                else
                {
@@ -1125,13 +1437,14 @@
        {
            LogHelper.Info("触发API:空托下线堆叠" + JsonConvert.SerializeObject(model), "API");
            var result = new SimpleResult();
            var db = new SqlHelper<object>().GetInstance();
            TN_Location startLoc = new TN_Location();
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var startLocCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc && a.S_CNTR_CODE == model.cntID);
                if (startLocCntrRel != null)
                {
@@ -1226,13 +1539,13 @@
            LogHelper.Info("触发API:余料下线入库" + JsonConvert.SerializeObject(model), "API");
            var result = new SimpleResult();
            var db = new SqlHelper<object>().GetInstance();
            TN_Location startLoc_Old = new TN_Location();
            TN_Location startLoc_New = new TN_Location();
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var cG_Detail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == model.cntID);
                if (cG_Detail == null)
                {
@@ -1360,6 +1673,7 @@
                            ITEMCODE = cG_Detail.S_ITEM_CODE,
                            LOGINNAME = model.staff,
                            SHIFT = model.shift,
                            STARTLOC = startLoc_New.S_CODE,
                        };
                        SpecHelper.InsertInventoryM(target);
                    });
@@ -1505,14 +1819,16 @@
            LogHelper.Info("触发API:人工拆盘入库" + JsonConvert.SerializeObject(model), "API");
            var result = new SimpleResult();
            var db = new SqlHelper<object>().GetInstance();
            string cntLog = $"旧的容器号{model.old_CntId}";
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                if (model.new_IsOK == model.old_IsOK)
                {
                    result.resultCode = 19;
                    result.resultMsg = $"人工拆盘入库,物料需要一个待检一个不合格";
                    result.resultMsg = $"人工拆盘入库,物料需要一个合格 和 一个不合格(回炉胶或废料)";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
@@ -1541,6 +1857,8 @@
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                cG_old_Detail.S_ITEM_SPEC = model.old_Spec;
                cG_old_Detail.S_SPE = model.old_Spec;
                var startLoc_Old = db.Queryable<TN_Location>().
                    First(o => o.S_CODE == model.old_StartLoc && o.N_CURRENT_NUM == 0 && o.S_AREA_CODE == Settings.Areas[5] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无");
@@ -1604,13 +1922,12 @@
                {
                    S_CNTR_CODE = model.new_CntIds,
                    S_BATCH_NO = cG_old_Detail.S_BATCH_NO,
                    S_ITEM_SPEC = cG_old_Detail.S_ITEM_SPEC,
                    S_SPE = cG_old_Detail.S_SPE,
                    S_ITEM_SPEC = model.new_Spec,
                    S_SPE = model.new_Spec,
                    S_ITEM_STATE = LocationHelper.GetStrByOk(model.new_IsOK),
                    N_ITEM_STATE = model.new_IsOK,
                    S_CAR_CODE = cG_old_Detail.S_CAR_CODE,
                    T_MODIFY = System.DateTime.Now,
                    //C_ITEM_MERGE = model.new_CntIds,
                    S_ITEM_CODE = cG_old_Detail.S_ITEM_CODE,
                    S_Separate_ID = cG_old_Detail.S_Separate_ID
                };
@@ -1620,7 +1937,7 @@
                if (db.Queryable<TN_Task>().Count(a => a.N_B_STATE < 3 && a.S_END_LOC == weightPoint) > 2)
                {
                    result.resultCode = 11;
                    result.resultMsg = $"终点称重货位{weightPoint}的正在执行的任务数量大于2";
                    result.resultMsg = $"终点称重货位{weightPoint}的正在执行的任务数量大于2,繁忙,请等待";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
@@ -1629,11 +1946,6 @@
                          First(o => o.S_AREA_CODE == Settings.Areas[9]
                          && o.S_CODE == weightPoint);//查询合适的终点货位,去称重
                var endLoc_NG = db.Queryable<TN_Location>().
                          Where(o => o.S_AREA_CODE == Settings.Areas[8]
                          && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"
                          && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()//不能有货
                          && o.N_CURRENT_NUM == 0).First();//查询合适的终点货位
                if (endLoc_Ok == null)
                {
@@ -1643,53 +1955,48 @@
                    return result;
                }
                if (endLoc_NG == null)
                {
                    result.resultCode = 16;
                    result.resultMsg = $"不合格的物料未找到合适的拆盘不合格区终点货位{Settings.Areas[8]}";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                var taskLog1_Old = $"旧容器号{model.old_CntId},旧容器号的起点{startLoc_Old.S_CODE},终点{endLoc_Ok.S_CODE}";
                var taskLog_New = $"新容器号{model.new_CntIds},新容器号的起点{model.new_StartLoc},终点{endLoc_NG.S_CODE}";
                var taskLog_New = $"新容器号{model.new_CntIds},新容器号的起点{model.new_StartLoc}";
                List<CreateTasks> modesCreateTask = new List<CreateTasks>();
                var newTaskCreate = new CreateTasks()
                if (model.new_IsOK == 0)
                {
                    taskNo = WCSHelper.GenerateTaskNo(),
                    from = model.new_StartLoc,
                    fromArea = startLoc_New.S_AREA_CODE,
                    to = (model.new_IsOK == 2) ? endLoc_NG.S_CODE : endLoc_Ok.S_CODE,
                    toArea = (model.new_IsOK == 2) ? endLoc_NG.S_AREA_CODE : endLoc_Ok.S_AREA_CODE,
                    taskType = (model.new_IsOK == 2) ? "人工拆盘回不合格区" : "人工拆盘回库",
                    pri = 3,
                    cntrInfo = model.new_CntIds,
                    spec = cG_new_Detail_Ins.S_SPE,
                };
                modesCreateTask.Add(newTaskCreate);
                var oldTaskCreate = new CreateTasks()
                    var newTaskCreate = new CreateTasks()
                    {
                        taskNo = WCSHelper.GenerateTaskNo(),
                        from = model.new_StartLoc,
                        fromArea = startLoc_New.S_AREA_CODE,
                        to =  endLoc_Ok.S_CODE,
                        toArea = endLoc_Ok.S_AREA_CODE,
                        taskType = "人工拆盘合格回库",
                        pri = 3,
                        cntrInfo = model.new_CntIds,
                        spec = cG_new_Detail_Ins.S_SPE,
                    };
                    modesCreateTask.Add(newTaskCreate);
                }
                else if (model.old_IsOK == 1)
                {
                    taskNo = WCSHelper.GenerateTaskNo(),
                    from = startLoc_Old.S_CODE,
                    fromArea = startLoc_Old.S_AREA_CODE,
                    to = (model.old_IsOK == 2) ? endLoc_NG.S_CODE : endLoc_Ok.S_CODE,
                    toArea = (model.old_IsOK == 2) ? endLoc_NG.S_AREA_CODE : endLoc_Ok.S_AREA_CODE,
                    taskType = (model.old_IsOK == 2) ? "人工拆盘回不合格区" : "人工拆盘回库",
                    pri = 3,
                    cntrInfo = model.old_CntId,
                    spec = cG_old_Detail.S_SPE,
                };
                modesCreateTask.Add(oldTaskCreate);
                    var newTaskCreate = new CreateTasks()
                    {
                        taskNo = WCSHelper.GenerateTaskNo(),
                        from = model.old_StartLoc,
                        fromArea = startLoc_Old.S_AREA_CODE,
                        to = endLoc_Ok.S_CODE,
                        toArea = endLoc_Ok.S_AREA_CODE,
                        taskType = "人工拆盘合格回库",
                        pri = 3,
                        cntrInfo = model.old_CntId,
                        spec = cG_old_Detail.S_SPE,
                    };
                    modesCreateTask.Add(newTaskCreate);
                }
                startLoc_Old.N_LOCK_STATE = 2;
                startLoc_Old.S_LOCK_STATE = "出库锁";
                startLoc_Old.N_CURRENT_NUM = 1;
                startLoc_New.N_LOCK_STATE = 2;
                startLoc_New.S_LOCK_STATE = "出库锁";
@@ -1725,49 +2032,11 @@
                        if (WCSHelper.CreateTask(modesCreateTask))//创建搬送任务,起点终点容器
                        {
                            tran.CommitTran();
                            LogHelper.Info($"生成人工拆盘入库任务成功," + taskLog_New + taskLog1_Old);
                            LogHelper.Info($"生成人工拆盘合格回库任务成功," + taskLog_New + taskLog1_Old);
                            Task task1 = Task.Run(() =>
                            {
                                WMSHelper.InsertOpInfo(model.staff, "人工拆盘入库", model.new_CntIds + "," + model.old_CntId);
                            });
                            Task task2 = Task.Run(() =>
                            {
                                if (model.old_IsOK == 1)
                                {
                                    var target = new TN_RemeltDetail()
                                    {
                                        TASKNO = oldTaskCreate.taskNo,
                                        CNTCODE = cG_old_Detail.S_CNTR_CODE,
                                        STARTLOC = startLoc_Old.S_CODE,
                                        LOGINNAME = model.staff,
                                        ITEMCODE = cG_old_Detail.S_ITEM_CODE,
                                        SPEC = cG_old_Detail.S_SPE,
                                        CARCODE = cG_old_Detail.S_CAR_CODE,
                                        WEIGHT = cG_old_Detail.F_QTY,
                                        REMELTTIME = DateTime.Now,
                                        SHIFT = model.shift,
                                    };
                                    SpecHelper.InsertRemeltDetail(target);
                                }
                                if (model.new_IsOK == 1)
                                {
                                    var target = new TN_RemeltDetail()
                                    {
                                        TASKNO = newTaskCreate.taskNo,
                                        CNTCODE = cG_new_Detail_Ins.S_CNTR_CODE,
                                        STARTLOC = startLoc_New.S_CODE,
                                        LOGINNAME = model.staff,
                                        ITEMCODE = cG_new_Detail_Ins.S_ITEM_CODE,
                                        SPEC = cG_new_Detail_Ins.S_SPE,
                                        CARCODE = cG_new_Detail_Ins.S_CAR_CODE,
                                        WEIGHT = cG_new_Detail_Ins.F_QTY,
                                        REMELTTIME = DateTime.Now,
                                        SHIFT = model.shift,
                                    };
                                    SpecHelper.InsertRemeltDetail(target);
                                }
                                WMSHelper.InsertOpInfo(model.staff, "人工拆盘合格回库", model.new_CntIds + "," + model.old_CntId);
                            });
                            Task task27 = Task.Run(() =>
@@ -1784,6 +2053,7 @@
                                        ITEMCODE = cG_old_Detail.S_ITEM_CODE,
                                        LOGINNAME = model.staff,
                                        SHIFT = model.shift,
                                        STARTLOC = startLoc_Old.S_CODE,
                                    };
                                    SpecHelper.InsertInventoryM(target);
                                }
@@ -1799,6 +2069,7 @@
                                        ITEMCODE = cG_new_Detail_Ins.S_ITEM_CODE,
                                        LOGINNAME = model.staff,
                                        SHIFT = model.shift,
                                        STARTLOC = startLoc_New.S_CODE,
                                    };
                                    SpecHelper.InsertInventoryM(target);
                                }
@@ -1808,7 +2079,7 @@
                        {
                            tran.RollbackTran();
                            result.resultCode = 17;
                            result.resultMsg = $"生成人工拆盘入库任务失败," + taskLog_New + taskLog1_Old;
                            result.resultMsg = $"生成人工拆盘合格回库任务失败," + taskLog_New + taskLog1_Old;
                            LogHelper.Info(result.resultMsg);
                            return result;
                        }
@@ -1817,7 +2088,7 @@
                    {
                        tran.RollbackTran();
                        result.resultCode = 18;
                        result.resultMsg = $"生成人工拆盘入库任务失败," + taskLog_New + taskLog1_Old;
                        result.resultMsg = $"生成人工拆盘合格回库任务失败," + taskLog_New + taskLog1_Old;
                        LogHelper.Info(result.resultMsg);
                        return result;
                    }
@@ -1845,9 +2116,10 @@
            LogHelper.Info("触发API:人工创建点到点任务" + JsonConvert.SerializeObject(model), "API");
            var result = new SimpleResult();
            var db = new SqlHelper<object>().GetInstance();
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc);
                
                if(!(startLoc != null  && startLoc.N_LOCK_STATE == 0 && startLoc.S_LOCK_STATE == "无"))
@@ -1936,15 +2208,9 @@
                                    ITEMCODE = cginfo.S_ITEM_CODE,
                                    LOGINNAME = model.staff,
                                    SHIFT = model.shift,
                                    STARTLOC = model.startLoc,
                                };
                                SpecHelper.InsertInventoryM(target);
                            }
                        });
                        Task task26 = Task.Run(() =>
                        {
                            if (startLoc.S_AREA_CODE == Settings.Areas[1] && cginfo != null)
                            {
                                SpecHelper.DeleteInventoryM(cginfo.S_ID);
                            }
                        });