hudong
2025-06-26 076b32f9fa1dc8dc39ca345b2b94a58c8e50040e
出库 分拣逻辑修改
4个文件已修改
168 ■■■■ 已修改文件
api/ApiModel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/WmsSpaHelper.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/WMSCore.cs 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
process/TaskProcess.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/ApiModel.cs
@@ -385,7 +385,7 @@
            public string cntr_code { get; set; }//容器
            public string cntr_type { get; set; }//容器
            public string start { get; set; }//容器
            //public string start { get; set; }//容器
            public bool IsHK { get; set; }//容器
            public string arrival_no { get; set; }
            public List<Mater> MaterList { get; set; }
api/WmsSpaHelper.cs
@@ -1750,10 +1750,10 @@
            using (var db = new SqlHelper<object>().GetInstance())
            {
                Location endloc = new Location();
                var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE == model.cntr_code).First();
                var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE.Trim() == model.cntr_code).First();
                if (hwbd!=null)
                {
                    endloc = db.Queryable<Location>().Where(a => a.S_CODE == hwbd.S_LOC_CODE).First();
                    endloc = db.Queryable<Location>().Where(a => a.S_CODE == hwbd.S_LOC_CODE.Trim()).First();
                    if (endloc?.N_LOCK_STATE != 0)
                    {
                        result.resultCode = 3;
@@ -2025,10 +2025,10 @@
                        if (!string.IsNullOrEmpty(model.cntr_code))
                        {
                            var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE == model.cntr_code).First();
                            var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE.Trim() == model.cntr_code).First();
                            if (hwbd!=null)
                            {
                                end = db.Queryable<Location>().Where(s => s.S_CODE == hwbd.S_LOC_CODE).First();
                                end = db.Queryable<Location>().Where(s => s.S_CODE == hwbd.S_LOC_CODE.Trim()).First();
                            }
                            else
                            {
@@ -2127,15 +2127,24 @@
        {
            var result = new SimpleResult();
            // var db = new SqlHelper<object>().GetInstance();
            using (var db = new SqlHelper<object>().GetInstance())
            {
                try
                {
                    var start = "";
                    var startloc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE == model.cntr_code).First();
                    if (startloc!=null)
                    {
                        start = startloc.S_LOC_CODE;
                    }
                    else
                    {
                        result.resultMsg = "出库单号不能为空";
                        result.resultCode = 1;
                        return result;
                    }
                    result.resultMsg = "成功";
                    result.resultCode = 0;
                    if (string.IsNullOrEmpty(model.arrival_no))
@@ -2159,25 +2168,25 @@
                    //根据不同出库类型 回调sap
                    if (po.S_OUT_TYPE == "冲销出库")
                    {
                        result = await CXAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start);
                        result = await CXAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    else
                    if (po.S_OUT_TYPE == "出库")//普通出库
                    {
                        LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}");
                        result = await AddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start);
                        result = await AddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    else if (po.S_OUT_TYPE == "计划外发料出库")
                    {
                        result = await jhwtlAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start);
                        result = await jhwtlAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    else if (po.S_OUT_TYPE == "成本中心出库")
                    {
                        result = await CBAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start);
                        result = await CBAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    //通用接口 对容器货品的删减 和生成回库单 都要用的接口
                    result = await TYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, model.start, po.S_OUT_TYPE, model.cntr_type);
                    result = await TYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, start, po.S_OUT_TYPE, model.cntr_type);
                    if (result.resultCode == 1)
                    {
                        return result;
@@ -2316,9 +2325,10 @@
                //回参物料信息
                List<OutboundRecord> records = new List<OutboundRecord>();
                var pz = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == arrival_no).First();
                var pzlist = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == arrival_no).ToList();
                foreach (var item in MaterList)
                {
                    var pz=pzlist.Where(s=>s.S_WLBM== item.item_code).FirstOrDefault();
                    // 插入到托盘明细表
                    var cntr = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code).ToList();
                    if (cntr.Count() > 0)
