Admin.NET/WCS.Application/Entity/WcsBoxInfoLog.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/PLC/PLCService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Admin.NET/WCS.Application/Entity/WcsBoxInfoLog.cs
@@ -116,6 +116,12 @@ [SugarColumn(ColumnName = "BoxNo2", ColumnDescription = "盒码", Length = 30)] public string? BoxNo2 { get; set; } /// <summary> /// 支码 /// </summary> [SugarColumn(ColumnName = "BoxNo3", ColumnDescription = "支码", Length = 30)] public string? BoxNo3 { get; set; } /// <summary> /// 包装级别 /// </summary> Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
@@ -80,6 +80,8 @@ ResponseModel result = new ResponseModel(); try { string str = JsonConvert.SerializeObject(models); Log.Information("接收WMS出入库任务,任务号:" + models.TaskNo + ",托盘号:"+ models.PalletNo); // 验证任务是否已存在 var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == models.TaskNo); if (taskInfo != null) @@ -372,31 +374,19 @@ return new ResponseFuMaModel() { Success = "-1", Message = "该批次未进行分拣或已结批" }; } //获取包装数量 int Fqty = int.Parse(models.FinishQty); int bzQty = 0; var boxinfolog = _db.Queryable<WcsBoxInfoLog>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.BitBoxMark == "0").First(); if (boxinfolog == null) { var boxinfo = _db.Queryable<WcsBoxInfo>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.BitBoxMark == "0").First(); Fqty = (int)(Fqty /boxinfo.QtyCount); bzQty = (int)boxinfo.QtyCount; } else { Fqty = (int)(Fqty / boxinfolog.QtyCount); bzQty = (int)boxinfolog.QtyCount; } int Jpqty = 0; //写入该任务完成数量 foreach (var item in num) { int jp = 0;//结批是否需要组盘0:不需要,1:需要。不需要组盘则直接释放分道,需要组盘则下发PLC预结批信号 item.FinishQty = Fqty; //判断当前单据码垛数量是否和完工数量相等,是则结批该单据 //获取已组盘数量 var checkNum = _db.Queryable<WcsBoxInfoLog>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.OrderCode == item.OrderNo).ToList();//组盘表箱码信息 if (checkNum.Count>0) { if (checkNum.First().Qty != 0)//有支码 if (!(string.IsNullOrEmpty(checkNum.First().BoxNo2))||!(string.IsNullOrEmpty(checkNum.First().BoxNo3)))//有支码 { foreach (var item2 in checkNum) { @@ -411,44 +401,100 @@ } } } var checkNum2 = _db.Queryable<WcsBoxInfo>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.OrderCode == item.OrderNo).ToList();//箱码表已码垛箱码信息 //获取已插码数量 var checkNum2 = _db.Queryable<WcsBoxInfo>().Where(m =>m.BitBoxMark != "1" && m.SkuNo == models.SkuNo && m.LotNo == models.LotNo &&(m.PalletNo != null || m.PalletNo != "") && m.OrderCode == item.OrderNo).ToList();//箱码表已码垛箱码信息 if (checkNum2.Count>0) { if (checkNum2.First().Qty != 0)//有支码 jp = 1;//箱码表还有未组盘箱,需要组盘 if (!string.IsNullOrEmpty(checkNum2.First().BoxNo2)||!string.IsNullOrEmpty(checkNum2.First().BoxNo3))//有支码 { foreach (var item2 in checkNum) foreach (var item2 in checkNum2) { Jpqty = (int)(Jpqty + item2.Qty); } } else//无支码 { foreach (var item2 in checkNum) foreach (var item2 in checkNum2) { Jpqty = (int)(Jpqty + item2.QtyCount); } } } if (Jpqty/bzQty == Fqty) //获取零箱数量 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) { var modPlc = _db.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.Text == ("2层托盘输送线")).First(); if (modPlc == null) throw Oops.Bah("未找到输送线PLC"); PLCUtil plcConn = new PLCUtil(modPlc); //获取工位点位信息 var portno = item.Port; var modDevice = _db.Queryable<WcsPosition>().Where(s => s.StationNum == portno).First(); var listPlcDevice = _db.Queryable<WcsDevice>().Where(s => s.StationNum == portno && s.Text.Contains("2楼")).First(); var ret = plcConn.SetPlcDBValue(modDevice.PosType, listPlcDevice.DbNumber, modDevice.PlcPos, "1");//写入开始结批信号 if (ret.IsSucceed) //判断当前分道是否有未组盘箱 if (jp == 0) { // 分道解绑,抓箱品种写入0 var ret1 = plcConn.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PlcPos, "0"); if (ret1.IsSucceed) { //更新入库订单 var orderTask = _db.Queryable<WcsOderTask>().Where(w => w.SkuNo == item.SkuNo && w.LotNo == item.LotNo && w.IsDelete == false).ToList(); if (orderTask.Count > 0) { foreach (var item2 in orderTask) { item2.Status = TaskStatusEnum.Complete; _db.Updateable(item2).ExecuteCommand(); } } //写入流程字成功后更新分拣任务 liudl 最后一托盘申请完入库才可清空 item.OrderNo = ""; item.TaskNo = ""; item.LotNo = ""; item.SkuNo = ""; item.SkuName = ""; item.BoxType = ""; item.Qty = 0; item.PZNo = ""; item.Status = "0"; // 绑定分道 0:解绑 1:绑定 item.FinishQty = 0; //更新分拣任务 _db.Updateable(item).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } } else { //预结批信号下发 var ret2 = plcConn.SetPlcDBValue(item.PosType, item.DbNumber, item.PosLot, "1");//写入开始结批信号 if (ret2.IsSucceed) { item.Status = "2";//结批中 } else { throw new Exception("完工结批信号下发给PLC错误"); } } _db.Updateable(item).ExecuteCommand(); return new ResponseFuMaModel() { Success = "0", Message = "接受完工结批数量成功" }; } } return new ResponseFuMaModel() { Success = "0", Message = "接受完工结批数量成功" }; Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -1965,7 +1965,7 @@ if (orderModel != null) { // 根据boxinfo表产线字段自动绑定分道(1线产品只能绑定到8道) if (boxInfo.LineNo != "1") if (boxInfo.LineNo != "一线") {// 绑定到除8道外其他道 // 获取未绑定道 @@ -2010,9 +2010,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 +2103,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 +2359,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)); @@ -2377,6 +2380,8 @@ 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 +2390,85 @@ var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1"); //是否结批箱 if (boxInfo[0].EndLotFlag == "1" && retVal.IsSucceed) //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"); } //检查已码垛箱数,码垛数量与完工数量相等后自动结批 //var finishiqty = _db.Queryable<WcsBoxInfoLog>().Count(m => m.SkuNo = ) //if (true) //{ //} } } } else { @@ -2556,11 +2628,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 +2652,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 +2673,12 @@ checkTaskMedel.Qty = 0; checkTaskMedel.PZNo = ""; checkTaskMedel.Status = "0"; // 绑定分道 0:解绑 1:绑定 checkTaskMedel.FinishQty = 0; //更新分拣任务 _db.Updateable(checkTaskMedel).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } } // 获取入库任务信息