| | |
| | | using System.ComponentModel.Design; |
| | | using System.Linq; |
| | | using System.Linq.Expressions; |
| | | using System.Net; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Microsoft.AspNetCore.Identity; |
| | |
| | | ParentName = "库内作业", |
| | | MenuName = "盘点单据", |
| | | FkNo = model.CrNo, |
| | | TypeName = "添加", |
| | | TypeName = "编辑", |
| | | Msg = $"编辑了单据号为{model.CrNo}的盘点单信息" |
| | | }); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", model.CrNo, "编辑", $"编辑了单据号为{model.CrNo}的盘点单信息", _userManager.UserId); |
| | |
| | | //盘点下发出库 |
| | | public async Task<List<OutCommandDto>> CheckOutHouse(string crNo, string outMode, string url, string str) |
| | | { |
| | | try |
| | | #region 集合 |
| | | var outDtoList = new List<OutCommandDto>(); //出库数据的集合 |
| | | //记录错误信息的集合 |
| | | var flagList = new List<int>();//1:当前要出库的储位正在移出、2 出库的托盘储位信息错误(在储位表中未查询到)、3储位损坏不能出库、4 要出库的托盘正在入库 |
| | | |
| | | #endregion |
| | | var com = new Common(); |
| | | //assign.IsHavePyTask(); |
| | | var notice = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.CRNo == crNo && m.IsDel == "0"); |
| | | if (notice == null) |
| | | { |
| | | #region 集合 |
| | | var outDtoList = new List<OutCommandDto>(); //出库数据的集合 |
| | | //记录错误信息的集合 |
| | | var flagList = new List<int>();//1:当前要出库的储位正在移出、2 出库的托盘储位信息错误(在储位表中未查询到)、3储位损坏不能出库、4 要出库的托盘正在入库 |
| | | |
| | | #endregion |
| | | var com = new Common(); |
| | | //assign.IsHavePyTask(); |
| | | var notice = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.CRNo == crNo && m.IsDel == "0"); |
| | | if (notice == null) |
| | | throw Oops.Bah($"未找到{crNo}盘点单信息"); |
| | | } |
| | | //所有要出库的盘点明细信息(等待的信息和待拣货的信息) |
| | | var funSetting = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetNo == "InventoryCheckMethod"); |
| | | if (funSetting == null || funSetting.IsEnable == "OFF") |
| | | { |
| | | throw Oops.Bah("需配置盘点方式"); |
| | | } |
| | | var list = await Db.Queryable<BllStockCheckDetail>().Where(a => a.IsDel == "0" && a.CRNo == crNo && a.Status == 0).ToListAsync(); |
| | | if (list.Count == 0) //判断是否有需要下发的盘点明细 |
| | | { |
| | | throw Oops.Bah("当前盘点单据无需要下发的托盘"); |
| | | } |
| | | if (funSetting.SetValue == "once") |
| | | { |
| | | if (list.Any(s => s.Status == 1 || s.Status == 2)) |
| | | { |
| | | throw Oops.Bah($"未找到{crNo}盘点单信息"); |
| | | throw Oops.Bah("已有正在出库或待盘点的数据,请完成盘点后再出库"); |
| | | } |
| | | //所有要出库的盘点明细信息(等待的信息和待拣货的信息) |
| | | var list = await Db.Queryable<BllStockCheckDetail>().Where(a => a.IsDel == "0" && a.CRNo == crNo && a.Status == 0).ToListAsync(); |
| | | if (list.Count == 0) //判断是否有需要下发的盘点明细 |
| | | list = new List<BllStockCheckDetail>() { list.FirstOrDefault() }; |
| | | } |
| | | #region |
| | | //要出库的托盘集合 |
| | | var outLpnList = list.Select(m => m.PalletNo).Distinct().ToList(); |
| | | //要出库的明细集合 |
| | | var outStockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToListAsync(); |
| | | var outStockBox = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToListAsync(); |
| | | //获取物料信息 |
| | | var skuNo = await Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.Type == "4").Select(a => a.SkuNo).ToListAsync(); |
| | | var time = DateTime.Now; |
| | | //Db.BeginTran(); |
| | | //循环盘点明细的信息生成出库任务 |
| | | foreach (var item in list) |
| | | { |
| | | if (item.Status == 0) |
| | | { |
| | | throw Oops.Bah("当前盘点单据无需要下发的托盘"); |
| | | } |
| | | #region |
| | | //要出库的托盘集合 |
| | | var outLpnList = list.Select(m => m.PalletNo).Distinct().ToList(); |
| | | //要出库的明细集合 |
| | | var outStockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToListAsync(); |
| | | var outStockBox = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToListAsync(); |
| | | //获取物料信息 |
| | | var skuNo = await Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.Type == "4").Select(a => a.SkuNo).ToListAsync(); |
| | | var time = DateTime.Now; |
| | | Db.BeginTran(); |
| | | try |
| | | { |
| | | //循环盘点明细的信息生成出库任务 |
| | | foreach (var item in list) |
| | | var logList = new List<BllStockCheckLog>(); |
| | | //判断是否为无码物料 |
| | | if (skuNo.Contains(item.SkuNo)) |
| | | { |
| | | if (item.Status == 0) |
| | | var de = outStockDetail.First(m => m.IsDel == "0" && |
| | | m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo); |
| | | |
| | | var checkLog = new BllStockCheckLog() |
| | | { |
| | | var logList = new List<BllStockCheckLog>(); |
| | | //判断是否为无码物料 |
| | | if (skuNo.Contains(item.SkuNo)) |
| | | { |
| | | var de = outStockDetail.First(m => m.IsDel == "0" && |
| | | m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo); |
| | | CRNo = item.CRNo, |
| | | PalletNo = item.PalletNo, |
| | | BoxNo = "", |
| | | BoxNo2 = "", |
| | | BoxNo3 = "", |
| | | Qty = (int?)de.Qty, |
| | | SkuNo = de.SkuNo, |
| | | SkuName = de.SkuName, |
| | | Standard = de.Standard, |
| | | LotNo = de.LotNo, |
| | | LotText = de.LotText, |
| | | SupplierLot = de.SupplierLot, |
| | | |
| | | var checkLog = new BllStockCheckLog() |
| | | { |
| | | CRNo = item.CRNo, |
| | | PalletNo = item.PalletNo, |
| | | BoxNo = "", |
| | | BoxNo2 = "", |
| | | BoxNo3 = "", |
| | | Qty = (int?)de.Qty, |
| | | SkuNo = de.SkuNo, |
| | | SkuName = de.SkuName, |
| | | Standard = de.Standard, |
| | | LotNo = de.LotNo, |
| | | LotText = de.LotText, |
| | | SupplierLot = de.SupplierLot, |
| | | CreateUser = _userManager.UserId, |
| | | CreateTime = time |
| | | }; |
| | | logList.Add(checkLog); |
| | | |
| | | CreateUser = _userManager.UserId, |
| | | CreateTime = time |
| | | }; |
| | | logList.Add(checkLog); |
| | | |
| | | } |
| | | else |
| | | { |
| | | var de = outStockDetail.Where(m => |
| | | m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo).Select(m => m.Id).ToList(); |
| | | var bo = outStockBox.Where(m => de.Contains(m.StockDetailId)).ToList(); |
| | | foreach (var b in bo) |
| | | { |
| | | var checkLog = new BllStockCheckLog() |
| | | { |
| | | CRNo = item.CRNo, |
| | | PalletNo = item.PalletNo, |
| | | BoxNo = b.BoxNo, |
| | | BoxNo2 = b.BoxNo2, |
| | | BoxNo3 = b.BoxNo3, |
| | | Qty = b.Qty, |
| | | SkuNo = b.SkuNo, |
| | | SkuName = b.SkuName, |
| | | Standard = b.Standard, |
| | | LotNo = b.LotNo, |
| | | LotText = b.LotText, |
| | | SupplierLot = b.SupplierLot, |
| | | |
| | | CreateUser = _userManager.UserId, |
| | | CreateTime = time |
| | | }; |
| | | logList.Add(checkLog); |
| | | } |
| | | } |
| | | |
| | | //生成盘点记录 |
| | | await Db.Insertable(logList).ExecuteCommandAsync(); |
| | | } |
| | | // 储位号 |
| | | var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo).LocatNo; |
| | | |
| | | #region 判断 |
| | | //判断托盘是否在库内 |
| | | if (string.IsNullOrWhiteSpace(locateNo)) |
| | | } |
| | | else |
| | | { |
| | | var de = outStockDetail.Where(m => |
| | | m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo).Select(m => m.Id).ToList(); |
| | | var bo = outStockBox.Where(m => de.Contains(m.StockDetailId)).ToList(); |
| | | foreach (var b in bo) |
| | | { |
| | | var de = outStockDetail.First(m => m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo); |
| | | //判断是否是零箱库,当前明细信息直接更新出库完成 |
| | | if (de != null && de.WareHouseNo == "W02") |
| | | var checkLog = new BllStockCheckLog() |
| | | { |
| | | //盘点明细状态改为待盘点 |
| | | item.Status = 2; |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | //盘点信息修改 |
| | | if (notice.Status == 0) |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == item.PalletNo).ToListAsync(); |
| | | foreach (var s in stockDetail) |
| | | { |
| | | s.LocatNo = "";//储位更改(改为空) |
| | | s.WareHouseNo = "";//所属仓库更改(改为空) |
| | | s.RoadwayNo = "";//所属巷道更改(改为空) |
| | | s.AreaNo = "";//所属区域更改(改为空) |
| | | await Db.Updateable(s).ExecuteCommandAsync(); |
| | | } |
| | | flagList.Add(5); |
| | | continue; |
| | | } |
| | | //判断托盘是否在入库中 |
| | | var imBl = com.GetImTask(item.PalletNo); |
| | | if (imBl != null) |
| | | { |
| | | flagList.Add(4); |
| | | continue; |
| | | } |
| | | //判断是否是已经出过库又回库(状态为待拣货的 1) |
| | | if (item.Status == 0) |
| | | { |
| | | //如果不在仓库内,当前明细信息直接更新出库完成 |
| | | item.Status = 2;//状态 |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | if (notice.Status == 0) |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | continue; |
| | | } |
| | | //当前出库的储位信息 |
| | | var locate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == locateNo && m.IsDel == "0"); |
| | | if (locate == null) |
| | | { |
| | | flagList.Add(2); |
| | | continue; |
| | | } |
| | | //判断储位标志是否为损坏 |
| | | if (locate.Flag == "2") |
| | | { |
| | | flagList.Add(3); |
| | | continue; |
| | | } |
| | | #endregion |
| | | if (locate.Status == "1") //有物品 |
| | | { |
| | | #region 添加出库任务 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | //添加出库任务 |
| | | var exTask = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | StartLocat = locate.LocatNo,//起始位置 |
| | | EndLocat = outMode,//目标位置 |
| | | PalletNo = item.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "2",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CRNo = item.CRNo, |
| | | PalletNo = item.PalletNo, |
| | | BoxNo = b.BoxNo, |
| | | BoxNo2 = b.BoxNo2, |
| | | BoxNo3 = b.BoxNo3, |
| | | Qty = b.Qty, |
| | | SkuNo = b.SkuNo, |
| | | SkuName = b.SkuName, |
| | | Standard = b.Standard, |
| | | LotNo = b.LotNo, |
| | | LotText = b.LotText, |
| | | SupplierLot = b.SupplierLot, |
| | | |
| | | CreateUser = _userManager.UserId, |
| | | CreateTime = time |
| | | }; |
| | | await Db.Insertable(exTask).ExecuteCommandAsync(); |
| | | |
| | | outDtoList.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = item.PalletNo,//托盘号 |
| | | StartLocate = locate.LocatNo, // 起始位置 |
| | | StartRoadway = locate.RoadwayNo, |
| | | EndLocate = "", // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = "", //目标地址 |
| | | Order = 1 |
| | | }); |
| | | #endregion |
| | | |
| | | #region 改变数据 |
| | | if (item.Status == 0)//判断托盘是否下发过 |
| | | { |
| | | if (notice.Status == 0) |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | locate.Status = "3"; //要出库的储位改变状态 正在出库 |
| | | await Db.Updateable(locate).ExecuteCommandAsync(); |
| | | |
| | | item.TaskNo = exTask.TaskNo; // 出库分配信息中更新任务号 |
| | | item.Status = 1; // 出库分配信息状态改为正在执行 |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | #endregion |
| | | |
| | | flagList.Add(0); |
| | | } |
| | | else if (locate.Status == "3") //出库中 |
| | | { |
| | | #region 改变数据 |
| | | //判断是否是已经出过库又回库(状态为待拣货的 1) |
| | | if (item.Status == 0) |
| | | { |
| | | if (notice.Status == 0) |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | |
| | | } |
| | | } |
| | | var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "2" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo); |
| | | item.TaskNo = taskNo.TaskNo; |
| | | item.Status = 1; // 出库分配信息状态改为正在执行 |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | |
| | | #endregion |
| | | } |
| | | else if (locate.Status == "5") //移出中 |
| | | { |
| | | flagList.Add(1); |
| | | logList.Add(checkLog); |
| | | } |
| | | } |
| | | //添加操作日志记录 |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", crNo, "出库", $"点击出库按钮盘点单号为:{crNo}的盘点单", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "盘点单据", |
| | | FkNo = crNo, |
| | | TypeName = "出库", |
| | | Msg = $"点击出库按钮盘点单号为:{crNo}的盘点单" |
| | | }); |
| | | Db.CommitTran(); |
| | | |
| | | str = string.Empty; |
| | | if (flagList.Count(m => m == 1) > 0) |
| | | { |
| | | str += "1.当前要出库的储位正在移出、"; |
| | | } |
| | | if (flagList.Count(m => m == 2) > 0) |
| | | { |
| | | str += "2.出库的托盘储位信息错误(在储位表中未查询到)、"; |
| | | } |
| | | if (flagList.Count(m => m == 3) > 0) |
| | | { |
| | | str += "4.储位损坏不能出库、"; |
| | | } |
| | | if (flagList.Count(m => m == 4) > 0) |
| | | { |
| | | str += "3.要出库的托盘正在入库、"; |
| | | } |
| | | if (flagList.Count(m => m == 5) > 0) |
| | | { |
| | | str += "5.要出库的托盘在零箱库、"; |
| | | } |
| | | if (outDtoList.Count > 0) |
| | | { |
| | | // 正式运行程序放开 |
| | | var list2 = outDtoList.Select(m => m.TaskNo).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(outDtoList); |
| | | 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); |
| | | //str += "下发成功"; |
| | | //} |
| | | //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); |
| | | } |
| | | } |
| | | return outDtoList; |
| | | //生成盘点记录 |
| | | await Db.Insertable(logList).ExecuteCommandAsync(); |
| | | } |
| | | catch (Exception e) |
| | | // 储位号 |
| | | var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo).LocatNo; |
| | | |
| | | #region 判断 |
| | | //判断托盘是否在库内 |
| | | if (string.IsNullOrWhiteSpace(locateNo)) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | var de = outStockDetail.First(m => m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo); |
| | | //判断是否是零箱库,当前明细信息直接更新出库完成 |
| | | if (de != null && de.WareHouseNo == "W02") |
| | | { |
| | | //盘点明细状态改为待盘点 |
| | | item.Status = 2; |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | //盘点信息修改 |
| | | if (notice.Status == 0) |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == item.PalletNo).ToListAsync(); |
| | | foreach (var s in stockDetail) |
| | | { |
| | | s.LocatNo = "";//储位更改(改为空) |
| | | s.WareHouseNo = "";//所属仓库更改(改为空) |
| | | s.RoadwayNo = "";//所属巷道更改(改为空) |
| | | s.AreaNo = "";//所属区域更改(改为空) |
| | | await Db.Updateable(s).ExecuteCommandAsync(); |
| | | } |
| | | flagList.Add(5); |
| | | continue; |
| | | } |
| | | //判断托盘是否在入库中 |
| | | var imBl = com.GetImTask(item.PalletNo); |
| | | if (imBl != null) |
| | | { |
| | | flagList.Add(4); |
| | | continue; |
| | | } |
| | | //判断是否是已经出过库又回库(状态为待拣货的 1) |
| | | if (item.Status == 0) |
| | | { |
| | | //如果不在仓库内,当前明细信息直接更新出库完成 |
| | | item.Status = 2;//状态 |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | if (notice.Status == 0) |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | continue; |
| | | } |
| | | //当前出库的储位信息 |
| | | var locate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == locateNo && m.IsDel == "0"); |
| | | if (locate == null) |
| | | { |
| | | flagList.Add(2); |
| | | continue; |
| | | } |
| | | //判断储位标志是否为损坏 |
| | | if (locate.Flag == "2") |
| | | { |
| | | flagList.Add(3); |
| | | continue; |
| | | } |
| | | #endregion |
| | | if (locate.Status == "1") //有物品 |
| | | { |
| | | #region 添加出库任务 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | //添加出库任务 |
| | | var exTask = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | StartLocat = locate.LocatNo,//起始位置 |
| | | EndLocat = outMode,//目标位置 |
| | | PalletNo = item.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "2",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | |
| | | CreateTime = time |
| | | }; |
| | | await Db.Insertable(exTask).ExecuteCommandAsync(); |
| | | |
| | | outDtoList.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = item.PalletNo,//托盘号 |
| | | StartLocate = locate.LocatNo, // 起始位置 |
| | | StartRoadway = locate.RoadwayNo, |
| | | EndLocate = "", // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = "", //目标地址 |
| | | Order = 1 |
| | | }); |
| | | #endregion |
| | | |
| | | #region 改变数据 |
| | | if (item.Status == 0)//判断托盘是否下发过 |
| | | { |
| | | if (notice.Status == 0) |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | locate.Status = "3"; //要出库的储位改变状态 正在出库 |
| | | await Db.Updateable(locate).ExecuteCommandAsync(); |
| | | |
| | | item.TaskNo = exTask.TaskNo; // 出库分配信息中更新任务号 |
| | | item.Status = 1; // 出库分配信息状态改为正在执行 |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | #endregion |
| | | |
| | | flagList.Add(0); |
| | | } |
| | | else if (locate.Status == "3") //出库中 |
| | | { |
| | | #region 改变数据 |
| | | //判断是否是已经出过库又回库(状态为待拣货的 1) |
| | | if (item.Status == 0) |
| | | { |
| | | if (notice.Status == 0) |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | |
| | | } |
| | | } |
| | | var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "2" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo); |
| | | item.TaskNo = taskNo.TaskNo; |
| | | item.Status = 1; // 出库分配信息状态改为正在执行 |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | |
| | | #endregion |
| | | } |
| | | else if (locate.Status == "5") //移出中 |
| | | { |
| | | flagList.Add(1); |
| | | } |
| | | } |
| | | catch (Exception e) |
| | | //添加操作日志记录 |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", crNo, "出库", $"点击出库按钮盘点单号为:{crNo}的盘点单", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | throw new Exception(e.Message); |
| | | ParentName = "库内作业", |
| | | MenuName = "盘点单据", |
| | | FkNo = crNo, |
| | | TypeName = "出库", |
| | | Msg = $"点击出库按钮盘点单号为:{crNo}的盘点单" |
| | | }); |
| | | //Db.CommitTran(); |
| | | |
| | | str = string.Empty; |
| | | if (flagList.Count(m => m == 1) > 0) |
| | | { |
| | | str += "1.当前要出库的储位正在移出、"; |
| | | } |
| | | if (flagList.Count(m => m == 2) > 0) |
| | | { |
| | | str += "2.出库的托盘储位信息错误(在储位表中未查询到)、"; |
| | | } |
| | | if (flagList.Count(m => m == 3) > 0) |
| | | { |
| | | str += "4.储位损坏不能出库、"; |
| | | } |
| | | if (flagList.Count(m => m == 4) > 0) |
| | | { |
| | | str += "3.要出库的托盘正在入库、"; |
| | | } |
| | | if (flagList.Count(m => m == 5) > 0) |
| | | { |
| | | str += "5.要出库的托盘在零箱库、"; |
| | | } |
| | | if (!string.IsNullOrEmpty(str)) |
| | | throw Oops.Bah(str); |
| | | if (outDtoList.Count > 0) |
| | | { |
| | | // 正式运行程序放开 |
| | | var list2 = outDtoList.Select(m => m.TaskNo).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(outDtoList); |
| | | string response = ""; |
| | | |
| | | 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 Oops.Bah(wcsModel.Msg); |
| | | //} |
| | | } |
| | | return outDtoList; |
| | | #endregion |
| | | } |
| | | |
| | | //盘点出库完成 |