| | |
| | | using Dm.filter; |
| | | using DocumentFormat.OpenXml.Drawing.Charts; |
| | | using DocumentFormat.OpenXml.Office.CustomUI; |
| | | using DocumentFormat.OpenXml.Presentation; |
| | | using Elastic.Clients.Elasticsearch; |
| | | using Furion.Logging; |
| | |
| | | |
| | | //获取包装数量 |
| | | 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) |
| | | { |
| | | 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)//有支码 |
| | | { |
| | | foreach (var item2 in checkNum) |
| | | { |
| | | Jpqty = (int)(Jpqty + item2.Qty); |
| | | } |
| | | } |
| | | else//无支码 |
| | | { |
| | | foreach (var item2 in checkNum) |
| | | { |
| | | Jpqty = (int)(Jpqty + item2.QtyCount); |
| | | } |
| | | } |
| | | } |
| | | var checkNum2 = _db.Queryable<WcsBoxInfo>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.OrderCode == item.OrderNo).ToList();//箱码表已码垛箱码信息 |
| | | if (checkNum2.Count>0) |
| | | { |
| | | if (checkNum2.First().Qty != 0)//有支码 |
| | | { |
| | | foreach (var item2 in checkNum) |
| | | { |
| | | Jpqty = (int)(Jpqty + item2.Qty); |
| | | } |
| | | } |
| | | else//无支码 |
| | | { |
| | | foreach (var item2 in checkNum) |
| | | { |
| | | Jpqty = (int)(Jpqty + item2.QtyCount); |
| | | } |
| | | } |
| | | } |
| | | if (Jpqty/bzQty == 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) |
| | | { |
| | | item.Status = "2";//结批中 |
| | | } |
| | | else { throw new Exception("完工结批信号下发给PLC错误"); } |
| | | } |
| | | _db.Updateable(item).ExecuteCommand(); |
| | | return new ResponseFuMaModel() { Success = "0", Message = "接受完工结批数量成功" }; |
| | | } |
| | | _db.Updateable(num).ExecuteCommand(); |
| | | |
| | | |
| | | return new ResponseFuMaModel() { Success = "0", Message = "接受完工结批数量成功" }; |
| | | } |
| | | catch (Exception ex) |
| | |
| | | string str = JsonConvert.SerializeObject(models); |
| | | Log.Information("接收WMS入库放货确认,放货口:" + models.Port+"入库口"); |
| | | |
| | | var portno = models.Port; |
| | | var layer = "3"; |
| | | switch (models.Port) |
| | | { |
| | | case "033": |
| | | portno = "33"; |
| | | layer = "1"; |
| | | break; |
| | | case "039": |
| | | portno = "39"; |
| | | layer = "1"; |
| | | break; |
| | | case "044": |
| | | portno = "44"; |
| | | layer = "1"; |
| | | break; |
| | | case "051": |
| | | portno = "51"; |
| | | layer = "1"; |
| | | break; |
| | | } |
| | | |
| | | //检测入库口状态,120为可放,占用则修改为130 |
| | | WcsDeviceDto modDevice = new WcsDeviceDto(); |
| | | var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "PLC流程字"); |
| | | var plcConn = modDevice.PLCUtil; |
| | | var (res1, val) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); |
| | | var modPlc = _db.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.Text == (layer + "层托盘输送线")).First(); |
| | | if (modPlc == null) |
| | | throw Oops.Bah("未找到输送线PLC"); |
| | | PLCUtil plcConn = new PLCUtil(modPlc); |
| | | //获取工位点位信息 |
| | | var listPlcDevice = _db.Queryable<WcsDevice>().Where(s => s.LedIP != null && s.StationNum == portno).First(); |
| | | var modDevice = _db.Queryable<WcsPosition>().Where(s => s.StationNum == portno && s.Text == "PLC").First(); |
| | | |
| | | var (res1, val) = plcConn.GetPlcDBValue(modDevice.PosType, listPlcDevice.DbNumber, modDevice.PlcPos); |
| | | if (val.ToString() == "120") |
| | | { |
| | | modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "WCS流程字"); |
| | | //读取成功后写入130 |
| | | var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "130");//占用此工位 |
| | | modDevice = _db.Queryable<WcsPosition>().Where(s => s.StationNum == portno && s.Text == "WCS").First(); |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, listPlcDevice.DbNumber, modDevice.PlcPos, "130");//占用此工位 |
| | | if (ret.IsSucceed) |
| | | { |
| | | //回传WMS可放信号 |
| | |
| | | try |
| | | { |
| | | string str = JsonConvert.SerializeObject(models); |
| | | Log.Information("接收WMS入库放货确认,放货口:" + models.Port + "入库口"); |
| | | Log.Information("接收WMS入库放货请求,放货口:" + models.Port + "入库口"); |
| | | |
| | | WcsDeviceDto modDevice = new WcsDeviceDto(); |
| | | var plcConn = modDevice.PLCUtil; |
| | | var portno = models.Port; |
| | | var layer = "3"; |
| | | switch (models.Port) |
| | | { |
| | | case "033": |
| | | portno = "33"; |
| | | layer = "1"; |
| | | break; |
| | | case "039": |
| | | portno = "39"; |
| | | layer = "1"; |
| | | break; |
| | | case "044": |
| | | portno = "44"; |
| | | layer = "1"; |
| | | break; |
| | | case "051": |
| | | portno = "51"; |
| | | layer = "1"; |
| | | break; |
| | | } |
| | | |
| | | var modPlc = _db.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.Text == (layer + "层托盘输送线")).First(); |
| | | if (modPlc == null) |
| | | throw Oops.Bah("未找到输送线PLC"); |
| | | PLCUtil plcConn = new PLCUtil(modPlc); |
| | | //获取工位点位信息 |
| | | //modDevice = ......=models.Port |
| | | var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "任务号"); |
| | | plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, models.TaskNo);//写入任务号 |
| | | // |
| | | modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "WCS流程字"); |
| | | |
| | | var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "140");//开始放货 |
| | | var listPlcDevice = _db.Queryable<WcsDevice>().Where(s=>s.LedIP != null && s.StationNum == portno).First(); |
| | | var modDevice = _db.Queryable<WcsPosition>().Where(s => s.StationNum == portno && s.Text == "任务号").First(); |
| | | plcConn.SetPlcDBValue(modDevice.PosType, listPlcDevice.DbNumber, modDevice.PlcPos, models.TaskNo);//写入任务号 |
| | | // |
| | | modDevice = _db.Queryable<WcsPosition>().Where(s => s.StationNum == portno && s.Text == "WCS").First(); |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, listPlcDevice.DbNumber, modDevice.PlcPos, "140");//写入开始放货信号 |
| | | if (ret.IsSucceed) |
| | | { |
| | | //回传WMS放货信号 |
| | |
| | | try |
| | | { |
| | | string str = JsonConvert.SerializeObject(models); |
| | | Log.Information("接收WMS入库放货确认,放货口:" + models.Port + "入库口"); |
| | | Log.Information("接收WMS入库放货完成,放货口:" + models.Port + "入库口"); |
| | | |
| | | WcsDeviceDto modDevice = new WcsDeviceDto(); |
| | | var portno = models.Port; |
| | | var layer = "3"; |
| | | switch (models.Port) |
| | | { |
| | | case "033": |
| | | portno = "33"; |
| | | layer = "1"; |
| | | break; |
| | | case "039": |
| | | portno = "39"; |
| | | layer = "1"; |
| | | break; |
| | | case "044": |
| | | portno = "44"; |
| | | layer = "1"; |
| | | break; |
| | | case "051": |
| | | portno = "51"; |
| | | layer = "1"; |
| | | break; |
| | | } |
| | | |
| | | var modPlc = _db.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.Text == (layer + "层托盘输送线")).First(); |
| | | if (modPlc == null) |
| | | throw Oops.Bah("未找到输送线PLC"); |
| | | PLCUtil plcConn = new PLCUtil(modPlc); |
| | | //获取工位点位信息 |
| | | //modDevice = ......=models.Port |
| | | var listPlcDevice = _db.Queryable<WcsDevice>().Where(s => s.LedIP != null && s.StationNum == portno).First(); |
| | | var modDevice = _db.Queryable<WcsPosition>().Where(s => s.StationNum == portno && s.Text == "WCS").First(); |
| | | |
| | | var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "WCS流程字"); |
| | | var plcConn = modDevice.PLCUtil; |
| | | var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "140");//开始放货 |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, listPlcDevice.DbNumber, modDevice.PlcPos, "160");//放完成 |
| | | if (ret.IsSucceed) |
| | | { |
| | | //回传WMS放货信号 |