| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Security.Policy; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Model.InterFaceModel; |
| | | using Model.ModelDto.BllCheckDto; |
| | | using Model.ModelDto.PdaDto; |
| | | using Model.ModelDto.SysDto; |
| | | using Model.ModelVm; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using Utility.Tools; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.BLL.SysServer; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using WMS.Entity.BllCheckEntity; |
| | |
| | | } |
| | | #endregion |
| | | |
| | | #region 人工转运 |
| | | |
| | | //人工转运 |
| | | public void ArtificialTransport(string palletNo, string locatNo, string endLocatNo, string mesTokenUrl, string mesUrl,int userId) |
| | | { |
| | | if (string.IsNullOrEmpty(palletNo)) |
| | | { |
| | | throw new Exception("请扫描托盘条码!"); |
| | | } |
| | | if (string.IsNullOrEmpty(locatNo)) |
| | | { |
| | | throw new Exception("请选择起始地址!"); |
| | | } |
| | | if (string.IsNullOrEmpty(endLocatNo)) |
| | | { |
| | | throw new Exception("请输入目标地址!"); |
| | | } |
| | | |
| | | try |
| | | { |
| | | #region 判断信息 |
| | | |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.PalletNo == palletNo).ToList(); |
| | | if (stockDetail.Count == 0) |
| | | { |
| | | throw new Exception("托盘上物料库存明细信息不存在,请检查!"); |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(stockDetail.First().LocatNo)) |
| | | { |
| | | throw new Exception("托盘储位信息不存在,请检查!"); |
| | | } |
| | | if (stockDetail.First().WareHouseNo != "W02") |
| | | { |
| | | throw new Exception("该托盘未在平库内,请检查!"); |
| | | } |
| | | //起始储位信息 |
| | | var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == locatNo); |
| | | if (storageLocat == null) |
| | | { |
| | | throw new Exception("起始地址储位信息不存在,请检查!"); |
| | | } |
| | | //目标储位信息 |
| | | var EndLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == endLocatNo); |
| | | if (EndLocat == null) |
| | | { |
| | | throw new Exception("目标地址储位信息不存在,请检查!"); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | |
| | | //需先判断目标地址前方是否有空储位 |
| | | |
| | | storageLocat.Status = "0"; //更改起始储位 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | EndLocat.Status = "1"; //更改目标储位 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | 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("当前托盘不是拼托出库托盘"); |
| | | } |
| | | //记录托盘上信息给MES |
| | | |
| | | data.Add(new RequertBeiliaoInfoModel() |
| | | { |
| | | materiel_no = item.SkuNo, |
| | | materiel_name = item.SkuName, |
| | | qty = item.Qty, |
| | | batch = item.LotNo, |
| | | producttime = item.ProductionTime, |
| | | expiry = item.ExpirationTime |
| | | |
| | | }); |
| | | //库存箱码明细删除 |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList(); |
| | | 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(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | if (EndLocat != null && EndLocat.AreaNo == "B12") |
| | | { |
| | | //获取令牌 |
| | | var token = new Token().GetMesToken(mesTokenUrl); |
| | | Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | { |
| | | {"Authorization",token } |
| | | }; |
| | | var mesData = new RequertBeiliaoModel() |
| | | { |
| | | morder_no = stockDetail.First().SONo, |
| | | pallet = stockDetail.First().PalletNo, |
| | | layer_no = EndLocat.LocatNo, |
| | | items = data |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(mesData); |
| | | //调用接口 |
| | | var response = HttpHelper.DoPost(mesUrl, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic); |
| | | |
| | | var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | if (obj.status != "0") |
| | | { |
| | | throw new Exception("备料同步MES失败:" + obj.message); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV转运", palletNo, "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId); |
| | | |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 箱码查询 |
| | | /// <summary> |
| | | /// 箱码查询 |