| | |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using Dm.filter; |
| | | using DocumentFormat.OpenXml.Drawing.Charts; |
| | | using DocumentFormat.OpenXml.Office.CustomUI; |
| | | using DocumentFormat.OpenXml.Presentation; |
| | | using Elastic.Clients.Elasticsearch; |
| | | using Furion.Logging; |
| | | using Newtonsoft.Json; |
| | | using System; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using WCS.Application.Entity; |
| | | |
| | | namespace WCS.Application; |
| | | |
| | |
| | | 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) |
| | |
| | | result.Msg = "任务:" + models.TaskNo + ";已存在!"; |
| | | return result; |
| | | } |
| | | if (models.TaskType == "0") |
| | | if (models.TaskType == "0" && models.TaskType == "0") |
| | | { |
| | | models.Order = 1; |
| | | } |
| | |
| | | { |
| | | models.Order = 2; |
| | | } |
| | | Enum type; |
| | | var bale = "0"; |
| | | decimal nqty = 0; |
| | | decimal ncomqty = 0; |
| | | if (models.TaskType == "0" ) |
| | | { |
| | | type = TaskTypeEnum.In; |
| | | } |
| | | else if (models.TaskType == "1") |
| | | { |
| | | type = TaskTypeEnum.Out; |
| | | } |
| | | else if (models.TaskType == "3") |
| | | { |
| | | type = TaskTypeEnum.In; |
| | | bale = "1";//裹包 |
| | | } |
| | | else |
| | | { |
| | | type = TaskTypeEnum.Move; |
| | | } |
| | | if (!string.IsNullOrEmpty( models.Qty)) |
| | | { |
| | | nqty =Convert.ToDecimal(models.Qty); |
| | | } |
| | | if (!string.IsNullOrEmpty(models.CompleteQty)) |
| | | { |
| | | ncomqty = Convert.ToDecimal(models.CompleteQty); |
| | | } |
| | | //新增任务 |
| | | var taskAdd = new WcsTask() |
| | | { |
| | | TaskNo = models.TaskNo, |
| | | TaskType = TaskTypeEnum.Out, |
| | | TaskType = (TaskTypeEnum?)type, |
| | | Status = TaskStatusEnum.Wait, |
| | | //IsSuccess =TaskSuccessEnum.Success, |
| | | Levels = 999, |
| | | Origin = "WMS", |
| | | StartRoadway= models.StartRoadway, |
| | | StartLocate = models.StartLocate, |
| | | EndLocate = models.EndLocate, |
| | | EndRoadway= models.EndRoadway, |
| | | PalletNo = models.PalletNo, |
| | | IsBale = bale, |
| | | |
| | | //LotNo =models.LotNo, |
| | | //SkuNo=models.SkuNo, |
| | | //SkuName=models.SkuName, |
| | | //Qty=models.Qty |
| | | |
| | | LotNo = models.LotNo, |
| | | SkuName = models.SkuName, |
| | | Qty = nqty, |
| | | CompleteQty = ncomqty |
| | | }; |
| | | _db.Insertable(taskAdd).ExecuteCommand(); |
| | | |
| | |
| | | return new ResponseModel() { StatusCode = -1, Msg = ex.Message }; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// WCS接收WMS下发的出入库单任务 |
| | | /// </summary> |
| | | /// <param name="models"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | [AllowAnonymous] |
| | | public ResponseModel AddOrderTask(List<ResponseOrderTaskModel> models) |
| | | { |
| | | ResponseModel result = new ResponseModel(); |
| | | try |
| | | { |
| | | foreach (var item in models) |
| | | { |
| | | string str = JsonConvert.SerializeObject(models); |
| | | Log.Information("接收WMS推送的箱码信息:" + str); |
| | | // 验证任务是否已存在 |
| | | //var taskInfo = _db.Queryable<WcsOderTask>().First(w => w.OrderNo == item.OrderNo && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo); |
| | | //if (taskInfo == null) |
| | | //{ |
| | | //var taskid = _db.Queryable<WcsOderTask>().OrderByDescending(w=>w.CreateTime).First(); |
| | | //int newid = (int)taskid.Id + 1; |
| | | var orderAdd = new WcsOderTask() |
| | | { |
| | | |
| | | OrderNo = item.OrderNo, |
| | | TaskNo = "", |
| | | LotNo = item.LotNo, |
| | | SkuNo = item.SkuNo, |
| | | SkuName = item.SkuName, |
| | | BoxType = item.BoxType, |
| | | Qty = item.Qty, |
| | | TaskType = (TaskTypeEnum)item.TaskType, |
| | | CreateTime = DateTime.Now, |
| | | Status = TaskStatusEnum.Wait, |
| | | }; |
| | | _db.Insertable(orderAdd).ExecuteCommand(); |
| | | //} |
| | | } |
| | | return new ResponseModel() { StatusCode = 0, Msg = "插入成功" }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new ResponseModel() { StatusCode = -1, Msg = ex.Message }; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// WCS接受赋码系统推送的箱码信息 |
| | | /// </summary> |
| | | /// <param name="models">箱码信息</param> |
| | | /// <returns>反馈信息</returns> |
| | | [HttpPost] |
| | | [AllowAnonymous] |
| | | public ResponseFuMaModel AddHttpBoxInfo(FumaBoxInfoInput models) |
| | | { |
| | | |
| | | try |
| | | { |
| | | string str = JsonConvert.SerializeObject(models); |
| | | Log.Information("接收赋码推送的箱码信息:"+str); |
| | | if (models.Origin != "赋码") |
| | | { |
| | | throw new Exception("来源未识别"); |
| | | } |
| | | var num = _db.Queryable<WcsBoxInfo>().Where(m=>m.BoxNo == models.BoxNo && m.IsDelete == false).ToList(); |
| | | var type = "add"; |
| | | if (num.Count>0) |
| | | { |
| | | //WCS存在箱码信息,更新箱码信息(需判断箱码是否已组盘入库) |
| | | var num2 = num.Count(m => m.Status != "0" || !string.IsNullOrWhiteSpace(m.PalletNo)); |
| | | if (num2 > 0) |
| | | { |
| | | throw new Exception("该箱已入盘入库,不可更新信息"); |
| | | } |
| | | type = "edit"; |
| | | } |
| | | |
| | | if (models.DelistList.Count == 0) |
| | | { |
| | | throw new Exception("盒码集合不能为空"); |
| | | } |
| | | |
| | | var listBox = new List<WcsBoxInfo>(); |
| | | foreach (var item in models.DelistList) |
| | | { |
| | | var level = "3"; |
| | | if (string.IsNullOrWhiteSpace(item.BoxNo2)) |
| | | { |
| | | level = "2"; |
| | | } |
| | | if (item.DelistList2.Count == 0) |
| | | { |
| | | throw new Exception("支码集合不能为空"); |
| | | } |
| | | //二级码 |
| | | foreach (var item2 in item.DelistList2) |
| | | { |
| | | if (string.IsNullOrWhiteSpace(models.ProductionTime) || string.IsNullOrWhiteSpace(models.ExpirationTime)) |
| | | { |
| | | throw new Exception("生产日期或失效日期不能为空"); |
| | | } |
| | | DateTime proTime; |
| | | DateTime expTime; |
| | | var isValid = DateTime.TryParse(models.ProductionTime, out proTime); |
| | | var isValid2 = DateTime.TryParse(models.ExpirationTime, out expTime); |
| | | if (!isValid || !isValid2) |
| | | { |
| | | throw new Exception("生产日期或失效日期格式错误"); |
| | | }; |
| | | DateTime? stortime = null; |
| | | if (!string.IsNullOrWhiteSpace(models.StoreTime)) |
| | | { |
| | | stortime = DateTime.Parse(models.StoreTime); |
| | | } |
| | | |
| | | var boxAdd = new WcsBoxInfo() |
| | | { |
| | | BoxNo = models.BoxNo, |
| | | //OrderNo = models.OrderNo, |
| | | SkuNo = models.SkuNo, |
| | | SkuName = models.SkuName, |
| | | Standard = models.Standard, |
| | | LotNo = models.LotNo, |
| | | LineNo = models.LineNo, // 产线号或产线名称 |
| | | Qty = item2.Qty, |
| | | FullQty = models.FullQty, |
| | | //SupplierLot = models.SupplierLot, |
| | | InsPectMark = models.InsPectMark, |
| | | BitBoxMark = models.BitBoxMark, |
| | | //InspectStatus = models.InspectStatus, |
| | | ProductionTime = proTime, |
| | | ExpirationTime = expTime, |
| | | StoreTime = stortime, |
| | | EndLotFlag = string.IsNullOrWhiteSpace(models.EndBatchMark) ? "0" : models.EndBatchMark, |
| | | |
| | | BoxNo2 = item.BoxNo2, |
| | | BoxNo3 = item2.BoxNo3, |
| | | QtyCount = item2.QtyCount, |
| | | QtyOrd = item2.QtyOrd, |
| | | |
| | | Status = "0", |
| | | Level = level, |
| | | |
| | | IsDelete = false |
| | | }; |
| | | listBox.Add(boxAdd); |
| | | } |
| | | |
| | | } |
| | | _db.Insertable(listBox).ExecuteCommand(); |
| | | if (type == "edit") |
| | | { |
| | | //gen |
| | | _db.Deleteable(num).ExecuteCommand(); |
| | | return new ResponseFuMaModel() { Success = "0", Message = "更新成功" }; |
| | | } |
| | | return new ResponseFuMaModel() { Success = "0", Message = "插入成功" }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new ResponseFuMaModel() { Success = "-1", Message = ex.Message }; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// WCS接受赋码系统推送的箱码移除 |
| | | /// </summary> |
| | | /// <param name="models">箱码信息</param> |
| | | /// <returns>反馈信息</returns> |
| | | [HttpPost] |
| | | [AllowAnonymous] |
| | | public ResponseFuMaModel DelgatesHttpBoxInfo(FumaBoxInfoInput models) |
| | | { |
| | | |
| | | try |
| | | { |
| | | string str = JsonConvert.SerializeObject(models); |
| | | Log.Information("接收赋码推送的箱码移除:" + str); |
| | | var num = _db.Queryable<WcsBoxInfo>().Where(m => m.BoxNo == models.BoxNo && m.IsDelete == false).ToList(); |
| | | if (num.Count > 0) |
| | | { |
| | | //WCS存在箱码信息,更新箱码信息(需判断箱码是否已组盘入库) |
| | | var num2 = num.Count(m => m.Status != "0" || !string.IsNullOrWhiteSpace(m.PalletNo)); |
| | | if (num2 > 0) |
| | | { |
| | | throw new Exception("该箱已盘入库,不可更新信息"); |
| | | } |
| | | } |
| | | if (num.Count == 0) |
| | | { |
| | | throw new Exception("未找到该箱码,箱码移除失败!"); |
| | | } |
| | | |
| | | _db.Deleteable(num).ExecuteCommand(); |
| | | return new ResponseFuMaModel() { Success = "0", Message = "移除箱码成功" }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new ResponseFuMaModel() { Success = "-1", Message = ex.Message }; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// WCS接受赋码系统推送的结批总数量 |
| | | /// </summary> |
| | | /// <param name="models">结批数量信息</param> |
| | | /// <returns>反馈信息</returns> |
| | | [HttpPost] |
| | | [AllowAnonymous] |
| | | public ResponseFuMaModel HttpTotalNum(FumaJiepiModel models) |
| | | { |
| | | |
| | | try |
| | | { |
| | | string str = JsonConvert.SerializeObject(models); |
| | | Log.Information("接收赋码推送的完工结批总数量:" + str); |
| | | //查看赋码下发的任务信息是否正在分拣 |
| | | var num = _db.Queryable<WcsCheckTask>().Where(m => m.SkuNo == models.SkuNo &&m.LotNo == models.LotNo && m.Status == "1").ToList(); |
| | | if (num.Count < 1) |
| | | { |
| | | return new ResponseFuMaModel() { Success = "-1", Message = "该批次未进行分拣或已结批" }; |
| | | } |
| | | |
| | | int Fqty = int.Parse(models.FinishQty); |
| | | 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 (!(string.IsNullOrEmpty(checkNum.First().BoxNo2))||!(string.IsNullOrEmpty(checkNum.First().BoxNo3)))//有支码 |
| | | { |
| | | 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.BitBoxMark != "1" && m.SkuNo == models.SkuNo && m.LotNo == models.LotNo &&(m.PalletNo != null || m.PalletNo != "") && m.OrderCode == item.OrderNo).ToList();//箱码表已码垛箱码信息 |
| | | if (checkNum2.Count>0) |
| | | { |
| | | jp = 1;//箱码表还有未组盘箱,需要组盘 |
| | | 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) |
| | | { |
| | | 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); |
| | | //判断当前分道是否有未组盘箱 |
| | | 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 = "接受完工结批数量成功" }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new ResponseFuMaModel() { Success = "-1", Message = ex.Message }; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// WCS接受WMS入库放货确认接口 |
| | | /// </summary> |
| | | /// <param name="models"></param> |
| | | /// <returns>反馈信息</returns> |
| | | [HttpPost] |
| | | [AllowAnonymous] |
| | | public IsBaleModel2 HttpInConfirm(PortModel models) |
| | | { |
| | | |
| | | try |
| | | { |
| | | 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 |
| | | 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") |
| | | { |
| | | //读取成功后写入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可放信号 |
| | | return new IsBaleModel2() { Success = 0, Message = "接受成功" }; |
| | | } |
| | | } |
| | | return new IsBaleModel2() { Success = -1, Message = "读取PLC点位信息失败" }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new IsBaleModel2() { Success = -1, Message = ex.Message }; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// WCS接受WMS入库放货请求接口 |
| | | /// </summary> |
| | | /// <param name="models"></param> |
| | | /// <returns>反馈信息</returns> |
| | | [HttpPost] |
| | | [AllowAnonymous] |
| | | public IsBaleModel2 HttpInRequest(PortRequestModel models) |
| | | { |
| | | try |
| | | { |
| | | 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; |
| | | } |
| | | |
| | | 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 == "任务号").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放货信号 |
| | | return new IsBaleModel2() { Success = 0, Message = "接受成功" }; |
| | | } |
| | | return new IsBaleModel2() { Success = -1, Message = "读取PLC点位信息失败" }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new IsBaleModel2() { Success = -1, Message = ex.Message }; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// WCS接受WMS小车放完成接口 |
| | | /// </summary> |
| | | /// <param name="models"></param> |
| | | /// <returns>反馈信息</returns> |
| | | [HttpPost] |
| | | [AllowAnonymous] |
| | | public IsBaleModel2 HttpInFinish(PortModel models) |
| | | { |
| | | |
| | | try |
| | | { |
| | | 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; |
| | | } |
| | | |
| | | 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 == "WCS").First(); |
| | | |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, listPlcDevice.DbNumber, modDevice.PlcPos, "160");//放完成 |
| | | if (ret.IsSucceed) |
| | | { |
| | | //回传WMS放货信号 |
| | | return new IsBaleModel2() { Success = 0, Message = "接受成功" }; |
| | | } |
| | | return new IsBaleModel2() { Success = -1, Message = "读取PLC点位信息失败" }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new IsBaleModel2() { Success = -1, Message = ex.Message }; |
| | | } |
| | | } |
| | | |
| | | } |