api/ApiHelper.cs
@@ -326,6 +326,132 @@
        }
        /// <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 = "入库锁";
                    string cntStr = "";
                    for (int i = 0; i < model.cntCount; i++)
                    {
                         cntStr += Guid.NewGuid().ToString("D")+",";
                    }
                    cntStr.Trim(',');
                    var locCnt = new TN_Loc_Container()
                    {
                        S_LOC_CODE = startLoc.S_CODE,
                        S_CNTR_CODE = cntStr,
                    };
                    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 = locCnt.S_CNTR_CODE,
                    };
                    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
                        )
                    {
                        Task task1 = Task.Run(() =>
                        {
                            WMSHelper.InsertOpInfo(model.staff, "点对点", locCnt.S_CNTR_CODE);
                        });
                        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>
@@ -398,7 +524,7 @@
                if (endLoc.S_AREA_CODE != endLocArea)
                {
                    result.resultCode = 8;
                    result.resultMsg = $"此货位:{endLoc.S_CODE},不属于原材料产线空托区{endLocArea}";
                    result.resultMsg = $"此货位:{endLoc.S_CODE},不属于原材料产线空托上线口库区{endLocArea}";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
@@ -472,6 +598,11 @@
                            Settings.LineSorting = 0;
                        }
                        Task task1 = Task.Run(() =>
                        {
                            WMSHelper.InsertOpInfo(model.staff, "点对点", Cnt);
                        });
                        trans.CommitTran();
                        result.resultCode = 0;