| | |
| | | using System.Linq; |
| | | using System.Runtime.Intrinsics.X86; |
| | | using System.Security.Claims; |
| | | using System.Security.Policy; |
| | | using System.Text; |
| | | using Model.InterFaceModel; |
| | | using Model.ModelDto; |
| | | using Model.ModelDto.DataDto; |
| | | using Model.ModelDto.LogDto; |
| | | using Model.ModelDto.SysDto; |
| | | using Model.ModelVm.DataVm; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using Utility.Tools; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using WMS.Entity.BllSoEntity; |
| | | using WMS.Entity.Context; |
| | | using WMS.Entity.DataEntity; |
| | |
| | | |
| | | //库存总量 |
| | | List<MateDataStockDto> StockListDto = new List<MateDataStockDto>(); |
| | | DataStockDetail detail = new DataStockDetail(); |
| | | |
| | | foreach (var item in StockList) |
| | | { |
| | | |
| | | detail = Db.Queryable<DataStockDetail>().First(w => w.SkuNo == item.SkuNo && w.LotNo == item.LotNo && w.IsDel == "0"); |
| | | if (detail != null) |
| | | { |
| | | if (!string.IsNullOrEmpty(detail.ProductionTime.ToString())) |
| | | { |
| | | item.ProductionTime = (DateTime)detail.ProductionTime; |
| | | } |
| | | if (!string.IsNullOrEmpty(detail.ExpirationTime.ToString())) |
| | | { |
| | | item.ExpirationTime = (DateTime)detail.ExpirationTime; |
| | | } |
| | | item.InspectStatus = detail.InspectStatus; |
| | | } |
| | | |
| | | |
| | | |
| | | StockListDto.Add(item); |
| | | ////判断库存总量是否拥有物料 |
| | | //if (StockListDto.Count > 0) |
| | |
| | | categoryNo = categoryNo, //逻辑库区 |
| | | type = type |
| | | }); |
| | | foreach (var item in stockDetailsList) |
| | | { |
| | | if (!string.IsNullOrEmpty(item.LocatNo)) |
| | | { |
| | | if (item.WareHouseNo == "W01") |
| | | { |
| | | item.PLCLocatNo = GetDjAdress(item.LocatNo.Substring(1, 2), item.LocatNo.Substring(0, 2), item.LocatNo.Substring(6, 2)).ToString() + item.LocatNo.Substring(2, 2) + item.LocatNo.Substring(4, 2); |
| | | } |
| | | } |
| | | |
| | | } |
| | | return stockDetailsList; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | /// <summary> |
| | | /// 根据储位排获取跺机对应的地址排03010302 |
| | | /// </summary> |
| | | /// <param name="road">排02</param> |
| | | /// <param name="pai">排03</param> |
| | | /// <param name="dept">深度02</param> |
| | | /// <returns></returns> |
| | | public static int GetDjAdress(string road, string pai, string dept) |
| | | { |
| | | var roadNum = int.Parse(road); |
| | | var paiNum = int.Parse(pai); |
| | | var deptNum = int.Parse(dept); |
| | | |
| | | var paiVal = 0; |
| | | |
| | | // 判断排奇偶数 |
| | | if (paiNum % 2 == 0) |
| | | { |
| | | if (deptNum == 1) |
| | | { |
| | | paiVal = 3; |
| | | } |
| | | else |
| | | { |
| | | paiVal = 4; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (deptNum == 1) |
| | | { |
| | | paiVal = 2; |
| | | |
| | | } |
| | | else |
| | | { |
| | | paiVal = 1; |
| | | |
| | | } |
| | | } |
| | | |
| | | if (paiVal == 0) |
| | | { |
| | | throw new Exception("排转换失败"); |
| | | } |
| | | return paiVal; |
| | | |
| | | } |
| | | |
| | | #region 低库存预警 |
| | | |
| | |
| | | //startTime = startTime, |
| | | //endTime = endTime |
| | | }); |
| | | DataStock stock = new DataStock(); |
| | | stock = Db.Queryable<DataStock>().First(); |
| | | |
| | | //合并数据 |
| | | int a = 0; |
| | | decimal qty = 0; |
| | | foreach (var h in totalHListData) |
| | | { |
| | | if (a >= totalCListData.Count) |
| | |
| | | } |
| | | foreach (var c in totalCListData) |
| | | { |
| | | |
| | | //判断出库是否拥有相同批次 且物料相同 |
| | | if (h.LotNo == c.LotNo) |
| | | { |
| | | if (h.SkuNo == c.SkuNo && h.SkuName == c.SkuName) |
| | | { |
| | | stock = Db.Queryable<DataStock>().First(w=>w.SkuNo == h.SkuNo && w.SkuName == h.SkuName && w.LotNo == h.LotNo && w.IsDel == "0"); |
| | | if (stock != null) |
| | | { |
| | | qty = stock.Qty; |
| | | } |
| | | h.CQty = c.CQty; //出库数量 |
| | | h.CAllotQty = c.CAllotQty; //分配数量 |
| | | h.CFactQty = c.CFactQty; //下架数量 |
| | | h.CompleteQty = c.CompleteQty; //拣货数量 |
| | | //h.SONo = c.SONo; //出库单号 |
| | | h.Qty = qty; //当前库存 |
| | | |
| | | |
| | | a += 1; |
| | | |
| | |
| | | } |
| | | #endregion |
| | | |
| | | #region AGV小车任务完成 |
| | | #region AGV小车任务完成更新库存 |
| | | |
| | | /// <summary> |
| | | /// AGV入库完成 |
| | | /// </summary> |
| | | /// <param name="TaskCode">任务号</param> |
| | | /// <param name="wcsurl">下发WCS放货完成地址</param> |
| | | /// <returns></returns> |
| | | public void ArriveFinish(string TaskCode) |
| | | public void ArriveFinish(string TaskCode,string wcsurl) |
| | | { |
| | | try |
| | | { |
| | |
| | | palletNo.Status = "2"; //已完成 |
| | | Db.Updateable(palletNo).ExecuteCommand(); |
| | | |
| | | //修改库存明细 |
| | | stockDetail.Status = "0";//待分配 |
| | | stockDetail.LocatNo = ""; |
| | | stockDetail.AreaNo = ""; |
| | | stockDetail.RoadwayNo = ""; |
| | | stockDetail.WareHouseNo = ""; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | |
| | | if (stockDetail !=null) |
| | | { |
| | | //修改库存明细 |
| | | stockDetail.Status = "0";//待分配 |
| | | stockDetail.LocatNo = ""; |
| | | stockDetail.AreaNo = ""; |
| | | stockDetail.RoadwayNo = ""; |
| | | stockDetail.WareHouseNo = ""; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | //下发WCS申请入库 |
| | | #region 下发WCS放货完成 |
| | | var data = new |
| | | { |
| | | Port = palletNo.EndLocat |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(data); |
| | | string response = ""; |
| | | try |
| | | { |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | response = HttpHelper.DoPost(wcsurl, jsonData, "下发给WCS放货完成命令", "WCS"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | //////解析返回数据 |
| | | var res = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | if (res.StatusCode == -1) |
| | | { |
| | | throw new Exception("放货失败,WCS返回信息错误"); |
| | | } |
| | | } |
| | | |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | #endregion |
| | | palletNo.IsCancel = 0; |
| | | palletNo.IsSend = 0; |
| | | palletNo.IsFinish = 0; |
| | | Db.Updateable(palletNo).ExecuteCommand(); |
| | | |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | Db.RollbackTran(); |
| | | throw new Exception("AGV返回入库完成信号处理错误,错误信息:" + ex); |
| | | } |
| | | } |
| | |
| | | /// AGV出库完成 |
| | | /// </summary> |
| | | /// <param name="TaskCode">任务号</param> |
| | | /// <param name="url">反馈MES备料完成地址</param> |
| | | /// <returns></returns> |
| | | public void SoFinish(string TaskCode) |
| | | public void SoFinish(string TaskCode,string url) |
| | | { |
| | | try |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | //完成接口修改(未完成) |
| | | //try |
| | | //{ |
| | | // var palletNo = Db.Queryable<LogTask>().First(m => m.TaskNo == TaskCode && m.Status == "1");//获取正在执行的任务信息 |
| | | // if (palletNo == null) |
| | | // { |
| | | // throw new Exception("此任务已完成"); |
| | | // } |
| | | // var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取库位信息 |
| | | // var storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息 |
| | | // var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo).ToList(); |
| | | // if (stockDetail.Count == 0) |
| | | // { |
| | | // throw new Exception("托盘上物料库存明细信息不存在,请检查!"); |
| | | // } |
| | | // //开启事务 |
| | | // Db.BeginTran(); |
| | | // if (storageLocat != null) |
| | | // { |
| | | // if (storageLocat.AreaNo == "B12")//车间缓存位需要通知MES |
| | | // { |
| | | // var data = new List<RequertBeiliaoInfoModel>(); |
| | | // //更改库存明细 |
| | | // foreach (var item in stockDetail) |
| | | // { |
| | | // item.LocatNo = item.LocatNo;//储位更改 |
| | | // item.WareHouseNo = item.WareHouseNo;//所属仓库更改 |
| | | // item.RoadwayNo = item.RoadwayNo;//所属巷道更改 |
| | | // item.AreaNo = item.AreaNo;//所属区域更改 |
| | | |
| | | // Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | |
| | | // if (string.IsNullOrWhiteSpace(item.SONo)) |
| | | // { |
| | | // throw new Exception("当前托盘不是拼托出库托盘"); |
| | | // } |
| | | // var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList(); |
| | | // if (boxInfo.Count == 0) |
| | | // { |
| | | // throw new Exception("托盘上物料箱码信息不存在,请检查!"); |
| | | // } |
| | | // //var boxno = boxInfo.GroupBy(w => w.BoxNo).ToList(); |
| | | // var boxno = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).GroupBy(m => new |
| | | // { |
| | | // m.BoxNo |
| | | // }).Select(it => new DataBoxInfo() |
| | | // { |
| | | // BoxNo = it.BoxNo |
| | | // }).ToList(); |
| | | |
| | | // //记录托盘上信息给MES |
| | | // foreach (var item2 in boxno) |
| | | // { |
| | | // var a = item.ProductionTime.ToString(); |
| | | // data.Add(new RequertBeiliaoInfoModel() |
| | | // { |
| | | // no = item2.BoxNo, |
| | | // materiel_no = item.SkuNo, |
| | | // materiel_name = item.SkuName, |
| | | // qty = item.Qty, |
| | | // batch = item.LotNo, |
| | | // producttime = item.ProductionTime.ToString().Substring(0, 10), |
| | | // expiry = item.ExpirationTime.ToString().Substring(0, 10) |
| | | |
| | | // }); |
| | | // } |
| | | // //库存箱码明细删除 |
| | | // Db.Deleteable(boxInfo).ExecuteCommand(); |
| | | // //删除库存托盘信息 |
| | | // Db.Deleteable(item).ExecuteCommand(); |
| | | // //更改库存总表 |
| | | // var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo); |
| | | // stock.LockQty -= (decimal)item.Qty; |
| | | // stock.Qty -= (decimal)item.Qty; |
| | | // Db.Updateable(stock).ExecuteCommand(); |
| | | // //更改托盘状态 |
| | | // var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | // if (pallet != null) |
| | | // { |
| | | // pallet.Status = "0"; |
| | | // Db.Updateable(pallet).ExecuteCommand(); |
| | | // } |
| | | |
| | | // } |
| | | |
| | | // //获取令牌 |
| | | // //var token = new Token().GetMesToken(mesTokenUrl); |
| | | // var token = ""; |
| | | // Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | // { |
| | | // {"Authorization",token } |
| | | // }; |
| | | // var endlono = palletNo.EndLocat; |
| | | // //缓存库位转换 |
| | | // switch (palletNo.EndLocat.ToString().Substring(4, 1)) |
| | | // { |
| | | // case "1": |
| | | // endlono = "Y003_00" + palletNo.EndLocat.ToString().Substring(6, 1); |
| | | // break; |
| | | // case "2": |
| | | // endlono = "Y138_0" + palletNo.EndLocat.ToString().Substring(5, 2); |
| | | // break; |
| | | // case "3": |
| | | // endlono = "Y128_0" + palletNo.EndLocat.ToString().Substring(5, 2); |
| | | // break; |
| | | // default: |
| | | // break; |
| | | // } |
| | | // var mescode = Db.Queryable<BllExportNotice>().Where(w => w.SONo == stockDetail.First().SONo).First(); |
| | | // var mesData = new RequertBeiliaoModel() |
| | | // { |
| | | // morder_no = mescode.OrderCode, |
| | | // pallet = stockDetail.First().PalletNo, |
| | | // layer_no = endlono, |
| | | // items = data |
| | | // }; |
| | | // var jsonData = JsonConvert.SerializeObject(mesData); |
| | | // //调用接口 |
| | | // var response = HttpHelper.DoPost(url, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic); |
| | | |
| | | // var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | // if (obj.status != "success") |
| | | // { |
| | | // throw new Exception("备料同步MES失败:" + obj.message); |
| | | // } |
| | | |
| | | |
| | | // } |
| | | // //修改目的库位状态 |
| | | // storageLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | // Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | // //修改任务状态 |
| | | // palletNo.Status = "2"; //已完成 |
| | | // Db.Updateable(palletNo).ExecuteCommand(); |
| | | |
| | | // //修改库存明细 |
| | | // item.Status = "2";// 0:待分配 1:部分分配 2:已分配 3:盘点锁定: 4移库锁定 |
| | | // stockDetail.LocatNo = storageLocat.LocatNo; |
| | | // stockDetail.AreaNo = storageLocat.AreaNo; |
| | | // stockDetail.RoadwayNo = storageLocat.RoadwayNo; |
| | | // stockDetail.WareHouseNo = storageLocat.WareHouseNo; |
| | | // Db.Updateable(stockDetail).ExecuteCommand(); |
| | | // } |
| | | // Db.CommitTran(); |
| | | |
| | | //} |
| | | /// <summary> |
| | | /// AGV移库完成 |
| | | /// </summary> |
| | | /// <param name="TaskCode">任务号</param> |
| | | /// <param name="url">反馈MES备料完成地址</param> |
| | | /// <returns></returns> |
| | | public void MoveFinish(string TaskCode) |
| | | public void MoveFinish(string TaskCode,string url) |
| | | { |
| | | try |
| | | { |
| | |
| | | { |
| | | throw new Exception("此任务已完成"); |
| | | } |
| | | var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取库位信息 |
| | | var storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo); //获取库存信息 |
| | | var startLocat = new SysStorageLocat(); |
| | | |
| | | var endLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取目的库位信息 |
| | | if (endLocat == null) |
| | | { |
| | | throw new Exception("未找到相应的目的库位"); |
| | | } |
| | | var storageStart = new SysStorageLocat(); |
| | | |
| | | int isstock = 1; |
| | | var bindDetail = new BllPalletBind(); |
| | | var sysPanlno = new SysPallets(); |
| | | |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo).ToList(); //获取库存信息 |
| | | if (stockDetail.Count == 0) |
| | | { |
| | | //未找到库存后需要判断是否是空托盘移库 |
| | | isstock = 0; |
| | | bindDetail = Db.Queryable<BllPalletBind>().OrderByDescending(w=>w.Id).First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat);//获取组托盘信息 |
| | | if (bindDetail == null) |
| | | { |
| | | bindDetail = Db.Queryable<BllPalletBind>().OrderByDescending(w => w.Id).First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat);//获取组托盘信息 |
| | | if (bindDetail == null) |
| | | { |
| | | throw new Exception("未找到空托盘组托信息"); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取起始库位信息 |
| | | if (storageStart == null) |
| | | { |
| | | isstock = 2; //库口到缓存位任务 |
| | | } |
| | | } |
| | | //var soAllot = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.PalletNo == palletNo.PalletNo);//获取分配信息 |
| | | |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | //修改起始库位状态 |
| | | storageLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | //修改目的库位状态 |
| | | storageLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | endLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(endLocat).ExecuteCommand(); |
| | | |
| | | //修改任务状态 |
| | | palletNo.Status = "2"; //已完成 |
| | | Db.Updateable(palletNo).ExecuteCommand(); |
| | | |
| | | //修改库存明细 |
| | | stockDetail.Status = "2";// 0:待分配 1:部分分配 2:已分配 3:盘点锁定: 4移库锁定 |
| | | stockDetail.LocatNo = storageLocat.LocatNo; |
| | | stockDetail.AreaNo = storageLocat.AreaNo; |
| | | stockDetail.RoadwayNo = storageLocat.RoadwayNo; |
| | | stockDetail.WareHouseNo = storageLocat.WareHouseNo; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | if (isstock == 1) |
| | | { |
| | | startLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); |
| | | //修改起始库位状态 |
| | | startLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(startLocat).ExecuteCommand(); |
| | | |
| | | |
| | | #region |
| | | var data = new List<RequertBeiliaoInfoModel>(); |
| | | |
| | | //更改库存明细 |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.LocatNo = endLocat.LocatNo;//储位更改 |
| | | item.WareHouseNo = endLocat.WareHouseNo;//所属仓库更改 |
| | | item.RoadwayNo = endLocat.RoadwayNo;//所属巷道更改 |
| | | item.AreaNo = endLocat.AreaNo;//所属区域更改 |
| | | |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | if (endLocat != null && endLocat.AreaNo == "B12") //是否是3楼缓存区 是:删除库存 |
| | | { |
| | | if (string.IsNullOrWhiteSpace(item.SONo)) |
| | | { |
| | | throw new Exception("当前托盘不是拼托出库托盘"); |
| | | } |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList(); |
| | | if (boxInfo.Count == 0) |
| | | { |
| | | throw new Exception("托盘上物料箱码信息不存在,请检查!"); |
| | | } |
| | | //var boxno = boxInfo.GroupBy(w => w.BoxNo).ToList(); |
| | | var boxno = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).GroupBy(m => new |
| | | { |
| | | m.BoxNo, |
| | | m.ProductionTime, |
| | | m.ExpirationTime, |
| | | }).Select(it => new DataBoxInfo() |
| | | { |
| | | BoxNo = it.BoxNo, |
| | | ProductionTime = it.ProductionTime, |
| | | ExpirationTime = it.ExpirationTime, |
| | | }).ToList(); |
| | | |
| | | //记录托盘上信息给MES |
| | | foreach (var item2 in boxno) |
| | | { |
| | | //var a = item.ProductionTime.ToString(); |
| | | data.Add(new RequertBeiliaoInfoModel() |
| | | { |
| | | no = item2.BoxNo, |
| | | materiel_no = item.SkuNo, |
| | | materiel_name = item.SkuName, |
| | | qty = item.Qty, |
| | | batch = item.LotNo, |
| | | producttime = item2.ProductionTime.ToString().Substring(0, 10), |
| | | expiry = item2.ExpirationTime.ToString().Substring(0, 10) |
| | | |
| | | }); |
| | | } |
| | | //库存箱码明细删除 |
| | | Db.Deleteable(boxInfo).ExecuteCommand(); |
| | | //删除库存托盘信息 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | //更改库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo); |
| | | stock.LockQty -= (decimal)item.Qty; |
| | | stock.Qty -= (decimal)item.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | //更改托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo.PalletNo); |
| | | if (pallet != null) |
| | | { |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | if (endLocat != null && endLocat.AreaNo == "B12") |
| | | { |
| | | //获取令牌 |
| | | //var token = new Token().GetMesToken(mesTokenUrl); |
| | | var token = ""; |
| | | Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | { |
| | | {"Authorization",token } |
| | | }; |
| | | var endlono = endLocat.LocatNo; |
| | | //缓存库位转换 |
| | | switch (endLocat.LocatNo.ToString().Substring(4, 1)) |
| | | { |
| | | case "1": |
| | | endlono = "Y003_0" + endLocat.LocatNo.ToString().Substring(5, 2); |
| | | break; |
| | | |
| | | } |
| | | var mescode = Db.Queryable<BllExportNotice>().Where(w => w.SONo == stockDetail.First().SONo).First(); |
| | | var mesData = new RequertBeiliaoModel() |
| | | { |
| | | morder_no = mescode.OrderCode, |
| | | pallet = stockDetail.First().PalletNo, |
| | | layer_no = endlono, |
| | | items = data |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(mesData); |
| | | //调用接口 |
| | | var response = HttpHelper.DoPost(url, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic); |
| | | |
| | | var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | if (obj.status != "success") |
| | | { |
| | | throw new Exception("备料同步MES失败:" + obj.message); |
| | | } |
| | | |
| | | } |
| | | #endregion |
| | | } |
| | | else if (isstock == 0) |
| | | { |
| | | //修改组托信息 |
| | | if (bindDetail.WareHouseNo == "W01") //1、空托盘垛到空托盘收集器; |
| | | { |
| | | bindDetail.WareHouseNo = "W02"; |
| | | bindDetail.LocatNo = endLocat.LocatNo; |
| | | bindDetail.RoadwayNo = ""; |
| | | //修改起始库位状态 |
| | | startLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(startLocat).ExecuteCommand(); |
| | | } |
| | | else//2、拣货叫空托盘,小车完成一次,扣减一个空托盘垛上数量 |
| | | { |
| | | bindDetail.Qty = bindDetail.Qty - 1; |
| | | if (bindDetail.Qty == 0)//数量为0后更改组托状态和托盘使用状态 |
| | | { |
| | | bindDetail.Status = "2"; |
| | | bindDetail.IsDel = "1"; |
| | | //修改起始库位状态 |
| | | startLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(startLocat).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | bindDetail.LocatNo = startLocat.LocatNo;//?????拣货位托盘如何处理,拣货位是否需要更改状态,是否需要增加库存; |
| | | } |
| | | } |
| | | Db.Updateable(bindDetail).ExecuteCommand(); |
| | | |
| | | } |
| | | else //库口移库到缓存位 |
| | | { |
| | | |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.LocatNo = endLocat.LocatNo;//储位更改 |
| | | item.WareHouseNo = endLocat.WareHouseNo;//所属仓库更改 |
| | | item.RoadwayNo = endLocat.RoadwayNo;//所属巷道更改 |
| | | item.AreaNo = endLocat.AreaNo;//所属区域更改 |
| | | |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | } |
| | | palletNo.IsCancel = 0; |
| | | palletNo.IsSend = 0; |
| | | palletNo.IsFinish = 0; |
| | | Db.Updateable(palletNo).ExecuteCommand(); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | Db.RollbackTran(); |
| | | throw new Exception("AGV返回移库完成信号处理错误,错误信息:"+ex); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 数字孪生系统反馈信息 |
| | | |
| | | /// <summary> |
| | | /// 反馈数字孪生系统库存信息 |
| | | /// </summary> |
| | | /// <param name=""></param> |
| | | /// <returns></returns> |
| | | public List<ReLocateDataModel> GetLocateList() |
| | | { |
| | | try |
| | | { |
| | | |
| | | //库存信息 |
| | | var stockDetailsList = Db.Queryable<DataStockDetail>().ToList(); |
| | | var sql = "select LocatNo,PalletNo,SkuName,Standard,LotNo,InspectStatus,Qty,ExpirationTime as Warranty from DataStockDetail "; |
| | | |
| | | List<ReLocateDataModel> list = Db.Ado.SqlQuery<ReLocateDataModel>(sql); |
| | | |
| | | //if (stockDetailsList.Count == 0) |
| | | //{ |
| | | // return list; |
| | | //} |
| | | //foreach (var item in stockDetailsList) |
| | | //{ |
| | | // list.Add(item); |
| | | |
| | | //} |
| | | //for (int i = 0; i < stockDetailsList.Count; i++) |
| | | //{ |
| | | |
| | | // list.Add(stockDetailsList); |
| | | // list[i].LocatNo = stockDetailsList[i].LocatNo; //库位 |
| | | // list[i].PalletNo = stockDetailsList[i].PalletNo; //托盘号 |
| | | // list[i].SkuName = stockDetailsList[i].SkuName; //物料名称 |
| | | // list[i].Stadard = stockDetailsList[i].Standard; //规格 |
| | | // list[i].LotNo = stockDetailsList[i].LotNo; //批次 |
| | | // list[i].InspectStatus = stockDetailsList[i].InspectStatus; //质量状态 |
| | | // list[i].Qty = stockDetailsList[i].Qty.ToString(); //库存数量 |
| | | // list[i].Warranty = stockDetailsList[i].ExpirationTime.ToString(); //有效期 ??过期时间,是否要更改 |
| | | //} |
| | | return list; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | throw new Exception("返回库存信息有误,错误信息:" + ex); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 反馈数字孪生系统操作信息 |
| | | /// </summary> |
| | | /// <param name=""></param> |
| | | /// <returns></returns> |
| | | public List<ReLogDataModel> GetLogDataList() |
| | | { |
| | | try |
| | | { |
| | | |
| | | //库存信息 |
| | | var stockDetailsList = Db.Queryable<DataStockDetail>().ToList(); |
| | | var sql = "select LocatNo,PalletNo,SkuName,Standard,LotNo,InspectStatus,Qty,ExpirationTime as Warranty from DataStockDetail "; |
| | | |
| | | |
| | | var item2 = Expressionable.Create<LogOperationSO>() |
| | | .And(it => it.IsDel == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | var list2 = Db.Queryable<LogOperationSO>().Where(item2) |
| | | .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString()) |
| | | .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id) |
| | | .Select((it, dic, users) => new OperationDto() |
| | | { |
| | | Id = it.Id, |
| | | ParentNo = it.ParentNo, |
| | | MenuNo = it.MenuNo, |
| | | MenuName = it.MenuName, |
| | | FkNo = it.FkNo, |
| | | Type = dic.DictName, |
| | | Msg = it.Msg, |
| | | CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | CreateUserName = users.RealName, |
| | | }); |
| | | |
| | | List<ReLogDataModel> list = Db.Ado.SqlQuery<ReLogDataModel>(sql); |
| | | |
| | | return list; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | throw new Exception("返回库存信息有误,错误信息:" + ex); |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 查询操作日志 |
| | | /// </summary> |
| | | /// <param name="menuName">菜单名称</param> |
| | | /// <param name="type">类型</param> |
| | | /// <returns></returns> |
| | | public List<OperationDto> ReLogData() |
| | | { |
| | | try |
| | | { |
| | | var total = 0; |
| | | #region asn |
| | | |
| | | var item = Expressionable.Create<LogOperationASN>() |
| | | .And(it => it.IsDel == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | var list = Db.Queryable<LogOperationASN>().Where(item) |
| | | .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString()) |
| | | .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id) |
| | | .Select((it, dic, users) => new OperationDto() |
| | | { |
| | | Id = it.Id, |
| | | ParentNo = it.ParentNo, |
| | | MenuNo = it.MenuNo, |
| | | MenuName = it.MenuName, |
| | | FkNo = it.FkNo, |
| | | Type = dic.DictName, |
| | | Msg = it.Msg, |
| | | CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | CreateUserName = users.RealName, |
| | | }); |
| | | |
| | | #endregion |
| | | |
| | | #region so |
| | | |
| | | var item2 = Expressionable.Create<LogOperationSO>() |
| | | .And(it => it.IsDel == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | var list2 = Db.Queryable<LogOperationSO>().Where(item2) |
| | | .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString()) |
| | | .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id) |
| | | .Select((it, dic, users) => new OperationDto() |
| | | { |
| | | Id = it.Id, |
| | | ParentNo = it.ParentNo, |
| | | MenuNo = it.MenuNo, |
| | | MenuName = it.MenuName, |
| | | FkNo = it.FkNo, |
| | | Type = dic.DictName, |
| | | Msg = it.Msg, |
| | | CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | CreateUserName = users.RealName, |
| | | }); |
| | | |
| | | #endregion |
| | | |
| | | #region cr |
| | | |
| | | var item3 = Expressionable.Create<LogOperationCR>() |
| | | .And(it => it.IsDel == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | var list3 = Db.Queryable<LogOperationCR>().Where(item3) |
| | | .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString()) |
| | | .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id) |
| | | .Select((it, dic, users) => new OperationDto() |
| | | { |
| | | Id = it.Id, |
| | | ParentNo = it.ParentNo, |
| | | MenuNo = it.MenuNo, |
| | | MenuName = it.MenuName, |
| | | FkNo = it.FkNo, |
| | | Type = dic.DictName, |
| | | Msg = it.Msg, |
| | | CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | CreateUserName = users.RealName, |
| | | }); |
| | | |
| | | #endregion |
| | | |
| | | #region sys |
| | | |
| | | var item4 = Expressionable.Create<LogOperationSys>() |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | var list4 = Db.Queryable<LogOperationSys>().Where(item4) |
| | | .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString()) |
| | | .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id) |
| | | .Select((it, dic, users) => new OperationDto() |
| | | { |
| | | Id = it.Id, |
| | | ParentNo = it.ParentNo, |
| | | MenuNo = it.MenuNo, |
| | | MenuName = it.MenuName, |
| | | FkNo = it.FkNo, |
| | | Type = dic.DictName, |
| | | Msg = it.Msg, |
| | | CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | CreateUserName = users.RealName, |
| | | }); |
| | | |
| | | #endregion |
| | | |
| | | var data = Db.UnionAll(list, list2, list3, list4).OrderByDescending(it => it.CreateTime); |
| | | return data.OrderByDescending(m => m.CreateTime).ToList(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | } |