| | |
| | | using WMS.Entity.LogEntity; |
| | | using Model.ModelDto.SysDto; |
| | | using Model.ModelDto.BllSoDto; |
| | | using System.Security.Policy; |
| | | |
| | | namespace WMS.BLL.BllPdaServer |
| | | { |
| | |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | var type1 = new List<string>() { "0", "4" }; //拣货不可多出 成品出库、不合格品出库 |
| | | var type2 = new List<string>() { "1", "2", "3", "5", "6", "7", "8" };//拣货可多出 领料出库、抽检出库、物料取样出库、中间品出库、代储出库、其他出库、寄存出库 |
| | | if (type1.Contains(notice.Type)) |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | } |
| | | if (type2.Contains(notice.Type)) |
| | | { |
| | | if (notice.Status != "3" && notice.Status != "4") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行或执行完成,不能拣货"); |
| | | } |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// WMS申请拣货空托 |
| | | /// </summary> |
| | | /// <param name="model"> </param> |
| | | /// <param name="userId"> </param> |
| | | /// <param name="url"> </param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public string IssuePlnCehckHouseWcs(CheckModePalletVm model, int userId, string url) |
| | | { |
| | | try |
| | | { |
| | | string StartLocate = "" ,EndLocate = ""; |
| | | |
| | | Db.BeginTran(); |
| | | if (model.OutMode == "001") //西侧拣货位叫空托盘 |
| | | { |
| | | var xLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101")); |
| | | if (xLocate == null) |
| | | { |
| | | throw new Exception("没有可用的空托盘"); |
| | | } |
| | | StartLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101")).LocatNo; |
| | | EndLocate = "B15010101"; |
| | | } |
| | | else//东侧拣货位叫空托盘 |
| | | { |
| | | var dLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13030101" || w.LocatNo == "B13040101" || w.LocatNo == "B13050101")); |
| | | if (dLocate == null) |
| | | { |
| | | throw new Exception("没有可用的空托盘"); |
| | | } |
| | | StartLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13030101" || w.LocatNo == "B13040101" || w.LocatNo == "B13050101")).LocatNo; |
| | | EndLocate = "B15020101"; |
| | | } |
| | | |
| | | //添加出库任务 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "AGV", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = StartLocate,//起始位置 |
| | | EndLocat = EndLocate,//目标位置 |
| | | PalletNo = "",//托盘码 |
| | | Msg = string.Format("转运任务:{0}=>>{1}", StartLocate, EndLocate), |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "2",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "3",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | var storageLocatEnd = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == EndLocate); |
| | | //修改目标储位地址状态 |
| | | if (storageLocatEnd != null) |
| | | { |
| | | storageLocatEnd.Status = "4";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocatEnd).ExecuteCommand(); |
| | | } |
| | | |
| | | #region 呼叫小车代码 |
| | | |
| | | var endlono = EndLocate; |
| | | string tasktype = "D01"; |
| | | |
| | | //点到点指令集合 |
| | | object[] position = new object[2]; |
| | | position[0] = new |
| | | { |
| | | positionCode = StartLocate, |
| | | type = "00" |
| | | }; |
| | | position[1] = new |
| | | { |
| | | positionCode = endlono, |
| | | type = "00" |
| | | }; |
| | | |
| | | List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>(); |
| | | AgvSchedulingTask agvTask = new AgvSchedulingTask(); |
| | | Random r = new Random(); |
| | | long ran = DateTime.Now.Ticks; |
| | | agvTask.ReqCode = ran.ToString(); |
| | | agvTask.TaskCode = taskNo; |
| | | agvTask.TaskTyp = tasktype; |
| | | agvTask.PositionCodePath = position; |
| | | agvTask.CtnrTyp = "1"; |
| | | |
| | | agvTaskList.Add(agvTask); |
| | | |
| | | string str = ""; |
| | | var list2 = agvTaskList.Select(m => m.TaskCode).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(agvTaskList); |
| | | jsonData = jsonData.Substring(1, jsonData.Length - 1); |
| | | jsonData = jsonData.Substring(0, jsonData.Length - 1); |
| | | string response = ""; |
| | | |
| | | try |
| | | { |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | //////解析返回数据 |
| | | var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); |
| | | if (agvModel.Code == "0") |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | } |
| | | if (agvModel.Code == "1") |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, agvModel.Message); |
| | | throw new Exception(agvModel.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV转运", "", "移库", $"PDA呼叫小车拆空托盘拣货", userId); |
| | | Db.CommitTran(); |
| | | |
| | | return ""; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | public string MoveAddress(string oldAddress, string roadWay, string skuNo,string areaNo="")//01020201 排-列-层-深度 |
| | | { |
| | | string nowAddress = ""; |
| | |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | decimal boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | if (decimal.Parse(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | } |
| | | if (Convert.ToInt32(pickQty1) > needQty) |
| | | if (decimal.Parse(pickQty1) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | } |