| | |
| | | using System.Diagnostics; |
| | | using System.Drawing.Drawing2D; |
| | | using Model.ModelDto.LogDto; |
| | | using AutoMapper.Internal; |
| | | |
| | | namespace WMS.BLL.BllSoServer |
| | | { |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public SoResInfo ErpAddExportNotice(SoInfo model) |
| | | public SoResInfo ErpAddExportNotice(SendSoVm model) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(model.SoType)) |
| | | if (string.IsNullOrEmpty(model.orderType)) |
| | | { |
| | | throw new Exception("单据类型不可为空!"); |
| | | } |
| | | if (string.IsNullOrEmpty(model.OrderCode)) |
| | | if (string.IsNullOrEmpty(model.orderNo)) |
| | | { |
| | | throw new Exception("系统单号不可为空!"); |
| | | throw new Exception("出库单号不可为空!"); |
| | | } |
| | | if (model.SoDetails.Count <= 0) |
| | | if (model.orderDetailList.Count <= 0) |
| | | { |
| | | throw new Exception("出库单明细不可为空!"); |
| | | } |
| | | //返回信息 |
| | | SoResInfo result = new SoResInfo(); |
| | | |
| | | var skuNos = model.SoDetails.Select(a => a.SkuNo).Distinct().ToList(); |
| | | var skuNos = model.orderDetailList.Select(a => a.skuNo).Distinct().ToList(); |
| | | //根据物料号获取物料信息 |
| | | var skuList = Db.Queryable<SysMaterials>().Where(a => skuNos.Contains(a.SkuNo) && a.IsDel == "0").ToList(); |
| | | //获取库存明细 |
| | |
| | | var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList(); |
| | | |
| | | string CustomerName = string.Empty; |
| | | if (!string.IsNullOrEmpty(model.Customer)) |
| | | if (!string.IsNullOrEmpty(model.customerNo)) |
| | | { |
| | | //客户信息 |
| | | var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer); |
| | | var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.customerNo); |
| | | if (customer == null) |
| | | { |
| | | throw new Exception("客户信息不存在!"); |
| | |
| | | CustomerName = customer.CustomerName; |
| | | } |
| | | //承运商信息 |
| | | var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo); |
| | | int? logisticsId = null; |
| | | if (logistics != null) |
| | | { |
| | | logisticsId = logistics.Id; |
| | | } |
| | | //var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo); |
| | | //int? logisticsId = null; |
| | | //if (logistics != null) |
| | | //{ |
| | | // logisticsId = logistics.Id; |
| | | //} |
| | | var billNo = ""; |
| | | var bl = true; |
| | | do |
| | |
| | | { |
| | | var list = new List<BllExportNoticeDetail>(); |
| | | //添加出库单 |
| | | foreach (var d in model.SoDetails) |
| | | foreach (var d in model.orderDetailList) |
| | | { |
| | | if (d.Qty < 1) |
| | | if (d.skuQty < 1) |
| | | { |
| | | throw new Exception("出库数量必须大于0"); |
| | | } |
| | | var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo); |
| | | var sku = skuList.FirstOrDefault(a => a.SkuNo == d.skuNo); |
| | | if (sku == null) |
| | | { |
| | | throw new Exception($"物料信息中未查询到出库物料信息:{d.SkuNo}"); |
| | | throw new Exception($"物料信息中未查询到出库物料信息:{d.skuNo}"); |
| | | } |
| | | //0:成品出库、1:领料出库、3:物料取样出库、4:不合格品出库、6:代储出库、7:其他出库、 ///2:抽检出库、5:中间品出库、8:寄存出库 |
| | | if (model.SoType == "0" || model.SoType == "3" || model.SoType == "4" || model.SoType == "7") |
| | | if (model.orderType == "0" || model.orderType == "3" || model.orderType == "4" || model.orderType == "7") |
| | | { |
| | | if (string.IsNullOrWhiteSpace(d.LotNo)) |
| | | if (string.IsNullOrWhiteSpace(d.lotNo)) |
| | | { |
| | | throw new Exception("批次不可为空!"); |
| | | } |
| | |
| | | //库存明细 |
| | | List<DataStockDetail> stockDetails; |
| | | //指定批次 |
| | | if (!string.IsNullOrWhiteSpace(d.LotNo)) |
| | | if (!string.IsNullOrWhiteSpace(d.lotNo)) |
| | | { |
| | | stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList(); |
| | | stockDetails = stockDetailList.Where(s => s.SkuNo == d.skuNo && s.LotNo == d.lotNo).ToList(); |
| | | if (stockDetails.Count < 1) |
| | | { |
| | | throw new Exception($"库存中未查询到出库物料信息:{d.SkuNo}"); |
| | | throw new Exception($"库存中未查询到出库物料信息:{d.skuNo}"); |
| | | } |
| | | //判断数量 |
| | | var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty); |
| | | if (d.Qty > qty) |
| | | if (d.skuQty > qty) |
| | | { |
| | | throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足"); |
| | | throw new Exception($"总库存中出库物料信息:{d.skuNo}、{d.lotNo} 库存数量不足"); |
| | | } |
| | | //库存信息 |
| | | var stockInfo = stockList.First(w => w.SkuNo == d.SkuNo && w.LotNo == d.LotNo); |
| | | var stockInfo = stockList.First(w => w.SkuNo == d.skuNo && w.LotNo == d.lotNo); |
| | | if (stockInfo == null) |
| | | { |
| | | throw new Exception($"总库存中未查询到出库物料信息:{d.SkuNo}"); |
| | | throw new Exception($"总库存中未查询到出库物料信息:{d.skuNo}"); |
| | | } |
| | | //判断总库存数量 |
| | | if (d.Qty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty) |
| | | if (d.skuQty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty) |
| | | { |
| | | throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足"); |
| | | throw new Exception($"总库存中出库物料信息:{d.skuNo}、{d.lotNo} 库存数量不足"); |
| | | } |
| | | //添加出库单明细 |
| | | var noticeDetail = new BllExportNoticeDetail() |
| | |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | LotNo = d.LotNo, |
| | | LotNo = d.lotNo, |
| | | LotText = stockInfo.LotText, |
| | | Qty = d.Qty, |
| | | Qty = d.skuQty, |
| | | AllotQty = 0, |
| | | FactQty = 0, |
| | | CompleteQty = 0, |
| | | PackagNo = sku.PackagNo, |
| | | Price = sku.Price, |
| | | Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty, |
| | | Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.skuQty, |
| | | IsBale = "", |
| | | IsBelt = "", |
| | | SupplierLot = stockInfo.SupplierLot, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1", |
| | | IsMixBox = d.IsMixBox, |
| | | IsIssueLotNo = string.IsNullOrWhiteSpace(d.lotNo) ? "0" : "1", |
| | | IsMixBox = "0", |
| | | |
| | | OrderDetailCode = d.OrderDetailCode, |
| | | OrderDetailCode = d.lineNo, |
| | | |
| | | CreateUser = 0, |
| | | }; |
| | | list.Add(noticeDetail); |
| | | //更新库存锁定数量 |
| | | stockInfo.LockQty += d.Qty; |
| | | stockInfo.LockQty += d.skuQty; |
| | | var i = Db.Updateable(stockInfo).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); |
| | | |
| | | SoDetailInfo soDetail = new SoDetailInfo(); |
| | | soDetail.OrderDetailCode = d.OrderDetailCode; |
| | | soDetail.LockQty = d.Qty; |
| | | soDetail.LotNo = d.LotNo; |
| | | soDetail.OrderDetailCode = d.lineNo; |
| | | soDetail.LockQty = d.skuQty; |
| | | soDetail.LotNo = d.lotNo; |
| | | |
| | | soDetailList.Add(soDetail); |
| | | } |
| | |
| | | Dictionary<int, decimal> dic = new Dictionary<int, decimal>(); |
| | | decimal q1 = 0; |
| | | //首先查询当前这种物料批次号为空的 |
| | | stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); |
| | | stockDetails = stockDetailList.Where(s => s.SkuNo == d.skuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); |
| | | if (stockDetails.Count > 0) |
| | | { |
| | | q1 = (decimal)stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty); |
| | | //库存信息 |
| | | var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(w.LotNo)); |
| | | var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.skuNo && string.IsNullOrWhiteSpace(w.LotNo)); |
| | | if (stockInfo != null) |
| | | { |
| | | var q2 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty; |
| | |
| | | { |
| | | q1 = q2; |
| | | } |
| | | if (d.Qty > q1) |
| | | if (d.skuQty > q1) |
| | | { |
| | | dic.Add(stockInfo.Id, q1); |
| | | } |
| | | else |
| | | { |
| | | dic.Add(stockInfo.Id, d.Qty); |
| | | dic.Add(stockInfo.Id, d.skuQty); |
| | | } |
| | | } |
| | | } |
| | | //如果批次号为空的数量不够,根据批次先进先出原则查找其它批次的 |
| | | if (d.Qty > q1) |
| | | if (d.skuQty > q1) |
| | | { |
| | | stockDetails = stockDetailList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList(); |
| | | stockDetails = stockDetailList.Where(m => m.SkuNo == d.skuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList(); |
| | | foreach (var demo in stockDetails) |
| | | { |
| | | if (q1 >= d.Qty) |
| | | if (q1 >= d.skuQty) |
| | | { |
| | | break; |
| | | } |
| | | var q2 = demo.Qty - demo.FrozenQty - demo.LockQty; |
| | | //库存信息 |
| | | var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && w.LotNo == demo.LotNo); |
| | | var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.skuNo && w.LotNo == demo.LotNo); |
| | | if (stockInfo == null) |
| | | { |
| | | continue; |
| | |
| | | { |
| | | q2 = q3; |
| | | } |
| | | if (q2 > d.Qty - q1) |
| | | if (q2 > d.skuQty - q1) |
| | | { |
| | | if (!dic.ContainsKey(stockInfo.Id)) |
| | | { |
| | | dic.Add(stockInfo.Id, d.Qty - q1); |
| | | dic.Add(stockInfo.Id, d.skuQty - q1); |
| | | } |
| | | else |
| | | { |
| | | //更新值 |
| | | dic[stockInfo.Id] += d.Qty - q1; |
| | | dic[stockInfo.Id] += d.skuQty - q1; |
| | | } |
| | | q1 += d.Qty - q1; |
| | | q1 += d.skuQty - q1; |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | if (d.Qty > q1) |
| | | if (d.skuQty > q1) |
| | | { |
| | | throw new Exception($"总库存中出库物料信息:{d.SkuNo} 库存数量不足"); |
| | | throw new Exception($"总库存中出库物料信息:{d.skuNo} 库存数量不足"); |
| | | } |
| | | foreach (var s in dic) |
| | | { |
| | |
| | | var item = new BllExportNoticeDetail() |
| | | { |
| | | SONo = billNo, |
| | | OrderDetailCode = d.OrderDetailCode, |
| | | OrderDetailCode = d.lineNo, |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | |
| | | CompleteQty = 0, |
| | | PackagNo = sku.PackagNo, |
| | | Price = sku.Price, |
| | | Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty, |
| | | Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.skuQty, |
| | | IsBale = "", |
| | | IsBelt = "", |
| | | SupplierLot = st.SupplierLot, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1", |
| | | IsMixBox = d.IsMixBox, |
| | | IsIssueLotNo = string.IsNullOrWhiteSpace(d.lotNo) ? "0" : "1", |
| | | IsMixBox = "0", |
| | | |
| | | CreateUser = 0, |
| | | }; |
| | |
| | | var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); |
| | | |
| | | SoDetailInfo soDetail = new SoDetailInfo(); |
| | | soDetail.OrderDetailCode = d.OrderDetailCode; |
| | | soDetail.OrderDetailCode = d.lineNo; |
| | | soDetail.LockQty = s.Value; |
| | | soDetail.LotNo = st.LotNo; |
| | | |
| | |
| | | var notice = new BllExportNotice() |
| | | { |
| | | SONo = billNo, |
| | | OrderCode=model.OrderCode, |
| | | Type = model.SoType, |
| | | OrderCode=model.orderNo, |
| | | Type = model.orderType, |
| | | Status = "0", |
| | | Origin = "WMS", |
| | | CustomerNo = model.Customer, |
| | | CustomerNo = model.customerNo, |
| | | CustomerName = CustomerName, |
| | | LogisticsId = logisticsId, |
| | | LogisticsId = null,//logisticsId, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsDespatch = "0", |
| | |
| | | skuList = skuList.Where(m => m.SkuNo == "100088").ToList(); |
| | | } |
| | | skuStrList = skuList.Select(m => m.SkuNo).ToList(); |
| | | var areaStr = new List<string>() { "B06", "B07", "B09" }; |
| | | var stockRst = new StockServer(); |
| | | var stockDetailRst = new StockDetailServer(); |
| | | Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() |
| | | .And(it => it.WareHouseNo == house) |
| | | .And(it => it.WareHouseNo == house || string.IsNullOrWhiteSpace(it.LocatNo) || (it.WareHouseNo == "W04" && !areaStr.Contains(it.AreaNo))) |
| | | .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => inspectStatus.Contains(it.InspectStatus)) |
| | | .And(m => skuStrList.Contains(m.SkuNo)) |
| | | .AndIF(type == "6", m => m.OwnerNo == ownerNo)//代储出库需要关联货主 |
| | |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsDespatch = "0", |
| | | |
| | | WareHouseNo = model.WareHouseNo, |
| | | CreateUser = userId, |
| | | }; |
| | | |
| | |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | ////解析返回数据 |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | if (wcsModel.StatusCode == 0) |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); |
| | | if (wcsModel.code == 200) |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | } |
| | | if (wcsModel.StatusCode == -1) |
| | | else |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); |
| | | throw new Exception(wcsModel.Msg); |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message); |
| | | throw new Exception(wcsModel.message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | try |
| | | { |
| | | List<LogTask> logTaskList = new List<LogTask>();//此次出库任务集合,为应对同托盘不同物料出库 |
| | | var i = 0; |
| | | var outLocatelist1 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == "B02" && m.Flag == "0").ToList(); |
| | | var outLocatelist2 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == "B05" && m.Flag == "0").ToList(); |
| | | //循环分配的信息生成出库任务 |
| | | foreach (var item in list) |
| | | { |
| | | var outModeLocate = ""; |
| | | if (outMode == "17") |
| | | { |
| | | if (i < outLocatelist1.Count) |
| | | { |
| | | outModeLocate = outLocatelist1[i].LocatNo; |
| | | } |
| | | else |
| | | { |
| | | var j = i % outLocatelist1.Count; |
| | | |
| | | outModeLocate = outLocatelist1[j].LocatNo; |
| | | } |
| | | } |
| | | else if (outMode == "18") |
| | | { |
| | | if (i < outLocatelist1.Count) |
| | | { |
| | | outModeLocate = outLocatelist2[i].LocatNo; |
| | | } |
| | | else |
| | | { |
| | | var j = i % outLocatelist1.Count; |
| | | |
| | | outModeLocate = outLocatelist2[j].LocatNo; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("出库口工位异常"); |
| | | } |
| | | |
| | | var taskNoStr = ""; |
| | | |
| | | // 储位号 |
| | |
| | | { |
| | | //如果不在仓库内,当前分配信息直接更新出库完成 |
| | | item.Status = "2";//状态 |
| | | item.OutMode = outMode;//出库口 |
| | | item.OutMode = outModeLocate;//出库口 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo); |
| | | if (noticeDetail != null) //更新出库单据的下发数量 |
| | |
| | | } |
| | | flagList.Add(0); |
| | | continue; |
| | | |
| | | } |
| | | |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//当前出库的储位信息 |
| | |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locate.LocatNo,//起始位置 |
| | | EndLocat = outMode,//目标位置 |
| | | EndLocat = outModeLocate,//目标位置 |
| | | PalletNo = item.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = "从" + locate.LocatNo + "到" + outMode + "的出库任务", //关键信息 |
| | | Msg = "从" + locate.LocatNo + "到" + outModeLocate + "的出库任务", //关键信息 |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | logTaskList.Add(exTask); |
| | | |
| | | outDto1.Add(new OutCommandDto() |
| | | { |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库)0入 1出 2移 |
| | | |
| | | PalletNo = item.PalletNo,//托盘号 |
| | | StartLocate = locate.LocatNo, // 起始位置 |
| | | StartRoadway = locate.RoadwayNo,//其实巷道 |
| | | EndLocate = outMode, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库)0入 1出 2移 |
| | | OutMode = outMode, //出库口 |
| | | Order = 1, |
| | | |
| | | //UnstackingMode = "unstackingMode2",//拣货方式 0机器拆托出 1 人工拣货出 |
| | | //CompleteQty = outCount2, //拆的件数 |
| | | //BoxexQty = outCount, //总件数 |
| | | EndLocate = outModeLocate, // 目标位置 |
| | | |
| | | Order = 999, |
| | | Type = PLCTypeEnum.AGV |
| | | |
| | | }); |
| | | taskNoStr = exTask.TaskNo; |
| | | |
| | |
| | | } |
| | | locate.Status = "3"; //要出库的储位改变状态 正在出库 |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == outModeLocate && m.IsDel == "0");//当前出库的目标储位信息 |
| | | locate2.Status = "4"; |
| | | Db.Updateable(locate2).ExecuteCommand(); |
| | | |
| | | item.TaskNo = taskNoStr; // 出库分配信息中更新任务号 |
| | | item.Status = "1"; // 出库分配信息状态改为正在执行 |
| | | //item.UnstackingMode = unstackingMode2;//拆垛方式 |
| | | item.OutMode = outMode;//出库口 |
| | | item.OutMode = outModeLocate;//出库口 |
| | | //item.LoadingAddre = unstackingMode2 == "0" ? loadingAddre : "";//装车口 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | flagList.Add(0); |
| | | i++; |
| | | } |
| | | else if (locate.Status == "3") //出库中 |
| | | { |
| | |
| | | |
| | | #endregion |
| | | var com = new Common(); |
| | | |
| | | var allot = new AllotLocation(); |
| | | |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0"); |
| | | if (notice == null) |
| | | { |
| | |
| | | try |
| | | { |
| | | List<LogTask> logTaskList = new List<LogTask>();//此次出库任务集合,为应对同托盘不同物料出库 |
| | | |
| | | |
| | | //循环分配的信息生成出库任务 |
| | | foreach (var item in list) |
| | | { |
| | | var taskNoStr = ""; |
| | | string toLocation = string.Empty;//目标位置 |
| | | |
| | | // 储位号 |
| | | var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo; |
| | |
| | | //判断托盘是否在库内 |
| | | if (string.IsNullOrWhiteSpace(locateNo)) //库外 |
| | | { |
| | | if (notice.Type == "0") |
| | | { |
| | | flagList.Add(5); |
| | | continue; |
| | | } |
| | | //if (notice.Type == "0") |
| | | //{ |
| | | // flagList.Add(5); |
| | | // continue; |
| | | //} |
| | | //判断托盘是否在入库中 |
| | | var imBl = com.GetImTask(item.PalletNo); |
| | | if (imBl != null) |
| | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | if (locate.Status == "1") //有物品 |
| | | { |
| | |
| | | Type = "2",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = "从" + locate.LocatNo + "到" + toLocation + "的出库任务", //关键信息 |
| | | Msg = "从" + locate.LocatNo + "到" + moveAddress + "的移库任务", //关键信息 |
| | | }; |
| | | Db.Insertable(ykTask).ExecuteCommand(); |
| | | logTaskList.Add(ykTask); |
| | |
| | | PalletNo = item.PalletNo,//托盘号 |
| | | StartLocate = locate.LocatNo, // 起始位置 |
| | | StartRoadway = locate.RoadwayNo,//其实巷道 |
| | | EndLocate = toLocation,//outMode, // 目标位置 |
| | | EndLocate = moveAddress,//outMode, // 目标位置 |
| | | TaskNo = ykTaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库)0入 1出 2移 |
| | | TaskType = "2",// 任务类型 (出库)0入 1出 2移 |
| | | Order = Math.Abs(row2 - rows), |
| | | Type = PLCTypeEnum.ShuttleCar |
| | | |
| | | }); |
| | | var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == s); |
| | |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locate.LocatNo,//起始位置 |
| | | EndLocat = toLocation,//outMode,//目标位置 |
| | | EndLocat = outMode,//outMode,//目标位置 |
| | | PalletNo = item.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = "从" + locate.LocatNo + "到" + toLocation + "的出库任务", //关键信息 |
| | | Msg = "从" + locate.LocatNo + "到" + outMode + "的出库任务", //关键信息 |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | logTaskList.Add(exTask); |
| | | |
| | | var endroad = allot.RoadwayToStationNum(locate.RoadwayNo, outMode); |
| | | outDto1.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = item.PalletNo,//托盘号 |
| | | StartLocate = locate.LocatNo, // 起始位置 |
| | | StartRoadway = locate.RoadwayNo,//其实巷道 |
| | | EndLocate = toLocation,//outMode, // 目标位置 |
| | | StartRoadway = locate.RoadwayNo,//起始巷道 |
| | | EndLocate = outMode,//, // 目标位置 |
| | | EndRoadway = endroad, |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库)0入 1出 2移 |
| | | OutMode = toLocation, //出库口 |
| | | OutMode = outMode, //出库口 |
| | | Order = Math.Abs(row2 - row1), |
| | | Type = PLCTypeEnum.ShuttleCar |
| | | |
| | | }); |
| | | taskNoStr = exTask.TaskNo; |
| | |
| | | |
| | | try |
| | | { |
| | | //var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | //response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); |
| | | //var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | //////解析返回数据 |
| | | //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | //if (wcsModel.StatusCode == 0) |
| | | //{ |
| | | // //更改任务的发送返回时间// |
| | | // new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | // str += "下发成功"; |
| | | //} |
| | | //if (wcsModel.StatusCode == -1) |
| | | //{ |
| | | // new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); |
| | | // throw new Exception(wcsModel.Msg); |
| | | //} |
| | | ////解析返回数据 |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); |
| | | if (wcsModel.code == 200) |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | } |
| | | else |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message); |
| | | throw new Exception(wcsModel.message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | return bl; |
| | | } |
| | | |
| | | |
| | | private class addreClass |
| | | { |
| | | public string slotCode { get; set; } |
| | |
| | | public string AisleOne { get; set; } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// wcs返回的成功信号(出库成功) |
| | | /// </summary> |
| | | /// <param name="taskNo"></param> |
| | | /// <param name="userId"></param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void ExportSuccess(string taskNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | //当前任务信息 |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | } |
| | | if (task.Status == "2") |
| | | { |
| | | throw new Exception("当前任务已完成"); |
| | | } |
| | | Db.BeginTran(); |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); |
| | | var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault(); |
| | | //当前任务中的储位信息 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo); |
| | | try |
| | | { |
| | | task.Status = "2";//任务状态 |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.FinishDate = DateTime.Now;//完成时间 |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | if (locate != null) |
| | | { |
| | | locate.Status = "0"; // 更改当前任务中的储位状态(改为0空储位) |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | } |
| | | foreach (var item in stockDetail) |
| | | { |
| | | if (item.SkuNo == "100099")//判断是否是空托出库 |
| | | { |
| | | //判断总库存是否为0,如果为0删除 否则减去数量 |
| | | var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099"); |
| | | |
| | | if (stock != null) |
| | | { |
| | | if (item.LockQty != null) |
| | | { |
| | | stock.Qty -= item.LockQty.Value; |
| | | stock.LockQty -= item.LockQty.Value; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | } |
| | | |
| | | if (stock.Qty == 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | } |
| | | } |
| | | |
| | | //托盘状态改为未使用 |
| | | var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo); |
| | | if (sCode != null) |
| | | { |
| | | sCode.Status = "0"; |
| | | Db.Updateable(sCode).ExecuteCommand(); |
| | | } |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | |
| | | continue; |
| | | } |
| | | item.LocatNo = "";//储位更改(改为空) |
| | | item.WareHouseNo = "";//所属仓库更改(改为空) |
| | | item.RoadwayNo = "";//所属巷道更改(改为空) |
| | | item.AreaNo = "";//所属区域更改(改为空) |
| | | |
| | | } |
| | | //出库流水(更改状态) |
| | | var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList(); |
| | | var PalletType = "0"; //0:物料托 1:空托盘托 |
| | | |
| | | foreach (var item in allot) |
| | | { |
| | | if (item.SkuNo == "100099") |
| | | { |
| | | item.Status = "5"; |
| | | item.CompleteQty += stockDetail[0].Qty; |
| | | PalletType = "1"; |
| | | } |
| | | else |
| | | { |
| | | item.Status = "2"; |
| | | } |
| | | |
| | | } |
| | | |
| | | var endLocateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && (m.AreaNo == "B02" || m.AreaNo == "B05")).Select(m=>m.LocatNo).ToList(); |
| | | //判断是否是原辅料出库任务 货架储位=》平库储位 |
| | | if ( endLocateList.Contains(task.EndLocat) && PalletType == "0") |
| | | { |
| | | //修改目标地址状态 |
| | | var endLocat = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == task.EndLocat); |
| | | endLocat.Status = "1"; |
| | | Db.Updateable(endLocat).ExecuteCommand(); |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.LocatNo = endLocat.LocatNo;//储位更改(改为空) |
| | | item.WareHouseNo = endLocat.WareHouseNo;//所属仓库更改(改为空) |
| | | item.RoadwayNo = endLocat.RoadwayNo;//所属巷道更改(改为空) |
| | | item.AreaNo = endLocat.AreaNo;//所属区域更改(改为空) |
| | | } |
| | | } |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | |
| | | if (userId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); |
| | | } |
| | | |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception("完成反馈失败:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// wcs返回的成功信号(移库成功) |
| | | /// </summary> |
| | | /// <param name="taskNo">任务号</param> |
| | | /// <param name="userId">操作人</param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void RelocationSuccess(string taskNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | //当前任务信息 |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | } |
| | | if (task.Status == "2") |
| | | { |
| | | throw new Exception("当前任务已完成"); |
| | | } |
| | | Db.BeginTran(); |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); |
| | | //当前任务中的目标储位信息 |
| | | //当前任务中的原储位 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat); |
| | | if (locate == null) |
| | | { |
| | | throw new Exception($"WMS系统中没有该{task.StartLocat}储位对应的信息"); |
| | | } |
| | | var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); |
| | | if (locate2 == null) |
| | | { |
| | | throw new Exception($"WMS系统中没有该{task.EndLocat}储位对应的信息"); |
| | | } |
| | | //平库中储位集合 |
| | | var pingKuLocate = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == "W04" && m.IsDel == "0").ToList(); |
| | | var pingKuList = pingKuLocate.Select(m => m.LocatNo).ToList(); |
| | | try |
| | | { |
| | | |
| | | //task.Status = "5";//任务状态 |
| | | ////判断起始目标位置都是平库 |
| | | //if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat)) |
| | | //{ |
| | | task.Status = "2"; |
| | | //} |
| | | |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.FinishDate = DateTime.Now;//完成时间 |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | |
| | | #region 修改储位状态 |
| | | |
| | | if (!pingKuList.Contains(task.StartLocat)) |
| | | { |
| | | //原储位改为空储位 0 |
| | | locate.Status = "0"; |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | //目标储位改为有货物 1 |
| | | locate2.Status = "1"; |
| | | Db.Updateable(locate2).ExecuteCommand(); |
| | | //判断起始目标位置都是平库 |
| | | if ( pingKuList.Contains(task.EndLocat)) |
| | | { |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.WareHouseNo = locate2.WareHouseNo; |
| | | item.AreaNo = locate2.AreaNo; |
| | | item.RoadwayNo = locate2.RoadwayNo; |
| | | item.LocatNo = locate2.LocatNo; |
| | | } |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception("完成反馈失败:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// AGV任务取货完成反馈 |
| | | /// </summary> |
| | | /// <param name="taskNo"></param> |
| | | public void AGVQuHuoSuccess(string taskNo) |
| | | { |
| | | try |
| | | { |
| | | Db.BeginTran(); |
| | | var task = Db.Queryable<LogTask>().First(m=>m.IsDel =="0" && m.TaskNo == taskNo); |
| | | if (task == null) |
| | | { |
| | | throw new Exception("没有查询到任务信息"); |
| | | } |
| | | if (task.Status!="1") |
| | | { |
| | | throw new Exception("任务状态不是正在执行,请核实"); |
| | | } |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat && m.IsDel == "0"); |
| | | if (locate == null) |
| | | { |
| | | throw new Exception("没有查询到起始储位信息"); |
| | | } |
| | | if (locate.WareHouseNo!="W04") |
| | | { |
| | | throw new Exception("起始储位不是平库储位,请核实"); |
| | | } |
| | | locate.Status = "0"; //更改储位状态为空储位 |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | //查询出托盘信息 更改库存储位信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == task.PalletNo).ToList(); |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.WareHouseNo = ""; |
| | | item.AreaNo = ""; |
| | | item.RoadwayNo = ""; |
| | | item.LocatNo = ""; |
| | | } |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #endregion |
| | |
| | | OutMode = toLocation, //出库口 |
| | | Order = 1, |
| | | |
| | | UnstackingMode=unstackingMode2,//拣货方式 0机器拆托出 1 人工拣货出 |
| | | CompleteQty= outCount2, //拆的件数 |
| | | BoxexQty = outCount, //总件数 |
| | | }); |
| | | taskNoStr = exTask.TaskNo; |
| | | } |
| | |
| | | OutMode = toLocation, //目标地址 |
| | | Order = 1, |
| | | |
| | | UnstackingMode = "1",//拣货方式 0机器拆托出 1 人工拣货出 |
| | | CompleteQty = 0, //拆的件数 |
| | | BoxexQty = 0, //总件数 |
| | | |
| | | }); |
| | | #endregion |
| | | |
| | |
| | | OutMode = toLocation, //目标地址 |
| | | Order = 1, |
| | | |
| | | UnstackingMode = unstackingMode2,//拣货方式 0机器拆托出 1 人工拣货出 |
| | | CompleteQty = outCount2, //拆的件数 |
| | | BoxexQty = outCount, //总件数 |
| | | }); |
| | | taskNoStr = exTask1.TaskNo; |
| | | #endregion |
| | |
| | | } |
| | | } |
| | | |
| | | //wcs返回的成功信号(出库成功) |
| | | public void ExportSuccess(string taskNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | //当前任务信息 |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | } |
| | | if (task.Status == "2") |
| | | { |
| | | throw new Exception("当前任务已完成"); |
| | | } |
| | | Db.BeginTran(); |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); |
| | | var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault(); |
| | | //当前任务中的储位信息 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo); |
| | | try |
| | | { |
| | | task.Status = "2";//任务状态 |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.FinishDate = DateTime.Now;//完成时间 |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | if (locate != null) |
| | | { |
| | | locate.Status = "0"; // 更改当前任务中的储位状态(改为0空储位) |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | } |
| | | foreach (var item in stockDetail) |
| | | { |
| | | if (item.SkuNo == "100099")//判断是否是空托出库 |
| | | { |
| | | //判断总库存是否为0,如果为0删除 否则减去数量 |
| | | var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099"); |
| | | |
| | | if (stock != null) |
| | | { |
| | | if (item.LockQty != null) |
| | | { |
| | | stock.Qty -= item.LockQty.Value; |
| | | stock.LockQty -= item.LockQty.Value; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | } |
| | | |
| | | if (stock.Qty == 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | } |
| | | } |
| | | |
| | | //托盘状态改为未使用 |
| | | var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo); |
| | | if (sCode != null) |
| | | { |
| | | sCode.Status = "0"; |
| | | Db.Updateable(sCode).ExecuteCommand(); |
| | | } |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | |
| | | #region 拣货信息 |
| | | |
| | | //var pickQty = 0;//拣货的数量 |
| | | //var comList = new List<BllCompleteDetail>(); |
| | | // //添加拣货明细 |
| | | // var completeDetail = new BllCompleteDetail() |
| | | // { |
| | | // SONo = "", |
| | | // SODetailNo = 0, |
| | | // ExportAllotId = 0, |
| | | // StockId = exportAllot.StockId, |
| | | // BoxNo = item.BoxNo, |
| | | // BoxNo2 = item.BoxNo2, |
| | | // BoxNo3 = item.BoxNo3, |
| | | |
| | | // LotNo = exportAllot.LotNo, |
| | | // LotText = exportAllot.LotText, |
| | | // SupplierLot = exportAllot.SupplierLot, |
| | | // SkuNo = exportAllot.SkuNo, |
| | | // SkuName = exportAllot.SkuName, |
| | | // Standard = exportAllot.Standard, |
| | | // PalletNo = palletNo, |
| | | // CompleteQty = item.Qty, |
| | | |
| | | // CreateUser = userId |
| | | // }; |
| | | // comList.Add(completeDetail); |
| | | |
| | | // //删除库存箱码明细 |
| | | // Db.Deleteable(item).ExecuteCommand(); |
| | | // pickQty += item.Qty; |
| | | |
| | | // exportAllot.Status = "5"; //待回库 : 已完成 |
| | | // exportAllot.CompleteQty += item.Qty; //拣货数量 |
| | | // exportAllot.UpdateUser = userId; //修改人 |
| | | // exportAllot.UpdateTime = serverTime; //修改时间 |
| | | |
| | | // Db.Updateable(exportAllot).ExecuteCommand(); |
| | | |
| | | // //验证拣货信息是否为已完成 |
| | | // if (exportAllot.Status == "5") |
| | | // { |
| | | // break; |
| | | // } |
| | | |
| | | |
| | | //Db.Insertable(comList).ExecuteCommand(); |
| | | |
| | | |
| | | #endregion |
| | | |
| | | continue; |
| | | } |
| | | item.LocatNo = "";//储位更改(改为空) |
| | | item.WareHouseNo = "";//所属仓库更改(改为空) |
| | | item.RoadwayNo = "";//所属巷道更改(改为空) |
| | | item.AreaNo = "";//所属区域更改(改为空) |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | //出库流水(更改状态) |
| | | var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList(); |
| | | var PalletType = "0"; //0:物料托 1:空托盘托 |
| | | var soNo = ""; |
| | | var sku = ""; |
| | | foreach (var item in allot) |
| | | { |
| | | if (item.SkuNo == "100099") |
| | | { |
| | | item.Status = "5"; |
| | | item.CompleteQty += stockDetail[0].Qty; |
| | | PalletType = "1"; |
| | | } |
| | | else |
| | | { |
| | | item.Status = "2"; |
| | | soNo = item.SONo; |
| | | sku = item.SkuNo; |
| | | } |
| | | |
| | | } |
| | | //下发四楼调度AGV的任务 |
| | | if ((task.EndLocat == "outMode" || task.EndLocat == "outMode") && PalletType == "0") |
| | | { |
| | | foreach (var item in allot) |
| | | { |
| | | var detail = Db.Queryable<DataStockDetail>().First(m => m.Id == item.StockId); |
| | | detail.SONo = item.SONo; |
| | | Db.Updateable(detail).ExecuteCommand(); |
| | | } |
| | | |
| | | var locatePing = new AllotLocation().GetPingLocate(soNo, sku); |
| | | if (locatePing == null) |
| | | { |
| | | throw new Exception("平库未查询到空位置"); |
| | | } |
| | | var exTask = new LogTask //出库任务 |
| | | { |
| | | TaskNo = new Common().GetMaxNo("TK"), |
| | | Sender = "WMS", |
| | | Receiver = "AGV", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = task.EndLocat,//起始位置 |
| | | EndLocat = locatePing.LocatNo,//outMode,//目标位置 |
| | | PalletNo = task.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = "从" + task.EndLocat + "到" + locatePing.LocatNo + "的出库任务", //关键信息 |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | var outDto = new List<OutCommandDto> |
| | | { |
| | | new OutCommandDto() |
| | | { |
| | | PalletNo = task.PalletNo,//托盘号 |
| | | StartLocate = task.EndLocat, // 起始位置 |
| | | StartRoadway = "",//其实巷道 |
| | | EndLocate = locatePing.LocatNo,//outMode, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库)0入 1出 2移 |
| | | OutMode = "", //出库口 |
| | | Order = 1, |
| | | |
| | | //UnstackingMode = unstackingMode2,//拣货方式 0机器拆托出 1 人工拣货出 |
| | | //CompleteQty = outCount2, //拆的件数 |
| | | //BoxexQty = outCount, //总件数 |
| | | } |
| | | }; |
| | | // 正式运行程序放开 |
| | | var list2 = outDto.Select(m => m.TaskNo).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(outDto); |
| | | string response = ""; |
| | | |
| | | try |
| | | { |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | //response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | //////解析返回数据 |
| | | //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | //if (wcsModel.StatusCode == 0) |
| | | //{ |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | //} |
| | | //if (wcsModel.StatusCode == -1) |
| | | //{ |
| | | // new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); |
| | | // throw new Exception(wcsModel.Msg); |
| | | //} |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | |
| | | if (userId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); |
| | | } |
| | | |
| | | |
| | | |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception("完成反馈失败:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// wcs返回的成功信号(移库成功) |
| | | /// </summary> |
| | | /// <param name="taskNo">任务号</param> |
| | | /// <param name="userId">操作人</param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void RelocationSuccess(string taskNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | //当前任务信息 |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | } |
| | | if (task.Status == "2") |
| | | { |
| | | throw new Exception("当前任务已完成"); |
| | | } |
| | | Db.BeginTran(); |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); |
| | | //当前任务中的目标储位信息 |
| | | //当前任务中的原储位 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat); |
| | | if (locate == null) |
| | | { |
| | | throw new Exception($"WMS系统中没有该{task.StartLocat}储位对应的信息"); |
| | | } |
| | | var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); |
| | | if (locate2 == null) |
| | | { |
| | | throw new Exception($"WMS系统中没有该{task.EndLocat}储位对应的信息"); |
| | | } |
| | | |
| | | try |
| | | { |
| | | task.Status = "2";//任务状态 |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.FinishDate = DateTime.Now;//完成时间 |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | |
| | | #region 修改储位状态 |
| | | |
| | | //原储位改为空储位 0 |
| | | locate.Status = "0"; |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | |
| | | //目标储位改为有货物 1 |
| | | locate2.Status = "1"; |
| | | Db.Updateable(locate2).ExecuteCommand(); |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.WareHouseNo = locate2.WareHouseNo; |
| | | item.AreaNo = locate2.AreaNo; |
| | | item.RoadwayNo = locate2.RoadwayNo; |
| | | item.LocatNo = locate2.LocatNo; |
| | | } |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception("完成反馈失败:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | //重新下发出库任务 |
| | | public OutCommandDto AgainSendSoTask(string taskNo, int userId, string url) |
| | | { |
| | |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | ////解析返回数据 |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | if (wcsModel.StatusCode == 0) |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); |
| | | if (wcsModel.code == 200) |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list, time1, time2); |
| | | |
| | | } |
| | | if (wcsModel.StatusCode == -1) |
| | | else |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.Msg); |
| | | throw new Exception($"wcs返回状态异常:{wcsModel.Msg}"); |
| | | new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.message); |
| | | throw new Exception($"wcs返回状态异常:{wcsModel.message}"); |
| | | } |
| | | } |
| | | catch (Exception ex) |