zhaowc
2025-04-30 9db096bf7366bb953f961bef9fa68a7b5d4c27fe
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -218,11 +218,16 @@
                        //修改led屏信息
                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == taskInfo.EndStation && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
                        ledText += $"任务类型:{modTask.TaskType.GetDescription()}\n\n";
                        ledText += $"任务号:{modTask.TaskNo}\n";
                        //ledText += $"任务类型:{modTask.TaskType.GetDescription()}\n\n";
                        //ledText += $"任务号:{modTask.TaskNo}\n";
                        //ledText += $"托盘号:{modTask.PalletNo}\n\n";
                        //ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                        //ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                        ledText += $"名称:{modTask.SkuName}\n";
                        ledText += $"批号:{modTask.LotNo}\n";
                        ledText += $"入库数量:{modTask.Qty}\n";
                        ledText += $"托盘号:{modTask.PalletNo}\n\n";
                        ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                        ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                        LedDisplay(ledDevice.LedIP, ledText);
                    }
                }
@@ -453,13 +458,18 @@
                                    // led显示内容
                                    var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modTask.StartLocate && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
                                    ledText += $"入库完成\n\n";
                                    //ledText += $"入库完成\n\n";
                                    ledText += $"任务号:{modTask.TaskNo}\n";
                                    //ledText += $"任务号:{modTask.TaskNo}\n";
                                    //ledText += $"托盘号:{modTask.PalletNo}\n\n";
                                    //ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                                    //ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                                    ledText += $"名称:{modTask.SkuName}\n";
                                    ledText += $"批号:{modTask.LotNo}\n";
                                    ledText += $"入库数量:{modTask.Qty}\n";
                                    ledText += $"托盘号:{modTask.PalletNo}\n\n";
                                    ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                                    ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                                    LedDisplay(ledDevice.LedIP, ledText);
                                    // 此处添加不空跑业务
@@ -1069,13 +1079,18 @@
                            // led显示内容
                            try
                            {
                                ledText += $"任务类型:{taskInfo.TaskType.GetDescription()}\n\n";
                                //ledText += $"任务类型:{taskInfo.TaskType.GetDescription()}\n\n";
                                ledText += $"任务号:{taskInfo.TaskNo}\n";
                                //ledText += $"任务号:{taskInfo.TaskNo}\n";
                                //ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                                //ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                                //ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                                ledText += $"名称:{taskInfo.SkuName}\n";
                                ledText += $"批号:{taskInfo.LotNo}\n";
                                ledText += $"入库数量:{taskInfo.Qty}\n";
                                ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                                ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                                ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                                LedDisplay(modDevice.LedIP, ledText);
                                
                            }
@@ -1251,11 +1266,15 @@
                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                            
                            var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
                            ledText += $"任务类型:{taskInfo.TaskType.GetDescription()}\n\n";
                            ledText += $"任务号:{taskInfo.TaskNo}\n";
                            //ledText += $"任务类型:{taskInfo.TaskType.GetDescription()}\n\n";
                            //ledText += $"任务号:{taskInfo.TaskNo}\n";
                            //ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                            //ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                            //ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                            ledText += $"名称:{taskInfo.SkuName}\n\n";
                            ledText += $"批号:{taskInfo.LotNo}\n";
                            ledText += $"入库数量:{taskInfo.Qty}\n";
                            ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                            ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                            ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                            LedDisplay(modDevice.LedIP, ledText);
                        }
                    }
@@ -1461,10 +1480,15 @@
                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
                        
                        ledText += $"出库完成\n\n";
                        ledText += $"任务号:{taskInfo.TaskNo}\n";
                        //ledText += $"任务号:{taskInfo.TaskNo}\n";
                        //ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                        //ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                        //ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                        ledText += $"名称:{taskInfo.SkuName}\n";
                        ledText += $"批号:{taskInfo.LotNo}\n";
                        ledText += $"出库数量:{taskInfo.Qty}\n";
                        ledText += $"分配数量:{taskInfo.CompleteQty}\n";
                        ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                        ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                        ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                        LedDisplay(ledDevice.LedIP, ledText);
                    }
                    // 反馈WMS出库完成
@@ -1546,10 +1570,16 @@
                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
                        
                        ledText += $"出库完成\n\n";
                        ledText += $"任务号:{modTask.TaskNo}\n";
                        //ledText += $"任务号:{modTask.TaskNo}\n";
                        //ledText += $"托盘号:{modTask.PalletNo}\n\n";
                        //ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                        //ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                        ledText += $"名称:{modTask.SkuName}\n";
                        ledText += $"批号:{modTask.LotNo}\n";
                        ledText += $"出库数量:{modTask.Qty}\n";
                        ledText += $"分配数量:{modTask.CompleteQty}\n";
                        ledText += $"托盘号:{modTask.PalletNo}\n\n";
                        ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                        ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                        LedDisplay(ledDevice.LedIP, ledText);
                    }
                    #endregion
@@ -1965,7 +1995,7 @@
                                    if (orderModel != null)
                                    {
                                        // 根据boxinfo表产线字段自动绑定分道(1线产品只能绑定到8道)
                                        if (boxInfo.LineNo != "1")
                                        if (boxInfo.LineNo != "一线")
                                        {// 绑定到除8道外其他道
                                            // 获取未绑定道
@@ -2010,9 +2040,10 @@
                                                            lineNoModel.LotNo = boxInfo.LotNo;
                                                            lineNoModel.SkuNo = boxInfo.SkuNo;
                                                            lineNoModel.SkuName = boxInfo.SkuName;
                                                            lineNoModel.Qty = orderModel.Qty;
                                                            lineNoModel.Qty = 0;
                                                            lineNoModel.Status = "1";//已绑定
                                                            lineNoModel.PZNo = skuInfo.PZNo;
                                                            lineNoModel.FinishQty = 0;
                                                            // 给PLC写入品规
                                                            var ret = plcConn.SetPlcDBValue(lineNoModel.PosType, lineNoModel.DbNumber, lineNoModel.PlcPos, skuInfo.PZNo);
@@ -2102,9 +2133,10 @@
                                                        lineNo8Model.LotNo = boxInfo.LotNo;
                                                        lineNo8Model.SkuNo = boxInfo.SkuNo;
                                                        lineNo8Model.SkuName = boxInfo.SkuName;
                                                        lineNo8Model.Qty = orderModel.Qty;
                                                        lineNo8Model.Qty = 0;
                                                        lineNo8Model.Status = "1";//已绑定
                                                        lineNo8Model.PZNo = skuInfo.PZNo;
                                                        lineNo8Model.FinishQty = 0;
                                                        // 给PLC写入品规
                                                        var ret = plcConn.SetPlcDBValue(lineNo8Model.PosType, lineNo8Model.DbNumber, lineNo8Model.PlcPos, skuInfo.PZNo);
@@ -2357,7 +2389,8 @@
                                break;
                            }
                            // 获取当前分道托盘号
                            var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false);
                            string port = modDevice.StationNum.ToString();
                            var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == port && m.Status == "1");
                            if (checkTaskMedel == null)
                            {
                                Log.Error(string.Format("根据码垛工位{0},获取分道失败!", modDevice.StationNum));
@@ -2376,7 +2409,9 @@
                                item.UpdateTime = DateTime.Now;
                                item.OrderCode = checkTaskMedel.OrderNo;
                            }
                            checkTaskMedel.Qty += boxInfo.First().QtyCount;//记录当前托盘上物料数量
                            _db.Updateable(checkTaskMedel).ExecuteCommand();
                            var rowCount = _db.Updateable(boxInfo).ExecuteCommand();
                            Log.Information(string.Format("插码成功,箱码是:" + boxNo, modDevice.StationNum));
                            if (rowCount > 0)
@@ -2385,18 +2420,85 @@
                                var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1");
                                //是否结批箱 
                                if (boxInfo[0].EndLotFlag == "1" && retVal.IsSucceed)
                                {
                                    // 触发结批 分道变为结批中
                                    AutoEndLot(boxInfo[0].LotNo, plcConn, "2");
                                }
                                //检查已码垛箱数,码垛数量与完工数量相等后自动结批
                                //var finishiqty = _db.Queryable<WcsBoxInfoLog>().Count(m => m.SkuNo = )
                                //if (true)
                                //if (boxInfo[0].EndLotFlag == "1" && retVal.IsSucceed)
                                //{
                                //    // 触发结批 分道变为结批中
                                //    AutoEndLot(boxInfo[0].LotNo, plcConn, "2");
                                //}
                                if (retVal.IsSucceed)
                                {
                                    //判读是否接收完工数量
                                    var models = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.First().SkuNo && w.LotNo == boxInfo.First().LotNo);
                                    if (models.FinishQty>0)
                                    {
                                        //检查已码垛箱数(不含零箱),码垛数量与完工数量相等后自动结批:写入PLC信号——结批中
                                        int Fqty = (int)models.FinishQty;//完工数量
                                        int Jpqty = 0;//已码垛数量
                                        //获取已组盘数量
                                        var checkNum = _db.Queryable<WcsBoxInfoLog>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.OrderCode == checkTaskMedel.OrderNo).ToList();//组盘表箱码信息
                                        if (checkNum.Count > 0)
                                        {
                                            if (!string.IsNullOrEmpty(checkNum.First().BoxNo2) || !string.IsNullOrEmpty(checkNum.First().BoxNo3))//有支码
                                            {
                                                foreach (var item in checkNum)
                                                {
                                                    Jpqty = (int)(Jpqty + item.Qty);
                                                }
                                            }
                                            else//无支码
                                            {
                                                foreach (var item in checkNum)
                                                {
                                                    Jpqty = (int)(Jpqty + item.QtyCount);
                                                }
                                            }
                                        }
                                        //获取已插码数量
                                        var checkNum2 = _db.Queryable<WcsBoxInfo>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo &&(m.PalletNo != null || m.PalletNo != "") && m.OrderCode == checkTaskMedel.OrderNo).ToList();//箱码表已码垛箱码信息
                                        if (checkNum2.Count > 0)
                                        {
                                            if (!string.IsNullOrEmpty(checkNum2.First().BoxNo2) || !string.IsNullOrEmpty(checkNum2.First().BoxNo3))//有支码
                                            {
                                                foreach (var item2 in checkNum2)
                                                {
                                                    Jpqty = (int)(Jpqty + item2.Qty);
                                                }
                                            }
                                            else//无支码
                                            {
                                                foreach (var item2 in checkNum2)
                                                {
                                                    Jpqty = (int)(Jpqty + item2.QtyCount);
                                                }
                                            }
                                        }
                                        //获取零箱数量
                                        var checkNum3 = _db.Queryable<WcsBoxInfo>().Where(m => m.BitBoxMark == "1" && m.SkuNo == models.SkuNo && m.LotNo == models.LotNo).ToList();
                                        if (checkNum3.Count > 0)
                                        {
                                            if (!string.IsNullOrEmpty(checkNum3.First().BoxNo2) || !string.IsNullOrEmpty(checkNum3.First().BoxNo3))//有支码
                                            {
                                                foreach (var item3 in checkNum3)
                                                {
                                                    Jpqty = (int)(Jpqty + item3.Qty);
                                                }
                                            }
                                            else//无支码
                                            {
                                                foreach (var item3 in checkNum3)
                                                {
                                                    Jpqty = (int)(Jpqty + item3.QtyCount);
                                                }
                                            }
                                        }
                                        if (Jpqty == Fqty)
                                        {
                                            // 触发结批 分道变为结批中
                                            AutoEndLot(boxInfo[0].LotNo, plcConn, "2");
                                        }
                                    }
                                }
                            }
                            else
                            {
@@ -2556,11 +2658,14 @@
                                    string sqlStr2 = $"delete from WCSBoxInfo where  IsDelete=0 and PalletNo='{palletNo}'";
                                    _db.Ado.ExecuteCommand(sqlStr2);
                                }
                                //组盘成功后清空分拣表当前托盘上物料数量
                                checkTaskMedel.Qty = 0;
                                _db.Updateable(checkTaskMedel).ExecuteCommand();
                                // 向WMS申请巷道
                                var http = new HttpService();
                                string TaskNo = "", EndLocate = "";
                                string strMsg = http.BindRequestRoadWay(checkTaskMedel.OrderNo, palletNo, checkTaskMedel.BoxCount.ToDecimal(), "0", checkTaskMedel.SkuNo, checkTaskMedel.LotNo, "", "", boxInfoList,
                                string strMsg = http.BindRequestRoadWay(checkTaskMedel.OrderNo, palletNo, checkTaskMedel.Qty.ToDecimal(), "0", checkTaskMedel.SkuNo, checkTaskMedel.LotNo, "", "", boxInfoList,
                                    modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo);
                                if (strMsg.Contains("-1"))
                                {
@@ -2577,6 +2682,17 @@
                                        var ret1 = plcConn.SetPlcDBValue(checkTaskMedel.PosTypeLot, modDevice.DbNumber, checkTaskMedel.PlcPos, "0");
                                        if (ret1.IsSucceed)
                                        {
                                            //更新入库订单
                                            var orderTask = _db.Queryable<WcsOderTask>().Where(w => w.SkuNo == checkTaskMedel.SkuNo && w.LotNo == checkTaskMedel.LotNo && w.IsDelete == false).ToList();
                                            if (orderTask.Count >0)
                                            {
                                                foreach (var item in orderTask)
                                                {
                                                    item.Status = TaskStatusEnum.Complete;
                                                    _db.Updateable(item).ExecuteCommand();
                                                }
                                            }
                                            //写入流程字成功后更新分拣任务    liudl 最后一托盘申请完入库才可清空
                                            checkTaskMedel.OrderNo = "";
                                            checkTaskMedel.TaskNo = "";
@@ -2587,9 +2703,12 @@
                                            checkTaskMedel.Qty = 0;
                                            checkTaskMedel.PZNo = "";
                                            checkTaskMedel.Status = "0";      // 绑定分道 0:解绑  1:绑定 
                                            checkTaskMedel.FinishQty = 0;
                                            //更新分拣任务
                                            _db.Updateable(checkTaskMedel).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
                                        }
                                    }
                                    // 获取入库任务信息