using Microsoft.IdentityModel.Protocols; using Newtonsoft.Json; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using Utility.Tools; using WMS.Entity.BllAsnEntity; using WMS.Entity.Context; using WMS.Entity.DataEntity; using WMS.Entity.SysEntity; using WMS.IBLL.IBllTransServer; using static Model.InterFaceModel.RCSModel; namespace WMS.BLL.BllTransServer { public class RcsServer:IRcsServer { private static readonly SqlSugarScope Db = DataContext.Db; /// /// RCS叫桶(净桶和脏桶) /// /// 库区 /// 叫料类型 /// public void GetPalletNo(string warehouseno, string type, out string palletno, out string locatno) { var sql = "select LocatNo,palletno from SysStorageLocat where status = '1'"; SysStorageLocat pallet = new SysStorageLocat(); try { switch (type) { case "0"://叫净桶 sql += $"and WareHouseNo = 'A01' and WareHouseNo = '{warehouseno}' order by updatetime desc"; pallet = Db.Ado.SqlQuery(sql).FirstOrDefault(); if (pallet == null) { throw new Exception("暂无净桶可分配"); } break; case "3"://叫脏桶 sql += $"and WareHouseNo = 'A04' and WareHouseNo = '{warehouseno}' order by updatetime desc"; pallet = Db.Ado.SqlQuery(sql).FirstOrDefault(); if (pallet == null) { throw new Exception("暂无脏桶可分配"); } break; } palletno = pallet.PalletNo; locatno = pallet.LocatNo; } catch (Exception) { throw; } } /// /// RCS叫桶(混料桶和下料桶) /// /// 库区 /// 叫料类型 /// 叫料批次 /// public void GetPalletNo(string warehouseno, string type, string lotno, out string palletno, out string locatno) { var sql = ""; var pallet = ""; DataStockDetail SoMes = new DataStockDetail(); try { switch (type) { case "1"://叫料桶(混料) BllArrivalNoticeDetail ArriveMes = new BllArrivalNoticeDetail(); //判断该批次是否有对应入库单 sql += $"select * from BllArrivalNoticeDetail where LotNo = '{lotno}' order by CreateTime desc"; ArriveMes = Db.Ado.SqlQuery(sql).FirstOrDefault(); if (ArriveMes == null) { throw new Exception("该批次没有对应的入库单"); } //查找库存中是否有可用的此批次的混料桶 sql = $"select LocatNo,palletno from DataStockDetail " + $"left join SysStorageLocat b on a.LocatNo = b.LocatNo " + $"where a.LotNo = '{lotno}'and a.WareHouseNo = '{warehouseno}' and b.status = '1' " + $"order by CompleteTime desc"; SoMes = Db.Ado.SqlQuery(sql).FirstOrDefault(); if (pallet == null) { throw new Exception("暂无混料桶可分配"); } break; case "2"://叫料桶(下料) //查找库存中是否有此批次的下料桶 sql = $"select LocatNo,palletno from DataStockDetail" + $"left join SysStorageLocat b on a.LocatNo = b.LocatNo " + $"where a.LotNo = '{lotno}'and a.WareHouseNo = '{warehouseno}' and b.status = '1'" + $" order by CompleteTime desc"; SoMes = Db.Ado.SqlQuery(sql).FirstOrDefault(); if (pallet == null) { throw new Exception("暂无下料桶可分配"); } break; } palletno = SoMes.PalletNo; locatno = SoMes.LocatNo; } catch (Exception) { throw; } } /// /// 申请储位 /// /// /// public void ApplyLocatNo(string palletno, string type, out string locatno) { var sql = $"select LocatNo from SysStorageLocat where status = '0'"; SysStorageLocat loction = new SysStorageLocat(); try { switch (type) { case "0"://净桶申请储位 sql += $"and WareHouseNo = 'A01'"; loction = Db.Ado.SqlQuery(sql).OrderByDescending(a => a.CreateTime).FirstOrDefault(); if (loction == null) { throw new Exception("库内暂无空余净桶储位"); } break; case "1"://混料桶申请储位 sql += $"and WareHouseNo = 'A02'"; loction = Db.Ado.SqlQuery(sql).OrderByDescending(a => a.CreateTime).FirstOrDefault(); if (loction == null) { throw new Exception("库内暂无空余混料桶储位"); } break; case "2"://半成品桶申请储位 sql += $"and WareHouseNo = 'A03'"; loction = Db.Ado.SqlQuery(sql).OrderByDescending(a => a.CreateTime).FirstOrDefault(); if (loction == null) { throw new Exception("库内暂无空余半成品桶储位"); } break; case "3"://脏桶申请储位 sql += $"and WareHouseNo = 'A04'"; loction = Db.Ado.SqlQuery(sql).OrderByDescending(a => a.CreateTime).FirstOrDefault(); if (loction == null) { throw new Exception("库内暂无空余脏桶储位"); } break; } locatno = loction.PalletNo; } catch (Exception) { throw; } } /// /// RCS生成任务 /// /// /// /// 起始位置 /// 目的位置 /// /// RCS地址 /// public string genAgvSchedulingTask(AgvTask agv,string url, ref genAgvSchedulingTaskRep cbrep) { try { PositionCodePath pcd1 = new PositionCodePath() { positionCode = agv.startPos.ToString(), type = "00", }; PositionCodePath pcd2 = new PositionCodePath() { positionCode = agv.endPos.ToString(), type = "00", }; List lst = new List(); lst.Add(pcd1); lst.Add(pcd2); genAgvSchedulingTaskReq cbreq = new genAgvSchedulingTaskReq() { reqCode = agv.taskCode.ToString(), taskCode = agv.taskCode.ToString(), taskTyp = agv.taskType, positionCodePath = lst, podCode = "", agvCode = agv.agvCode, ctnrTyp = "1", //ctnrCode="2", }; if (agv.startPos == "50") { cbreq.ctnrTyp = "4"; } cbrep = genAgvSchedulingTask(cbreq,url); return cbrep.code; } catch (Exception ex) { throw ex; } } /// /// 生成任务单 /// /// /// private genAgvSchedulingTaskRep genAgvSchedulingTask(genAgvSchedulingTaskReq req,string url) { genAgvSchedulingTaskRep rep = new genAgvSchedulingTaskRep() { code = "-1", message = "生产任务单失败" }; if (req == null) { return rep; } try { string jsonReq = JsonConvert.SerializeObject(req); string jsonRep = HttpHelper.DoPost(url + "/genAgvSchedulingTask", jsonReq,"小车任务下发","RCS"); jsonRep = jsonRep.TrimStart('\"'); jsonRep = jsonRep.TrimEnd('\"'); jsonRep = jsonRep.Replace("\\", ""); rep = JsonConvert.DeserializeObject(jsonRep); return rep; } catch (Exception ex) { throw ex; } } /// /// 生成任务单到LogTask /// /// /// public void CreateLotTask(string startport,string endport,string type,string tasktype) { try { } catch (Exception) { throw; } } } }