jinxin
2025-06-04 3b1b3b354f02ecf558f6dcc9a359dae65c4efca1
C#/HH.WCS.Mobox3.WeiLi/api/ApiHelper.cs
File was renamed from HH.WCS.Mobox3.WeiLi/api/ApiHelper.cs
@@ -214,6 +214,7 @@
            var wmsTask = db.Queryable<WMSTask>().Where(a => a.S_CODE == model.OperationNo).First();
            if (wmsTask != null) 
            {
                db.Deleteable<WMSTask>().Where(a => a.S_CODE == model.OperationNo).ExecuteCommand();
                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();
@@ -226,11 +227,242 @@
                    locInfo.S_LOCK_STATE = "无";
                    db.Updateable(locInfo).UpdateColumns(it => new { it.N_CURRENT_NUM, it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
                }
                else
                {
                    LogHelper.Info($"清除错误作业 未找到起点{wmsTask.S_START_LOC}的货位");
                }
            }
            else
            {
                LogHelper.Info($"清除错误作业 未找到作业号{model.OperationNo}的作业");
            }
            return result;
        }
        internal static SimpleResult GuidelinesIn(WeiLiDisbutionInMolde model)
        {
            int Ntype = 0; string Stype = ""; string S_OP_DEF_NAME = "";
            var result = new SimpleResult { resultCode = 0 };
            Location end = null;
            var db = new SqlHelper<object>().GetInstance();
            if (string.IsNullOrEmpty(model.endArea) && string.IsNullOrEmpty(model.endLoc))
            {
                Ntype = 1;
                Stype = "入库";
                S_OP_DEF_NAME = "指引回库";
            }
            var TrayPrefix = model.cntrNo.Substring(0, 2);
            var endinfo = Settings.LKCodes.Where(a => a.TrayPrefix == TrayPrefix).FirstOrDefault();
            if (endinfo != null)
            {
                if (string.IsNullOrEmpty(model.endArea))
                {
                    model.endArea = endinfo.LiKuCode;
                }
            }
            else
            {
                result.resultCode = -1;
                result.resultMsg = "终点库区为空 默认回库 找不到托盘前缀对应的回库库区";
                return result;
            }
            var cntrinfo = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE == model.cntrNo).First();
            if (cntrinfo != null)
            {
                var start = db.Queryable<Location>().Where(a => a.S_CODE == cntrinfo.S_LOC_CODE).First();
                if (start != null)
                {
                    if (start.N_LOCK_STATE == 0)
                    {
                        var conntinfo = Settings.ConnetAreas.Where(a => a.FullList.Contains(start.S_CODE) || a.EmptyList.Contains(start.S_CODE)).FirstOrDefault();
                        if (conntinfo != null)
                        {
                            if (!string.IsNullOrEmpty(model.endLoc))
                            {
                                //创建作业
                                var optask = new WMSTask
                                {
                                    S_CODE = WMSHelper.GenerateTaskNo(),
                                    S_START_WH = start.S_WH_CODE,
                                    S_START_LOC = start.S_CODE,
                                    S_START_AREA = start.S_AREA_CODE,
                                    S_END_LOC = end.S_CODE,
                                    S_END_AREA = end.S_AREA_CODE,
                                    S_END_WH = end.S_WH_CODE,
                                    S_STATION_LOC = conntinfo.Station,
                                    N_TYPE = Ntype,
                                    S_TYPE = Stype,
                                    N_B_STATE = 0,
                                    S_CNTR_CODE = model.cntrNo,
                                    S_OP_DEF_NAME = S_OP_DEF_NAME,
                                    S_BS_NO = model.workNo
                                };
                                var note = Settings.Tasktypes.Where(a => a.StartArea == optask.S_START_AREA && a.EndArea == optask.S_END_AREA).FirstOrDefault();
                                if (note != null)
                                {
                                    optask.S_NOTE = note.TaskType;
                                }
                                var res = db.Insertable(optask).ExecuteCommand() > 0;
                                LocationHelper.LockLoc(start.S_CODE, 2);
                                LocationHelper.LockLoc(end.S_CODE, 1);
                            }
                            else
                            {
                                //创建作业
                                var optask = new WMSTask
                                {
                                    S_CODE = WMSHelper.GenerateTaskNo(),
                                    S_START_WH = start.S_WH_CODE,
                                    S_START_LOC = start.S_CODE,
                                    S_START_AREA = start.S_AREA_CODE,
                                    S_END_LOC = "",
                                    S_END_AREA = model.endArea,
                                    S_END_WH = start.S_WH_CODE,
                                    S_STATION_LOC = conntinfo.Station,
                                    N_TYPE = Ntype,
                                    S_TYPE = Stype,
                                    N_B_STATE = 0,
                                    S_CNTR_CODE = model.cntrNo,
                                    S_OP_DEF_NAME = S_OP_DEF_NAME,
                                    S_BS_NO = model.workNo
                                };
                                var note = Settings.Tasktypes.Where(a => a.StartArea == optask.S_START_AREA && a.EndArea == optask.S_END_AREA).FirstOrDefault();
                                if (note != null)
                                {
                                    optask.S_NOTE = note.TaskType;
                                }
                                var res = db.Insertable(optask).ExecuteCommand() > 0;
                                LocationHelper.LockLoc(start.S_CODE, 2);
                            }
                        }
                        else
                        {
                            result.resultCode = -2;
                            result.resultMsg = $"货位{start.S_CODE} 在接驳库区配置中找不到对应的拣货位信息";
                        }
                    }
                    else
                    {
                        result.resultCode = -3;
                        result.resultMsg = $"货位{start.S_CODE} 当前状态为{start.S_LOCK_STATE} 不予生成任务";
                    }
                }
                else
                {
                    result.resultCode = -1;
                    result.resultMsg = $"查询不到托盘{model.cntrNo} 绑定货位{cntrinfo.S_LOC_CODE}的货位信息";
                }
            }
            else
            {
                result.resultCode = -1;
                result.resultMsg = $"查询不到托盘{model.cntrNo} 的绑定货位";
            }
            return result;
        }
        internal static SimpleResult GuidelinesOut(GuidelinesOutModel model)
        {
            var result = new SimpleResult();
            var db = new SqlHelper<object>().GetInstance();
            var cntrInfo = db.Queryable<LocCntrRel>().Where(it => it.S_CNTR_CODE == model.cntrCode).First();
            if (cntrInfo != null)
            {
                var startloc = db.Queryable<Location>().Where(it => it.S_CODE == cntrInfo.S_LOC_CODE).First();
                if (startloc != null && startloc.N_LOCK_STATE == 0)
                {
                    LogHelper.Info($"托盘{model.cntrCode} 绑定位置{cntrInfo.S_LOC_CODE} 锁状态{startloc.N_LOCK_STATE}");
                    if (Settings.LKCodes.Where(it => it.LiKuCode == startloc.S_AREA_CODE).FirstOrDefault() != null)
                    {
                        string taskType = "";
                        Location endbit = null;
                        LogHelper.Info($"托盘{model.cntrCode} 出到分拣位");
                        taskType = "出库";
                        var endList = Settings.ConnetAreas.Where(it => it.LineArea == model.endArea && it.Station == model.station).ToList();
                        if (endList.Count > 0)
                        {
                            foreach (var endlist in endList)
                            {
                                for (int i = 0; i < endlist.FullList.Length; i++)
                                {
                                    var endloc = endlist.FullList[i];
                                    var end = db.Queryable<Location>().Where(it => it.S_CODE == endloc && it.N_LOCK_STATE == 0 && it.N_CURRENT_NUM == 0).First();
                                    if (end != null)
                                    {
                                        endbit = end;
                                        break;
                                    }
                                    else LogHelper.Info($"指引出库 货位{endloc} 不可用");
                                }
                                if (endbit != null) break;
                            }
                        }
                        else LogHelper.Info($"指引出库 未找到出库口库区编码{model.endArea} 对应的配置文件");
                        if (endbit != null)
                        {
                            var optask = new WMSTask
                            {
                                S_CODE = WMSHelper.GenerateTaskNo(),
                                S_START_LOC = cntrInfo.S_LOC_CODE,
                                S_START_AREA = startloc.S_AREA_CODE,
                                S_START_WH = startloc.S_WH_CODE,
                                S_END_LOC = endbit.S_CODE,
                                S_END_AREA = endbit.S_AREA_CODE,
                                S_END_WH = endbit.S_WH_CODE,
                                S_STATION_LOC = model.station,
                                S_TYPE = "出库",
                                N_TYPE = 2,
                                N_B_STATE = 0,
                                S_CNTR_CODE = model.cntrCode,
                                S_OP_DEF_NAME = taskType,
                                S_BS_NO = ""
                            };
                            var note = Settings.Tasktypes.Where(it => it.StartArea == optask.S_START_AREA && it.EndArea == optask.S_END_AREA).FirstOrDefault();
                            if (note != null)
                            {
                                optask.S_NOTE = note.TaskType;
                            }
                            var res = db.Insertable(optask).ExecuteCommand() > 0;
                            if (res)
                            {
                                startloc.N_LOCK_STATE = 2;
                                startloc.S_LOCK_STATE = "出库锁";
                                db.Updateable(startloc).UpdateColumns(it => new { it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
                                LocationHelper.LockLoc(endbit.S_CODE, 1);
                                LogHelper.Info($"修改成功");
                            }
                        }
                        else
                        {
                            result.resultCode = -1;
                            result.resultMsg = $"指引出库 未找到可用分拣货位";
                            LogHelper.Info($"指引出库 未找到可用分拣货位");
                        }
                    }
                    else
                    {
                        result.resultCode = -1;
                        result.resultMsg = $"托盘{model.cntrCode} 不在立库中 无法出库";
                        LogHelper.Info($"托盘{model.cntrCode} 不在立库中 无法出库");
                    }
                }
                else
                {
                    result.resultCode = -1;
                    result.resultMsg = $"指引出库 托盘号{model.cntrCode} 锁定状态异常";
                    LogHelper.Info($"指引出库 托盘号{model.cntrCode} 锁定状态异常");
                }
            }
            return result;
        }
        internal static TaskStateresutl GetTaskState(GetTaskStateModel model)
        {
            var db = new SqlHelper<object>().GetInstance();