bklLiudl
2025-01-16 aa7daf29da4f6cda2c10a622a92bf86aa9820327
自动分道 零箱 剔除
3个文件已修改
237 ■■■■■ 已修改文件
Admin.NET/WCS.Application/Model/TaskRequest.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCService.cs 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Model/TaskRequest.cs
@@ -407,6 +407,11 @@
    /// 储存期至
    /// </summary>
    public string StoreTime { get; set; }
    /// <summary>
    /// 产线编号或名称
    /// </summary>
    public string LineNo { get; set; }
    /// <summary>
    /// 来源 固定值[赋码]
    /// </summary>
Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
@@ -268,6 +268,7 @@
                        SkuName = models.SkuName,
                        Standard = models.Standard,
                        LotNo = models.LotNo,
                        LineNo = models.LineNo,                 // 产线号或产线名称
                        Qty = item2.Qty,
                        FullQty = models.FullQty,
                        //SupplierLot = models.SupplierLot,
@@ -283,7 +284,7 @@
                        BoxNo3 = item2.BoxNo3,
                        QtyCount = item2.QtyCount,
                        QtyOrd = item2.QtyOrd,
                        Status = "0",
                        Level = level,
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -16,6 +16,7 @@
using System.Data;
using System.Reflection.Emit;
using WCS.Application.Entity;
using WCS.Application.Service.WcsDevice.Dto;
using WCS.Application.Util;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressIntracityUpdateStoreRequest.Types;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.NontaxInsertBillRequest.Types.CardExtra.Types.BillCard.Types;
@@ -1871,11 +1872,12 @@
                                        }
                                    }
                                }
                                // 根据箱内品种号获取码躲绑定工位及对应的分道号
                                var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo && w.Status == "1");
                                if (checkTaskInfo == null)
                                // 验证是否零箱
                                if (boxInfo.BitBoxMark == "1")
                                {
                                    // 绑定信息为null写入剔除通道号
                                    // 是零箱直接剔除,进行人工组托
                                    var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
                                    if (ret.IsSucceed)
                                    {
@@ -1883,10 +1885,227 @@
                                        var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                        if (retVal.IsSucceed)
                                        {
                                            Log.Error("箱码未绑定分拣任务,进行剔除。");
                                            Log.Error("零箱,进行剔除。");
                                            break;
                                        }
                                    }
                                    break;
                                }
                                // 根据箱内品种号获取码躲绑定工位及对应的分道号
                                var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo && w.Status == "1");
                                if (checkTaskInfo == null)
                                {
                                    // 判断是否关联单据 wcsordertask
                                    var orderModel = _db.Queryable<WcsOderTask>()
                                        .First(m => m.SkuNo == boxInfo.SkuNo && m.Status== TaskStatusEnum.Wait && m.LotNo == boxInfo.LotNo && m.IsDelete == false);
                                    if (orderModel != null)
                                    {
                                        // 根据boxinfo表产线字段自动绑定分道(1线产品只能绑定到8道)
                                        if (boxInfo.LineNo != "1")
                                        {// 绑定到除8道外其他道
                                            // 获取未绑定道
                                            var lineNoModels = _db.Queryable<WcsCheckTask>()
                                                .Where(m => m.Status == "0" && m.LineNo != "8" && m.RoboatType == PLCTypeEnum.RobotPalletizer).ToList();
                                            if (lineNoModels.Count > 0)
                                            {
                                                // 获取当前物料品种号
                                                var skuInfo = await _db.Queryable<WcsMateialPzInfo>().Where(w => w.SkuNo == boxInfo.SkuNo).FirstAsync();
                                                if (skuInfo == null)
                                                {
                                                    // 此产品若没设定品规,进行剔除处理。防止堵塞件箱线
                                                    var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
                                                    if (ret.IsSucceed)
                                                    {
                                                        // 写入流程控制字 2
                                                        var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                                        if (retVal.IsSucceed)
                                                        {
                                                            Log.Error("没有空闲分道,进行剔除。");
                                                            break;
                                                        }
                                                    }
                                                    break;
                                                }
                                                foreach (var lineNoModel in lineNoModels)
                                                {
                                                    // 读取设备验证是否绑定分道
                                                    var (respg, pzNo) = plcConn.GetPlcDBValue(lineNoModel.PosType, lineNoModel.DbNumber, lineNoModel.PlcPos);
                                                    if (respg.IsSucceed)
                                                    {
                                                        if (pzNo != 0)
                                                        {
                                                            // plc此分道未解绑
                                                            break;
                                                        }
                                                        else
                                                        {
                                                            // 自动绑定分道
                                                            lineNoModel.OrderNo = orderModel.OrderNo;
                                                            lineNoModel.LotNo = boxInfo.LotNo;
                                                            lineNoModel.SkuNo = boxInfo.SkuNo;
                                                            lineNoModel.SkuName = boxInfo.SkuName;
                                                            lineNoModel.Qty = orderModel.Qty;
                                                            lineNoModel.Status = "1";//已绑定
                                                            lineNoModel.PZNo = skuInfo.PZNo;
                                                            // 给PLC写入品规
                                                            var ret = plcConn.SetPlcDBValue(lineNoModel.PosType, lineNoModel.DbNumber, lineNoModel.PlcPos, skuInfo.PZNo);
                                                            if (ret.IsSucceed)
                                                            {
                                                                //写入流程字成功后更新分拣任务
                                                                _db.Updateable(lineNoModel).ExecuteCommand();
                                                                //更新WcsOderTask表
                                                                orderModel.Status = TaskStatusEnum.Doing;
                                                                _db.Updateable(orderModel).ExecuteCommand();
                                                                // Liudl 通知前端更新分拣任务
                                                                //下发分拣任务
                                                                HubUtil.PublicCheckTask(lineNoModel.Adapt<WcsDeviceTaskOrderDto>());
                                                                break;
                                                            }
                                                            else
                                                            {
                                                                throw Oops.Bah("与PCL交互失败,绑定失败!");
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        // 读取plc失败
                                                        break;
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                // 若没有空闲道,进行剔除处理。防止堵塞件箱线
                                                var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
                                                if (ret.IsSucceed)
                                                {
                                                    // 写入流程控制字 2
                                                    var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                                    if (retVal.IsSucceed)
                                                    {
                                                        Log.Error("没有空闲分道,进行剔除。");
                                                        break;
                                                    }
                                                }
                                                break;
                                            }
                                        }
                                        else
                                        {// 绑定到8道
                                         // 获取未绑定道
                                            var lineNo8Model = _db.Queryable<WcsCheckTask>()
                                                .First(m => m.Status == "0" && m.LineNo == "8" && m.RoboatType == PLCTypeEnum.RobotPalletizer);
                                            if (lineNo8Model != null)
                                            {
                                                // 获取当前物料品种号
                                                var skuInfo = await _db.Queryable<WcsMateialPzInfo>().Where(w => w.SkuNo == boxInfo.SkuNo).FirstAsync();
                                                if (skuInfo == null)
                                                {
                                                    // 此产品若没设定品规,进行剔除处理。防止堵塞件箱线
                                                    var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
                                                    if (ret.IsSucceed)
                                                    {
                                                        // 写入流程控制字 2
                                                        var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                                        if (retVal.IsSucceed)
                                                        {
                                                            Log.Error("没有空闲分道,进行剔除。");
                                                            break;
                                                        }
                                                    }
                                                    break;
                                                }
                                                // 读取设备验证是否绑定分道
                                                var (respg, pzNo) = plcConn.GetPlcDBValue(lineNo8Model.PosType, lineNo8Model.DbNumber, lineNo8Model.PlcPos);
                                                if (respg.IsSucceed)
                                                {
                                                    if (pzNo != 0)
                                                    {
                                                        // plc此分道未解绑
                                                        break;
                                                    }
                                                    else
                                                    {
                                                        // 自动绑定分道
                                                        lineNo8Model.OrderNo = orderModel.OrderNo;
                                                        lineNo8Model.LotNo = boxInfo.LotNo;
                                                        lineNo8Model.SkuNo = boxInfo.SkuNo;
                                                        lineNo8Model.SkuName = boxInfo.SkuName;
                                                        lineNo8Model.Qty = orderModel.Qty;
                                                        lineNo8Model.Status = "1";//已绑定
                                                        lineNo8Model.PZNo = skuInfo.PZNo;
                                                        // 给PLC写入品规
                                                        var ret = plcConn.SetPlcDBValue(lineNo8Model.PosType, lineNo8Model.DbNumber, lineNo8Model.PlcPos, skuInfo.PZNo);
                                                        if (ret.IsSucceed)
                                                        {
                                                            //写入流程字成功后更新分拣任务
                                                            _db.Updateable(lineNo8Model).ExecuteCommand();
                                                            //更新WcsOderTask表
                                                            orderModel.Status = TaskStatusEnum.Doing;
                                                            _db.Updateable(orderModel).ExecuteCommand();
                                                            // Liudl 通知前端更新分拣任务
                                                            //下发分拣任务
                                                            HubUtil.PublicCheckTask(lineNo8Model.Adapt<WcsDeviceTaskOrderDto>());
                                                            break;
                                                        }
                                                        else
                                                        {
                                                            throw Oops.Bah("与PCL交互失败,绑定失败!");
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    // 读取plc失败
                                                    break;
                                                }
                                            }
                                            else
                                            {
                                                // 没有空闲道,进行剔除处理。防止堵塞件箱线
                                                var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
                                                if (ret.IsSucceed)
                                                {
                                                    // 写入流程控制字 2
                                                    var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                                    if (retVal.IsSucceed)
                                                    {
                                                        Log.Error("没有空闲分道,进行剔除。");
                                                        break;
                                                    }
                                                }
                                                break;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        // 不关联单据直接进行剔除处理
                                        var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
                                        if (ret.IsSucceed)
                                        {
                                            // 写入流程控制字 2
                                            var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                            if (retVal.IsSucceed)
                                            {
                                                Log.Error("箱码未绑定分拣任务,进行剔除。");
                                                break;
                                            }
                                        }
                                    }
                                }
                                else
                                {