| | |
| | | using Microsoft.IdentityModel.Protocols; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | |
| | | public void GetPalletNo(Pallnetmsg pallnetmsg) |
| | | { |
| | | DataStockDetail pallet = new DataStockDetail(); |
| | | SysStorageLocat locat = new SysStorageLocat(); |
| | | try |
| | | { |
| | | var house = "W01";//叫桶位置,后续根据位置关联或定义,来判断叫桶位置所属车间 |
| | |
| | | switch (pallnetmsg.Type) |
| | | { |
| | | case "0"://叫净桶 |
| | | List<DataStockDetail> jtpallet = new List<DataStockDetail>(); |
| | | sql += $"and WareHouseNo = '{house}' and AreaNo like '%01' order by CreateTime desc"; |
| | | jtpallet = Db.Ado.SqlQuery<DataStockDetail>(sql).ToList(); |
| | | if (jtpallet.Count == 0) |
| | | sql += $"and WareHouseNo = '{house}' and AreaNo like '%01' and PalletStatus = '0' order by CreateTime desc"; |
| | | pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault(); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("暂无净桶可分配"); |
| | | } |
| | | //遍历库存净桶,返回MES验证 |
| | | foreach (var item in jtpallet) |
| | | { |
| | | string jsonReq = JsonConvert.SerializeObject(item.PalletNo); |
| | | var response = HttpHelper.DoPost(url, jsonReq, "回传MES净桶编号", "RCS").ToString(); |
| | | var obj = JsonConvert.DeserializeObject<ReMes>(response);//解析返回数据 |
| | | if (obj.Success == "0") |
| | | { |
| | | if (obj.Result != "0")//可用,生成小车拉净桶任务 |
| | | { |
| | | //查找是否有空余脏桶位 |
| | | sql = $"select LocatNo from SysStorageLocat where AreaNo like '%04' and WareHouseNo = '{house}' and Status = 0"; |
| | | locat = Db.Ado.SqlQuery<SysStorageLocat>(sql).FirstOrDefault(); |
| | | if (locat == null) |
| | | { |
| | | Db.Ado.BeginTran(); |
| | | //脏桶区无空余库位,则锁定此净桶库存,并重新遍历 |
| | | sql = $"UPDATE DataStockDetail Set Status = '5' Where locat ='{locat.LocatNo}'"; |
| | | Db.Ado.ExecuteCommand(sql); |
| | | Db.Ado.CommitTran(); |
| | | break; |
| | | } |
| | | //生成调度小车净桶去脏桶区任务 |
| | | var ztask = new TaskDetial |
| | | { |
| | | Startport = item.LocatNo, |
| | | Endport = locat.LocatNo, |
| | | Pallno = item.PalletNo, |
| | | Type = "3", |
| | | Crtype = "0", |
| | | Noticedetailno = int.Parse(noticeno), |
| | | }; |
| | | CreateLotTask(ztask); |
| | | continue; |
| | | } |
| | | //下发小车任务 |
| | | var task2 = new TaskDetial |
| | | { |
| | | Startport = item.LocatNo, |
| | | Endport = pallnetmsg.Location, |
| | | Pallno = item.PalletNo, |
| | | Type = pallnetmsg.Type, |
| | | Crtype = "1", |
| | | Noticedetailno = int.Parse(noticeno), |
| | | }; |
| | | CreateLotTask(task2); |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("回传MES净桶编号失败!"); |
| | | } |
| | | } |
| | | |
| | | break; |
| | | case "1"://叫料桶(混料) |
| | | //判断是否有批次号 |
| | |
| | | } |
| | | noticeno = ArriveMes.Id.ToString();*/ |
| | | //查找库存中是否有可用的此批次的混料桶 |
| | | sql= $"select PalletNo,LocatNo from DataStockDetail where LotNo = '{pallnetmsg.LotNo}'and AreaNo like '%02' " + |
| | | $"and WareHouseNo = '{house}' and status = '0' order by CompleteTime desc"; |
| | | sql= $@"select PalletNo,LocatNo from DataStockDetail where LotNo = '{pallnetmsg.LotNo}'and AreaNo like '%02' |
| | | and WareHouseNo = '{house}' and status = '0' and PalletStatus = '1' order by CompleteTime desc"; |
| | | pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault(); |
| | | if (pallet == null) |
| | | { |
| | |
| | | } |
| | | noticeno = bllSo.Id.ToString(); |
| | | //查找库存中是否有此批次的下料桶 |
| | | sql = $"select PalletNo,LocatNo from DataStockDetail where LotNo = '{pallnetmsg.LotNo}'and AreaNo like '%03' " + |
| | | $"and WareHouseNo = '{house}' and status = '0' order by CompleteTime desc"; |
| | | sql = $@"select PalletNo,LocatNo from DataStockDetail where LotNo = '{pallnetmsg.LotNo}'and AreaNo like '%03' |
| | | and WareHouseNo = '{house}' and status = '0' and PalletStatus = '2' order by CompleteTime desc"; |
| | | pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault(); |
| | | if (pallet == null) |
| | | { |
| | |
| | | |
| | | break; |
| | | case "3"://叫脏桶 |
| | | sql += $"and WareHouseNo = '{house}' and AreaNo like '%04' order by CreateTime desc"; |
| | | pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault(); |
| | | if (pallet == null) |
| | | sql += $"and WareHouseNo = '{house}' and AreaNo like '%04' and PalletStatus='3' order by CreateTime desc"; |
| | | List<DataStockDetail> palletList = Db.Ado.SqlQuery<DataStockDetail>(sql).ToList(); |
| | | if (palletList.Count <= 0) |
| | | { |
| | | throw new Exception("暂无脏桶可分配"); |
| | | } |
| | | //遍历库存脏桶,返回MES验证 |
| | | foreach (var item in palletList) |
| | | { |
| | | string jsonReq = JsonConvert.SerializeObject(item.PalletNo); |
| | | var response = HttpHelper.DoPost(url, jsonReq, "回传MES脏桶编号", "RCS").ToString(); |
| | | var obj = JsonConvert.DeserializeObject<ReMes>(response);//解析返回数据 |
| | | if (obj.Success == "0") |
| | | { |
| | | if (obj.Result != "1")//不可清洗,将脏桶冻结 |
| | | { |
| | | item.Status = "5";//异常冻结 |
| | | //修改该桶库存状态 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | continue; |
| | | } |
| | | //下发小车任务 |
| | | var task2 = new TaskDetial |
| | | { |
| | | Startport = item.LocatNo, |
| | | Endport = pallnetmsg.Location, |
| | | Pallno = item.PalletNo, |
| | | Type = pallnetmsg.Type, |
| | | Crtype = "1", |
| | | Noticedetailno = int.Parse(noticeno), |
| | | }; |
| | | CreateLotTask(task2); |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("回传MES净桶编号失败!"); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | //下发小车任务 |
| | |
| | | catch (Exception ex) |
| | | { |
| | | Db.Ado.RollbackTran(); |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// MES下发将净桶改为脏桶并拉到脏桶区 |
| | | /// </summary> |
| | | /// <param name="PalletNo"></param> |
| | | /// <returns></returns> |
| | | public void ChangePalletStatus(string PalletNo) |
| | | { |
| | | try |
| | | { |
| | | var detail = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == PalletNo && w.PalletStatus == "0"); |
| | | if (detail == null) |
| | | { |
| | | throw new Exception($"库存中不存在桶号为:{PalletNo}的库存!"); |
| | | } |
| | | //起始目标储位信息 |
| | | var statrtLocat = Db.Queryable<SysStorageLocat>().First(w => w.WareHouseNo == detail.WareHouseNo && w.AreaNo == detail.AreaNo && w.LocatNo == detail.LocatNo); |
| | | if (statrtLocat == null) |
| | | { |
| | | throw new Exception($"该桶所在的储位信息不存在!"); |
| | | } |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | |
| | | //查找是否有空余脏桶位 |
| | | var endLocat = Db.Queryable<SysStorageLocat>().First(w => w.WareHouseNo == detail.WareHouseNo && w.AreaNo.Contains("04") && w.Status == "0" && w.Flag=="0"); |
| | | if (endLocat == null) |
| | | { |
| | | detail.Status = "5";//异常锁定 |
| | | detail.PalletStatus = "3";//脏桶 |
| | | //修改库存状态 |
| | | Db.Updateable(detail).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | //生成调度小车净桶去脏桶区任务 |
| | | var ztask = new TaskDetial |
| | | { |
| | | Startport = detail.LocatNo, |
| | | Endport = endLocat.LocatNo, |
| | | Pallno = PalletNo, |
| | | Type = "3", |
| | | Crtype = "2", |
| | | Noticedetailno = 0, |
| | | }; |
| | | CreateLotTask(ztask); |
| | | |
| | | statrtLocat.Status = "3";//出库中 |
| | | //修改起始储位状态 |
| | | Db.Updateable(statrtLocat).ExecuteCommand(); |
| | | |
| | | detail.Status = "5";//异常锁定 |
| | | detail.PalletStatus = "3";//脏桶 |
| | | //修改库存状态 |
| | | Db.Updateable(detail).ExecuteCommand(); |
| | | } |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// MES下发清洗锁定脏桶 |
| | | /// </summary> |
| | | /// <param name="pallnetmsg"></param> |
| | | public void CleanPallet(Pallnetmsg pallnetmsg) |
| | | { |
| | | try |
| | | { |
| | | var detail = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == pallnetmsg.PalletNo && w.PalletStatus == "3"); |
| | | if (detail == null) |
| | | { |
| | | throw new Exception($"库存中不存在桶号为:{pallnetmsg.PalletNo}的库存!"); |
| | | } |
| | | //下发小车任务 |
| | | var task = new TaskDetial |
| | | { |
| | | Startport = detail.LocatNo, |
| | | Endport = pallnetmsg.Location, |
| | | Pallno = detail.PalletNo, |
| | | Type = "3", |
| | | Crtype = "1", |
| | | Noticedetailno = 0, |
| | | LotNo = "", |
| | | }; |
| | | CreateLotTask(task); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | |
| | | { |
| | | Startport = pallnetmsg.Location, |
| | | Endport = loction.LocatNo, |
| | | Pallno = pallnetmsg.Palletno, |
| | | Pallno = pallnetmsg.PalletNo, |
| | | Type = pallnetmsg.Type, |
| | | Crtype = "0", |
| | | Noticedetailno = int.Parse(noticeno), |
| | |
| | | { |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | var na = taskDetial.Crtype == "0"?"入库":"出库"; |
| | | var na = ""; |
| | | switch (taskDetial.Crtype) |
| | | { |
| | | case "0": |
| | | na = "入库"; |
| | | break; |
| | | case "1": |
| | | na = "出库"; |
| | | break; |
| | | case "2": |
| | | na = "移库"; |
| | | break; |
| | | } |
| | | var bz = ""; |
| | | switch (taskDetial.Type) |
| | | { |
| | |
| | | logTaskEntry.IsSuccess = 1; |
| | | logTaskEntry.BackDate = DateTime.Now; |
| | | logTaskEntry.Status = "1"; |
| | | if (taskDetial.Crtype == "0") |
| | | if (taskDetial.Crtype == "0" || taskDetial.Crtype == "2") |
| | | { |
| | | sql = $"UPDATE SysStorageLocat SET Status = '2' where LocatNo = '{taskDetial.Endport}'"; |
| | | if (taskDetial.Type == "2") |
| | |
| | | Db.RollbackTran(); |
| | | throw ex; |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |