| | |
| | | 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) |
| | |
| | | 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) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | 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) |
| | | { |
| | | item.Status = "2";//结批中 |
| | | // 分道解绑,抓箱品种写入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 { throw new Exception("完工结批信号下发给PLC错误"); } |
| | | 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(); |
| | | } |
| | | _db.Updateable(item).ExecuteCommand(); |
| | | return new ResponseFuMaModel() { Success = "0", Message = "接受完工结批数量成功" }; |
| | | } |
| | | |
| | | return new ResponseFuMaModel() { Success = "0", Message = "接受完工结批数量成功" }; |