@@ -2388,10 +2398,12 @@
                            return result;
                        }
                        Location endloc = new Location();
                        var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE == cntr_code).First();
                        LogHelper.Info($"获取托盘信息{cntr_code}容器");
                        var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE.Trim() == cntr_code).First();
                        if (hwbd != null)
                        {
                            endloc = db.Queryable<Location>().Where(a => a.S_CODE == hwbd.S_LOC_CODE).First();
                            endloc = db.Queryable<Location>().Where(a => a.S_CODE == hwbd.S_LOC_CODE.Trim()).First();
                            if (endloc?.N_LOCK_STATE != 0)
                            {
                                result.resultCode = 3;
@@ -4569,7 +4581,7 @@
                        }
                        string combinedIds = string.Join(",", po.Details.Select(x => x.N_ROW_NO));
                        var KEY = WCSHelper.Generate13DigitIds();
                        var s_key = db.Queryable<TN_InBounder_Sh>().Where(a => a.S_NO == model.S_NO && a.N_ROW_NO == combinedIds).First();
                        var s_key = db.Queryable<TN_InBounder_Sh>().Where(a => a.S_NO == model.S_NO && a.N_ROW_NO == combinedIds).ToList().FirstOrDefault();
                        if (s_key != null)
                        {
                            KEY = s_key.S_KEY;
core/WMSCore.cs
@@ -34,7 +34,8 @@
            //WMSHelper.GetWaitingSortingOrderList();
        }
        internal static void CheckDistributionCNTROrder() {
        internal static void CheckDistributionCNTROrder()
        {
            LogHelper.Info($"配盘生成作业 ");
            var db = new SqlHelper<object>().GetInstance();
            //获取配盘单
@@ -117,6 +118,111 @@
            }
            LogHelper.Info($"获取配盘数量 {list.Count}");
        }
        internal static void podetailSend()
        {
            LogHelper.Info($"自动生成出库任务 ");
            var db = new SqlHelper<object>().GetInstance();
            //获取入库明细单
            var list = db.Queryable<TN_Inbound_Detail>().Where(a => a.N_B_STATE == 1).ToList();
            try
            {
                foreach (var item in list)
                {
                    var cir2 = db.Queryable<CGRels>().Where(a => a.S_ITEM_CODE == item.S_ITEM_CODE).First();
                    var S_CNTR_CODE = "";
                    if (cir2 != null)
                    {
                        S_CNTR_CODE=cir2.S_CNTR_CODE;
                    }
                    var lcr = db.Queryable<LocCntrRel>().Where(c => c.S_CNTR_CODE == S_CNTR_CODE).First();
                    if (lcr != null)
                    {
                        //起始库位
                        var startloc = db.Queryable<Location>().Where(it => it.S_CODE == lcr.S_LOC_CODE).First();
                        var wsc= db.Queryable<WCSTask>().Where(it => it.S_CODE == lcr.S_LOC_CODE&&it.N_B_STATE<3).First();
                        if (wsc!=null)
                        {
                            item.N_B_STATE = 2;
                            db.Updateable(item).UpdateColumns(it => new {  it.N_B_STATE }).ExecuteCommand();
                        }
                        else
                        {
                            if (startloc != null)//&&
                            {
                                //终点货位
                                var endloc = db.Queryable<Location>().Where(it => it.S_AREA_CODE == "QYQXHQ" && it.N_LOCK_STATE == 0 && it.N_CURRENT_NUM == 0).First();
                                // var endloc = db.Queryable<Location>().Where(it => it.S_CODE == item.S_END_LOC).First();
                                if (endloc != null)
                                {
                                    var optask = new WMSTask
                                    {
                                        S_CODE = WMSHelper.GenerateTaskNo(),
                                        S_START_LOC = startloc.S_CODE,
                                        S_START_AREA = startloc.S_AREA_CODE,
                                        S_START_WH = startloc.S_WH_CODE,
                                        S_END_LOC = endloc.S_CODE,
                                        S_END_AREA = endloc.S_AREA_CODE,
                                        S_END_WH = endloc.S_WH_CODE,
                                        S_TYPE = "出库区",
                                        N_TYPE = 2,
                                        N_B_STATE = 0,
                                        S_BS_NO = "",
                                        S_CNTR_CODE = S_CNTR_CODE,
                                        S_OP_DEF_NAME = item.S_BS_TYPE
                                    };
                                    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(endloc.S_CODE, 1);
                                        item.N_B_STATE = 2;
                                        db.Updateable(item).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                                    }
                                }
                                else
                                {
                                    LogHelper.Info($"{item.S_BS_NO}配盘 库区AGVXHQ无空货位");
                                }
                            }
                            else
                            {
                                LogHelper.Info($"{item.S_BS_NO}配盘 库区无货位");
                            }
                        }
                    }
                    else
                    {
                        LogHelper.Info($"配盘生成作业容器未绑定货位");
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Info($"配盘生成作业错误 {ex.Message}");
                throw;
            }
            LogHelper.Info($"获取配盘数量 {list.Count}");
        }
        /// <summary>
        /// 遍历分拣单明细创建出库作业
        /// </summary>
process/TaskProcess.cs
@@ -766,14 +766,14 @@
                            dic1.Add("From", start);
                            dic1.Add("To", end);
                            dic1.Add("Func", "0");
                            if (mst.S_TYPE.Contains("入库"))
                            {
                                dic1.Add("Data", "512");
                            }
                            else
                            {
                            //if (mst.S_TYPE.Contains("入库"))
                            //{
                            //    dic1.Add("Data", "0");
                            //}
                            //else
                            //{
                                dic1.Add("Data", "0");
                            }
                            //}
                            dic1.Add("FRow", "0");
                            LogHelper.Info($"推送{start}{end}");
                            //判断