| | |
| | | { |
| | | public class RcsServer:IRcsServer |
| | | { |
| | | private readonly object GetPalleLock = new object(); |
| | | private readonly object ApplyLocatLock = new object(); |
| | | |
| | | private static readonly SqlSugarScope Db = DataContext.Db; |
| | | /// <summary> |
| | | /// RCS叫桶 |
| | |
| | | /// <param name="taskNo"></param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void GetPalletNo(Pallnetmsg model, string url, out string taskNo) |
| | | { |
| | | try |
| | | { |
| | | lock (GetPalleLock) |
| | | { |
| | | string taskMsg = ""; |
| | | if (string.IsNullOrEmpty(model.Location)) |
| | | try |
| | | { |
| | | throw new Exception("设备编码不可为空"); |
| | | } |
| | | //通过设备号查找到所属设备(区域) |
| | | var deviceInfo = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.DeviceCode.Contains(model.Location)); |
| | | if (deviceInfo == null) |
| | | { |
| | | throw new Exception("设备信息不存在"); |
| | | } |
| | | var houseNo = deviceInfo.WareHouseNo;//叫桶设备所属车间编号 |
| | | string taskMsg = ""; |
| | | if (string.IsNullOrEmpty(model.Location)) |
| | | { |
| | | throw new Exception("设备编码不可为空"); |
| | | } |
| | | //通过设备号查找到所属设备(区域) |
| | | var deviceInfo = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.DeviceCode.Contains(model.Location)); |
| | | if (deviceInfo == null) |
| | | { |
| | | throw new Exception("设备信息不存在"); |
| | | } |
| | | var houseNo = deviceInfo.WareHouseNo;//叫桶设备所属车间编号 |
| | | |
| | | //叫桶设备所在储位信息(目标储位) |
| | | var endLoction = new SysStorageLocat(); |
| | | |
| | | var urlMes = "";//回传MES的接口地址 |
| | | var noticeNo = "0";//出入库单据明细ID |
| | | //叫桶设备所在储位信息(目标储位) |
| | | var endLoction = new SysStorageLocat(); |
| | | |
| | | //所有待分配的桶 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.Status == "0"); |
| | | //分配桶信息 |
| | | var pallet = new DataStockDetail(); |
| | | var urlMes = "";//回传MES的接口地址 |
| | | var noticeNo = "0";//出入库单据明细ID |
| | | |
| | | //开始事务 |
| | | Db.BeginTran(); |
| | | |
| | | switch (model.Type) |
| | | { |
| | | case "0"://接料设备叫净桶 |
| | | { |
| | | //叫桶目标储位地址信息 |
| | | endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1); |
| | | if (endLoction == null) |
| | | { |
| | | throw new Exception("叫桶设备目标储位信息不存在"); |
| | | } |
| | | //查找到该车间净桶区 |
| | | List<string> areaNoList = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "0" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList(); |
| | | //查找净桶 |
| | | pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "0" && w.Status == "0" |
| | | && areaNoList.Contains(w.AreaNo)).OrderByDescending(o => o.CreateTime).First(); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("暂无净桶可分配"); |
| | | } |
| | | pallet.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配 |
| | | //更新桶库存明细 |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | //所有待分配的桶 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.Status == "0"); |
| | | //分配桶信息 |
| | | var pallet = new DataStockDetail(); |
| | | |
| | | taskMsg = "设备叫净桶任务"; |
| | | } |
| | | break; |
| | | case "1"://混料设备叫料桶(混料) |
| | | { |
| | | //叫桶目标储位地址信息 |
| | | endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1); |
| | | if (endLoction == null) |
| | | { |
| | | throw new Exception("叫桶设备目标储位信息不存在"); |
| | | } |
| | | //判断是否有批次号 |
| | | if (string.IsNullOrWhiteSpace(model.LotNo)) |
| | | { |
| | | throw new Exception("批次号为空!"); |
| | | } |
| | | //查找到该车间预混区 |
| | | List<string> areaNoList2 = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "1" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList(); |
| | | //查找库存中是否有可用的此批次的混料桶 |
| | | pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "1" && w.Status == "0" && w.LotNo == model.LotNo |
| | | && areaNoList2.Contains(w.AreaNo)).OrderByDescending(o => o.CompleteTime).First(); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("暂无混料桶可分配"); |
| | | } |
| | | pallet.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配 |
| | | //更新桶库存明细 |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | |
| | | taskMsg = "设备叫料桶混料任务"; |
| | | } |
| | | break; |
| | | case "2"://下料设备叫料桶(下料) |
| | | { |
| | | if (houseNo == "M04")//除了喷干车间下料口都是2个储位(投料储位、投完料储位) |
| | | //开始事务 |
| | | Db.BeginTran(); |
| | | //判断叫料设备是否是A区的混料设备03,该设备是接料混料一体机,AGV叫桶应该叫净桶接料 |
| | | if (houseNo == "M03" && model.Location == "125" && model.Type == "1") |
| | | { |
| | | model.Type = "0"; |
| | | } |
| | | string agvMsg = string.Empty; |
| | | switch (model.Type) |
| | | { |
| | | case "0"://接料设备叫净桶 |
| | | { |
| | | //叫桶目标储位地址信息 |
| | | endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1); |
| | | if (endLoction == null) |
| | | { |
| | | throw new Exception("叫桶设备目标储位信息不存在"); |
| | | } |
| | | //查找到该车间净桶区 |
| | | List<string> areaNoList = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "0" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList(); |
| | | //查找净桶 |
| | | if (houseNo == "M03")//大单体车间净桶是绑定接料设备的 |
| | | { |
| | | pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "0" && w.Status == "0" |
| | | && areaNoList.Contains(w.AreaNo) && w.UDF1 == deviceInfo.DeviceCode).OrderBy(o => o.UpdateTime).First(); |
| | | } |
| | | else |
| | | { |
| | | pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "0" && w.Status == "0" |
| | | && areaNoList.Contains(w.AreaNo)).OrderBy(o => o.UpdateTime).First(); |
| | | } |
| | | |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("暂无净桶可分配"); |
| | | } |
| | | //分配桶后判断该桶外侧储位是否需要移库 |
| | | bool yikuResult = YikuTask(pallet.PalletNo, url); |
| | | if (!yikuResult) |
| | | { |
| | | throw new Exception("移库失败"); |
| | | } |
| | | |
| | | pallet.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配 |
| | | //更新桶库存明细 |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | |
| | | taskMsg = "设备叫净桶任务"; |
| | | } |
| | | else |
| | | break; |
| | | case "1"://混料设备叫料桶(混料) |
| | | { |
| | | //叫桶目标储位地址信息 |
| | | endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1);// Column=1 投料储位,Column=2 投完料储位 |
| | | } |
| | | if (endLoction == null) |
| | | { |
| | | throw new Exception("叫桶设备目标储位信息不存在"); |
| | | } |
| | | //判断是否有批次号 |
| | | if (string.IsNullOrWhiteSpace(model.LotNo)) |
| | | { |
| | | throw new Exception("批次号为空!"); |
| | | } |
| | | //查找是否有此批次出库单明细 |
| | | var soNoticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(w => w.IsDel == "0" && w.LotNo == model.LotNo).OrderBy(o => o.CreateTime).First(); |
| | | if (soNoticeDetail == null) |
| | | { |
| | | throw new Exception("该批次没有对应的出库单明细"); |
| | | } |
| | | noticeNo = soNoticeDetail.Id.ToString(); |
| | | //出库总单 |
| | | var soNotice = Db.Queryable<BllExportNotice>().Where(w => w.IsDel == "0" && w.SONo == soNoticeDetail.SONo).First(); |
| | | if (soNotice == null) |
| | | { |
| | | throw new Exception("该批次没有对应的出库单"); |
| | | } |
| | | soNotice.Status = "3";//正在执行 |
| | | soNotice.UpdateTime = DateTime.Now; |
| | | //更新出库单 |
| | | Db.Updateable(soNotice).ExecuteCommand(); |
| | | |
| | | //查找到该车间半成品区 |
| | | List<string> areaNoList3 = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "2" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList(); |
| | | //查找库存中是否有此批次的合格下料桶 |
| | | pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "2" && w.Status == "0" && w.LotNo == model.LotNo && w.InspectStatus == "1" |
| | | && areaNoList3.Contains(w.AreaNo)).OrderByDescending(o => o.CompleteTime).First(); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("暂无下料桶可分配"); |
| | | } |
| | | pallet.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配 |
| | | //更新桶库存明细 |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | |
| | | taskMsg = "设备叫料桶下料任务"; |
| | | } |
| | | break; |
| | | case "3"://清洗设备叫脏桶 |
| | | { |
| | | //叫桶目标储位地址信息 |
| | | endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1);// Column=1 清洗储位,Column=2 清洗完料储位 |
| | | if (endLoction == null) |
| | | { |
| | | throw new Exception("叫桶设备目标储位信息不存在"); |
| | | } |
| | | //查找到该车间脏桶区 |
| | | List<string> areaNoList4 = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "3" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList(); |
| | | List<DataStockDetail> palletList = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "3" && w.Status == "0" |
| | | && areaNoList4.Contains(w.AreaNo)).OrderByDescending(o => o.CompleteTime).ToList(); |
| | | if (palletList.Count <= 0) |
| | | { |
| | | throw new Exception("暂无脏桶可分配"); |
| | | } |
| | | taskMsg = "设备叫脏桶任务"; |
| | | //遍历库存脏桶,返回MES验证 |
| | | foreach (var item in palletList) |
| | | { |
| | | #region 去掉MES |
| | | //string jsonReq = JsonConvert.SerializeObject(item.PalletNo); |
| | | //var response = HttpHelper.DoPost(urlMes, jsonReq, "回传MES脏桶编号", "RCS").ToString(); |
| | | //var obj = JsonConvert.DeserializeObject<ReMes>(response);//解析返回数据 |
| | | //if (obj.Success == "0") |
| | | //{ |
| | | // if (obj.Result != "1")//不可清洗,将脏桶冻结 |
| | | // { |
| | | // item.Status = "5";//异常冻结 |
| | | // //修改该桶库存状态 |
| | | // Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | // continue; |
| | | // } |
| | | // //下发小车任务 |
| | | // var task2 = new TaskDetial |
| | | // { |
| | | // Startport = item.LocatNo, |
| | | // Endport = model.Location, |
| | | // Pallno = item.PalletNo, |
| | | // Type = model.Type, |
| | | // Crtype = "1", |
| | | // Noticedetailno = int.Parse(noticeno), |
| | | // }; |
| | | // CreateLotTask(task2); |
| | | // return; |
| | | //} |
| | | //else |
| | | //{ |
| | | // throw new Exception("回传MES净桶编号失败!"); |
| | | //} |
| | | #endregion |
| | | |
| | | item.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配 |
| | | //更新桶库存明细 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | //起始储位地址信息 |
| | | var startLoction2 = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == item.LocatNo); |
| | | if (startLoction2 == null) |
| | | endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1); |
| | | if (endLoction == null) |
| | | { |
| | | throw new Exception($"起始目标储位信息不存在,桶号:{item.LocatNo}"); |
| | | throw new Exception("叫桶设备目标储位信息不存在"); |
| | | } |
| | | //判断是否有批次号 |
| | | if (string.IsNullOrWhiteSpace(model.LotNo)) |
| | | { |
| | | throw new Exception("批次号为空!"); |
| | | } |
| | | //查找到该车间预混区 |
| | | List<string> areaNoList2 = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "1" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList(); |
| | | //查找库存中是否有可用的此批次的混料桶 |
| | | pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "1" && w.Status == "0" && w.LotNo == model.LotNo |
| | | && areaNoList2.Contains(w.AreaNo)).OrderBy(o => o.UpdateTime).First(); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("暂无混料桶可分配"); |
| | | } |
| | | //分配桶后判断该桶外侧储位是否需要移库 |
| | | bool yikuResult = YikuTask(pallet.PalletNo, url); |
| | | if (!yikuResult) |
| | | { |
| | | throw new Exception("移库失败"); |
| | | } |
| | | |
| | | taskNo = new Common().GetMaxNo("TK");//任务号 |
| | | var logTaskEntry2 = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "RCS", |
| | | //IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | SendDate = DateTime.Now, //发送时间 |
| | | //BackDate = DateTime.Now, //返回时间 |
| | | StartLocat = item.LocatNo,//起始位置 |
| | | EndLocat = endLoction.LocatNo,//目标位置 |
| | | PalletNo = item.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | OrderType = "3",//单据类型 0 入库 1 出库 3 移库 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | NoticeDetailNo = int.Parse(noticeNo), |
| | | Msg = taskMsg, //关键信息 |
| | | }; |
| | | //组织下发小车任务信息 |
| | | var task2 = new TaskDetial |
| | | { |
| | | Taskno = taskNo,//任务号 |
| | | Startport = item.LocatNo, |
| | | Endport = model.Location,//endLoction.LocatNo, |
| | | Pallno = item.PalletNo, |
| | | Crtype = "1",//叫桶 |
| | | WareHouseNo = houseNo |
| | | }; |
| | | //给下车下发任务 |
| | | logTaskEntry2.SendDate = DateTime.Now;//发送时间 |
| | | var agvResult2 = CreateTaskForAgv(task2, url); |
| | | if (agvResult2)//成功 |
| | | { |
| | | //请求成功修改任务表相应字段状态 |
| | | logTaskEntry2.IsSuccess = 1; |
| | | logTaskEntry2.IsSend = 0; |
| | | //logTaskEntry2.IsCancel = 0; |
| | | logTaskEntry2.BackDate = DateTime.Now; |
| | | logTaskEntry2.Status = "1"; |
| | | Db.Insertable(logTaskEntry2).ExecuteCommand(); |
| | | pallet.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配 |
| | | //更新桶库存明细 |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | |
| | | startLoction2.Status = "3";//出库中 |
| | | Db.Updateable(startLoction2).ExecuteCommand(); |
| | | |
| | | endLoction.Status = "2";//入库中 |
| | | Db.Updateable(endLoction).ExecuteCommand(); |
| | | } |
| | | else//失败 |
| | | { |
| | | logTaskEntry2.IsSuccess = 0; |
| | | Db.Insertable(logTaskEntry2).ExecuteCommand(); |
| | | |
| | | } |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | return; |
| | | taskMsg = "设备叫料桶混料任务"; |
| | | } |
| | | } |
| | | break; |
| | | default: |
| | | throw new Exception("任务类型无效"); |
| | | } |
| | | //起始储位地址信息 |
| | | var startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == pallet.LocatNo); |
| | | if (startLoction == null) |
| | | { |
| | | throw new Exception($"起始目标储位信息不存在,桶号:{pallet.LocatNo}"); |
| | | } |
| | | break; |
| | | case "2"://下料设备叫料桶(下料) |
| | | { |
| | | if (houseNo == "M04")//除了喷干车间下料口都是2个储位(投料储位、投完料储位) |
| | | { |
| | | //叫桶目标储位地址信息 |
| | | endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1); |
| | | } |
| | | else |
| | | { |
| | | //叫桶目标储位地址信息 |
| | | endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1);// Column=1 投料储位,Column=2 投完料储位 |
| | | } |
| | | if (endLoction == null) |
| | | { |
| | | throw new Exception("叫桶设备目标储位信息不存在"); |
| | | } |
| | | //判断是否有批次号 |
| | | if (string.IsNullOrWhiteSpace(model.LotNo)) |
| | | { |
| | | throw new Exception("批次号为空!"); |
| | | } |
| | | //查找是否有此批次出库单明细 |
| | | /*var soNoticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(w => w.IsDel == "0" && w.LotNo == model.LotNo).OrderBy(o => o.CreateTime).First(); |
| | | if (soNoticeDetail == null) |
| | | { |
| | | throw new Exception("该批次没有对应的出库单明细"); |
| | | } |
| | | noticeNo = soNoticeDetail.Id.ToString(); |
| | | //出库总单 |
| | | var soNotice = Db.Queryable<BllExportNotice>().Where(w => w.IsDel == "0" && w.SONo == soNoticeDetail.SONo).First(); |
| | | if (soNotice == null) |
| | | { |
| | | throw new Exception("该批次没有对应的出库单"); |
| | | } |
| | | soNotice.Status = "3";//正在执行 |
| | | soNotice.UpdateTime = DateTime.Now; |
| | | //更新出库单 |
| | | Db.Updateable(soNotice).ExecuteCommand();*/ |
| | | |
| | | taskNo = new Common().GetMaxNo("TK");//任务号 |
| | | //任务信息 |
| | | var logTaskEntry = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "RCS", |
| | | //IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | SendDate = DateTime.Now, //发送时间 |
| | | //BackDate = DateTime.Now, //返回时间 |
| | | StartLocat = pallet.LocatNo,//起始位置 |
| | | EndLocat = endLoction.LocatNo,//目标位置 |
| | | PalletNo = pallet.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | OrderType = "3",//单据类型 0 入库 1 出库 3移库 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | NoticeDetailNo = int.Parse(noticeNo), |
| | | Msg = taskMsg, //关键信息 |
| | | }; |
| | | //查找到该车间半成品区 |
| | | List<string> areaNoList3 = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "2" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList(); |
| | | //查找库存中是否有此批次的合格下料桶 |
| | | pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "2" && w.Status == "0" && w.LotNo == model.LotNo && w.InspectStatus == "1" |
| | | && areaNoList3.Contains(w.AreaNo)).OrderBy(o => o.UpdateTime).First(); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("暂无下料桶可分配"); |
| | | } |
| | | //分配桶后判断该桶外侧储位是否需要移库 |
| | | bool yikuResult = YikuTask(pallet.PalletNo, url); |
| | | if (!yikuResult) |
| | | { |
| | | throw new Exception("移库失败"); |
| | | } |
| | | |
| | | //组织下发小车任务信息 |
| | | var task = new TaskDetial |
| | | { |
| | | Taskno = taskNo,//任务号 |
| | | Startport = pallet.LocatNo,//起始位置 |
| | | Endport = model.Location,//endLoction.LocatNo,//目标位置 |
| | | Pallno = pallet.PalletNo,//桶号 |
| | | Crtype = "1",//叫桶 |
| | | WareHouseNo = houseNo//车间编码 |
| | | }; |
| | | //给下车下发任务 |
| | | logTaskEntry.SendDate = DateTime.Now;//发送时间 |
| | | var agvResult = CreateTaskForAgv(task, url); |
| | | if (agvResult)//成功 |
| | | { |
| | | //请求成功修改任务表相应字段状态 |
| | | logTaskEntry.IsSuccess = 1; |
| | | logTaskEntry.IsSend = 0; |
| | | //logTaskEntry.IsCancel = 0; |
| | | logTaskEntry.BackDate = DateTime.Now; |
| | | logTaskEntry.Status = "1";//正在执行 |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | pallet.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配 |
| | | //更新桶库存明细 |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | |
| | | startLoction.Status = "3";//出库中 |
| | | Db.Updateable(startLoction).ExecuteCommand(); |
| | | taskMsg = "设备叫料桶下料任务"; |
| | | } |
| | | break; |
| | | case "3"://清洗设备叫脏桶 |
| | | { |
| | | //叫桶目标储位地址信息 |
| | | endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1);// Column=1 清洗储位,Column=2 清洗完料储位 |
| | | if (endLoction == null) |
| | | { |
| | | throw new Exception("叫桶设备目标储位信息不存在"); |
| | | } |
| | | //查找到该车间脏桶区 |
| | | List<string> areaNoList4 = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "3" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList(); |
| | | |
| | | endLoction.Status = "2";//入库中 |
| | | Db.Updateable(endLoction).ExecuteCommand(); |
| | | List<DataStockDetail> palletList = new List<DataStockDetail>(); |
| | | if (houseNo == "M01") |
| | | { |
| | | palletList = Db.Queryable<DataStockDetail>() |
| | | .LeftJoin<SysStorageLocat>((d, l) => d.LocatNo == l.LocatNo) |
| | | .Where(d => d.WareHouseNo == houseNo && d.PalletStatus == "3" && d.Status == "0" && areaNoList4.Contains(d.AreaNo)) |
| | | .OrderBy((d, l) => l.Row) |
| | | .OrderBy((d, l) => l.Column) |
| | | .ToList(); |
| | | } |
| | | else |
| | | { |
| | | palletList = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "3" && w.Status == "0" |
| | | && areaNoList4.Contains(w.AreaNo)).OrderBy(o => o.UpdateTime).ToList(); |
| | | } |
| | | |
| | | if (palletList.Count <= 0) |
| | | { |
| | | throw new Exception("暂无脏桶可分配"); |
| | | } |
| | | taskMsg = "设备叫脏桶任务"; |
| | | //遍历库存脏桶,返回MES验证 |
| | | foreach (var item in palletList) |
| | | { |
| | | #region 去掉MES |
| | | //string jsonReq = JsonConvert.SerializeObject(item.PalletNo); |
| | | //var response = HttpHelper.DoPost(urlMes, jsonReq, "回传MES脏桶编号", "RCS").ToString(); |
| | | //var obj = JsonConvert.DeserializeObject<ReMes>(response);//解析返回数据 |
| | | //if (obj.Success == "0") |
| | | //{ |
| | | // if (obj.Result != "1")//不可清洗,将脏桶冻结 |
| | | // { |
| | | // item.Status = "5";//异常冻结 |
| | | // //修改该桶库存状态 |
| | | // Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | // continue; |
| | | // } |
| | | // //下发小车任务 |
| | | // var task2 = new TaskDetial |
| | | // { |
| | | // Startport = item.LocatNo, |
| | | // Endport = model.Location, |
| | | // Pallno = item.PalletNo, |
| | | // Type = model.Type, |
| | | // Crtype = "1", |
| | | // Noticedetailno = int.Parse(noticeno), |
| | | // }; |
| | | // CreateLotTask(task2); |
| | | // return; |
| | | //} |
| | | //else |
| | | //{ |
| | | // throw new Exception("回传MES净桶编号失败!"); |
| | | //} |
| | | #endregion |
| | | |
| | | item.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配 |
| | | //更新桶库存明细 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | //起始储位地址信息 |
| | | var startLoction2 = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == item.LocatNo); |
| | | if (startLoction2 == null) |
| | | { |
| | | throw new Exception($"起始目标储位信息不存在,桶号:{item.LocatNo}"); |
| | | } |
| | | |
| | | taskNo = new Common().GetMaxNo("TN");//任务号 |
| | | var logTaskEntry2 = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "RCS", |
| | | //IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | SendDate = DateTime.Now, //发送时间 |
| | | //BackDate = DateTime.Now, //返回时间 |
| | | StartLocat = item.LocatNo,//起始位置 |
| | | EndLocat = endLoction.LocatNo,//目标位置 |
| | | PalletNo = item.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | OrderType = "3",//单据类型 0 入库 1 出库 3 移库 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | NoticeDetailNo = int.Parse(noticeNo), |
| | | Msg = taskMsg, //关键信息 |
| | | LotNo = item.LotNo//批次号 |
| | | }; |
| | | //组织下发小车任务信息 |
| | | var task2 = new TaskDetial |
| | | { |
| | | Taskno = taskNo,//任务号 |
| | | Startport = item.LocatNo, |
| | | Endport = model.Location,//endLoction.LocatNo, |
| | | Pallno = item.PalletNo, |
| | | Crtype = "1",//叫桶 |
| | | WareHouseNo = houseNo |
| | | }; |
| | | //给下车下发任务 |
| | | logTaskEntry2.SendDate = DateTime.Now;//发送时间 |
| | | var agvResult2 = CreateTaskForAgv(task2, url, out agvMsg); |
| | | if (agvResult2)//成功 |
| | | { |
| | | //请求成功修改任务表相应字段状态 |
| | | logTaskEntry2.IsSuccess = 1; |
| | | logTaskEntry2.IsSend = 0; |
| | | //logTaskEntry2.IsCancel = 0; |
| | | logTaskEntry2.BackDate = DateTime.Now; |
| | | logTaskEntry2.Status = "1"; |
| | | Db.Insertable(logTaskEntry2).ExecuteCommand(); |
| | | |
| | | startLoction2.Status = "3";//出库中 |
| | | Db.Updateable(startLoction2).ExecuteCommand(); |
| | | |
| | | endLoction.Status = "2";//入库中 |
| | | Db.Updateable(endLoction).ExecuteCommand(); |
| | | } |
| | | else//失败 |
| | | { |
| | | logTaskEntry2.IsSuccess = 0; |
| | | logTaskEntry2.Information = agvMsg; |
| | | Db.Insertable(logTaskEntry2).ExecuteCommand(); |
| | | |
| | | } |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | return; |
| | | } |
| | | } |
| | | break; |
| | | default: |
| | | throw new Exception("任务类型无效"); |
| | | } |
| | | //起始储位地址信息 |
| | | var startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == pallet.LocatNo); |
| | | if (startLoction == null) |
| | | { |
| | | throw new Exception($"起始目标储位信息不存在,桶号:{pallet.LocatNo}"); |
| | | } |
| | | |
| | | taskNo = new Common().GetMaxNo("TN");//任务号 |
| | | //任务信息 |
| | | var logTaskEntry = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "RCS", |
| | | //IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | SendDate = DateTime.Now, //发送时间 |
| | | //BackDate = DateTime.Now, //返回时间 |
| | | StartLocat = pallet.LocatNo,//起始位置 |
| | | EndLocat = endLoction.LocatNo,//目标位置 |
| | | PalletNo = pallet.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | OrderType = "3",//单据类型 0 入库 1 出库 3移库 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | NoticeDetailNo = int.Parse(noticeNo), |
| | | Msg = taskMsg, //关键信息 |
| | | LotNo = pallet.LotNo//批次号 |
| | | }; |
| | | |
| | | //组织下发小车任务信息 |
| | | var task = new TaskDetial |
| | | { |
| | | Taskno = taskNo,//任务号 |
| | | Startport = pallet.LocatNo,//起始位置 |
| | | Endport = model.Location,//endLoction.LocatNo,//目标位置 |
| | | Pallno = pallet.PalletNo,//桶号 |
| | | Crtype = "1",//叫桶 |
| | | WareHouseNo = houseNo//车间编码 |
| | | }; |
| | | //给下车下发任务 |
| | | logTaskEntry.SendDate = DateTime.Now;//发送时间 |
| | | var agvResult = CreateTaskForAgv(task, url, out agvMsg); |
| | | if (agvResult)//成功 |
| | | { |
| | | //请求成功修改任务表相应字段状态 |
| | | logTaskEntry.IsSuccess = 1; |
| | | logTaskEntry.IsSend = 0; |
| | | //logTaskEntry.IsCancel = 0; |
| | | logTaskEntry.BackDate = DateTime.Now; |
| | | logTaskEntry.Status = "1";//正在执行 |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | |
| | | startLoction.Status = "3";//出库中 |
| | | Db.Updateable(startLoction).ExecuteCommand(); |
| | | |
| | | endLoction.Status = "2";//入库中 |
| | | Db.Updateable(endLoction).ExecuteCommand(); |
| | | } |
| | | else//失败 |
| | | { |
| | | logTaskEntry.IsSuccess = 0; |
| | | logTaskEntry.Information = agvMsg; |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | |
| | | } |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | } |
| | | else//失败 |
| | | catch (Exception ex) |
| | | { |
| | | logTaskEntry.IsSuccess = 0; |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | |
| | | //回滚事务 |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //回滚事务 |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | |
| | | /// <param name="taskNo"></param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void ApplyLocatNo(Pallnetmsg model, string url, out string taskNo) |
| | | { |
| | | try |
| | | { |
| | | lock (ApplyLocatLock) |
| | | { |
| | | string taskMsg = ""; |
| | | |
| | | //通过设备号查找到所属设备(区域) |
| | | var deviceInfo = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.DeviceCode.Contains(model.Location)); |
| | | if (deviceInfo == null) |
| | | try |
| | | { |
| | | throw new Exception("设备信息不存在"); |
| | | } |
| | | //申请储位设备所在车间编号 |
| | | var houseNo = deviceInfo.WareHouseNo; |
| | | //设备所在储位信息(起始储位) |
| | | var deviceLocatInfo = new SysStorageLocat(); |
| | | //出入库单据明细ID |
| | | var noticeno = "0"; |
| | | //目标储位信息 |
| | | var loction = new SysStorageLocat(); |
| | | //桶库存信息 |
| | | var palletInfo = new DataStockDetail(); |
| | | string taskMsg = ""; |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | switch (model.Type) |
| | | { |
| | | case "3"://清洗设备申请储位(净桶申请储位) |
| | | { |
| | | //设备放桶储位信息(原始叫桶目标储位) |
| | | var deviceLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1);// Column=1 清洗储位,Column=2 清洗完料储位 |
| | | if (deviceLocatInfo2 == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //查找桶库存信息 |
| | | palletInfo = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == deviceLocatInfo2.WareHouseNo && w.AreaNo == deviceLocatInfo2.AreaNo && w.LocatNo == deviceLocatInfo2.LocatNo).OrderBy(o => o.UpdateTime).First(); |
| | | if (palletInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备上桶的库存信息"); |
| | | } |
| | | //查找该桶有没有正在执行的任务 |
| | | var tasking = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.PalletNo == palletInfo.PalletNo); |
| | | if (tasking != null) |
| | | { |
| | | throw new Exception($"该桶有正在执行的任务,PalletNo:{palletInfo.PalletNo}"); |
| | | } |
| | | //通过设备号查找到所属设备(区域) |
| | | var deviceInfo = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.DeviceCode.Contains(model.Location)); |
| | | if (deviceInfo == null) |
| | | { |
| | | throw new Exception("设备信息不存在"); |
| | | } |
| | | //申请储位设备所在车间编号 |
| | | var houseNo = deviceInfo.WareHouseNo; |
| | | //设备所在储位信息(起始储位) |
| | | var deviceLocatInfo = new SysStorageLocat(); |
| | | //出入库单据明细ID |
| | | var noticeno = "0"; |
| | | //目标储位信息 |
| | | var loction = new SysStorageLocat(); |
| | | //桶库存信息 |
| | | var palletInfo = new DataStockDetail(); |
| | | |
| | | //设备所在储位信息(起始储位) |
| | | deviceLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 2);// Column=1 清洗储位,Column=2 清洗完料储位 |
| | | if (deviceLocatInfo == null) |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | switch (model.Type) |
| | | { |
| | | case "3"://清洗设备申请储位(净桶申请储位) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //查找到该车间净桶区; |
| | | loction = GetLocatModel(houseNo, "0"); |
| | | if (loction == null) |
| | | { |
| | | throw new Exception("该车间净桶区暂无空余储位"); |
| | | } |
| | | //设备放桶储位信息(原始叫桶目标储位) |
| | | var deviceLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1);// Column=1 清洗储位,Column=2 清洗完料储位 |
| | | if (deviceLocatInfo2 == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //查找桶库存信息 |
| | | palletInfo = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == deviceLocatInfo2.WareHouseNo && w.AreaNo == deviceLocatInfo2.AreaNo && w.LocatNo == deviceLocatInfo2.LocatNo).OrderBy(o => o.UpdateTime).First(); |
| | | if (palletInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备上桶的库存信息"); |
| | | } |
| | | //查找该桶有没有正在执行的任务 |
| | | var tasking = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.PalletNo == palletInfo.PalletNo); |
| | | if (tasking != null) |
| | | { |
| | | throw new Exception($"该桶有正在执行的任务,PalletNo:{palletInfo.PalletNo}"); |
| | | } |
| | | |
| | | taskMsg = "清洗设备(净桶)申请储位任务"; |
| | | } |
| | | break; |
| | | case "0"://接料设备申请储位(预混料桶申请储位) |
| | | { |
| | | //设备所在储位信息(起始储位) |
| | | deviceLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo); |
| | | if (deviceLocatInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //查找桶库存信息 |
| | | palletInfo = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == deviceLocatInfo.WareHouseNo && w.AreaNo == deviceLocatInfo.AreaNo && w.LocatNo == deviceLocatInfo.LocatNo).OrderBy(o => o.UpdateTime).First(); |
| | | if (palletInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备上桶的库存信息"); |
| | | } |
| | | palletInfo.LotNo = model.LotNo;//批次号 |
| | | //更新桶库存信息 |
| | | Db.Updateable(palletInfo).ExecuteCommand(); |
| | | //设备所在储位信息(起始储位) |
| | | deviceLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 2);// Column=1 清洗储位,Column=2 清洗完料储位 |
| | | if (deviceLocatInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //查找到该车间净桶区; |
| | | loction = GetLocatModel(houseNo, "0"); |
| | | if (loction == null) |
| | | { |
| | | throw new Exception("该车间净桶区暂无空余储位"); |
| | | } |
| | | |
| | | //查找该桶有没有正在执行的任务 |
| | | var tasking = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.PalletNo == palletInfo.PalletNo); |
| | | if (tasking != null) |
| | | { |
| | | throw new Exception($"该桶有正在执行的任务,PalletNo:{palletInfo.PalletNo}"); |
| | | taskMsg = "清洗设备(净桶)申请储位任务"; |
| | | } |
| | | |
| | | //判断是否有批次号 |
| | | if (string.IsNullOrWhiteSpace(model.LotNo)) |
| | | { |
| | | throw new Exception("批次号为空!"); |
| | | } |
| | | //查找到该车间预混区 |
| | | loction = GetLocatModel(houseNo, "1"); |
| | | if (loction == null) |
| | | { |
| | | throw new Exception("该车间预混区暂无空余储位"); |
| | | } |
| | | |
| | | |
| | | taskMsg = "接料设备(预混料桶)申请储位任务"; |
| | | } |
| | | break; |
| | | case "1"://混料设备申请储位(半成品桶申请储位) |
| | | { |
| | | //设备所在储位信息(起始储位) |
| | | deviceLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo); |
| | | if (deviceLocatInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //查找桶库存信息 |
| | | palletInfo = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == deviceLocatInfo.WareHouseNo && w.AreaNo == deviceLocatInfo.AreaNo && w.LocatNo == deviceLocatInfo.LocatNo).OrderBy(o => o.UpdateTime).First(); |
| | | if (palletInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备上桶的库存信息"); |
| | | } |
| | | //查找该桶有没有正在执行的任务 |
| | | var tasking = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.PalletNo == palletInfo.PalletNo); |
| | | if (tasking != null) |
| | | { |
| | | throw new Exception($"该桶有正在执行的任务,PalletNo:{palletInfo.PalletNo}"); |
| | | } |
| | | |
| | | //判断是否有批次号 |
| | | if (string.IsNullOrWhiteSpace(model.LotNo)) |
| | | { |
| | | throw new Exception("批次号为空!"); |
| | | } |
| | | //校验此批次是否有入库单 |
| | | var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().Where(w => w.IsDel == "0" && w.Status == "0" && w.LotNo == model.LotNo).OrderByDescending(o => o.CreateTime).First(); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("该批次没有对应的入库单明细"); |
| | | } |
| | | noticeno = noticeDetail.Id.ToString(); |
| | | //入库总单 |
| | | var notice = Db.Queryable<BllArrivalNotice>().Where(w => w.IsDel == "0" && w.ASNNo == noticeDetail.ASNNo).First(); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("该批次没有对应的入库单"); |
| | | } |
| | | notice.Status = "1";//正在执行 |
| | | //更新入库单状态 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | |
| | | //查找到该车间半成品区 |
| | | loction = GetLocatModel(houseNo, "2"); |
| | | if (loction == null) |
| | | { |
| | | throw new Exception("该车间半成品区暂无空余储位"); |
| | | } |
| | | |
| | | taskMsg = "接料设备(混料桶)申请储位任务"; |
| | | } |
| | | break; |
| | | case "2"://下料设备申请储位(脏桶申请储位) |
| | | { |
| | | //设备放桶储位信息(原始叫桶目标储位) |
| | | var deviceLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1);// Column=1 投料储位,Column=2 投完料储位 |
| | | if (deviceLocatInfo2 == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //查找桶库存信息 |
| | | palletInfo = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == deviceLocatInfo2.WareHouseNo && w.AreaNo == deviceLocatInfo2.AreaNo && w.LocatNo == deviceLocatInfo2.LocatNo).OrderBy(o => o.UpdateTime).First(); |
| | | if (palletInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备上桶的库存信息"); |
| | | } |
| | | //查找该桶有没有正在执行的任务 |
| | | var tasking = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.PalletNo == palletInfo.PalletNo); |
| | | if (tasking != null) |
| | | { |
| | | throw new Exception($"该桶有正在执行的任务,PalletNo:{palletInfo.PalletNo}"); |
| | | } |
| | | if (houseNo == "M04")//除了喷干车间下料口都是2个储位(投料储位、投完料储位) |
| | | break; |
| | | case "0"://接料设备申请储位(预混料桶申请储位) |
| | | { |
| | | //设备所在储位信息(起始储位) |
| | | deviceLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1); |
| | | deviceLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo); |
| | | if (deviceLocatInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //判断是否有批次号 |
| | | if (string.IsNullOrWhiteSpace(model.LotNo)) |
| | | { |
| | | throw new Exception("批次号为空!"); |
| | | } |
| | | //查找桶库存信息 |
| | | palletInfo = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == deviceLocatInfo.WareHouseNo && w.AreaNo == deviceLocatInfo.AreaNo && w.LocatNo == deviceLocatInfo.LocatNo).OrderBy(o => o.UpdateTime).First(); |
| | | if (palletInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备上桶的库存信息"); |
| | | } |
| | | palletInfo.LotNo = model.LotNo;//批次号 |
| | | //更新桶库存信息 |
| | | Db.Updateable(palletInfo).ExecuteCommand(); |
| | | |
| | | //查找该桶有没有正在执行的任务 |
| | | var tasking = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.PalletNo == palletInfo.PalletNo); |
| | | if (tasking != null) |
| | | { |
| | | throw new Exception($"该桶有正在执行的任务,PalletNo:{palletInfo.PalletNo}"); |
| | | } |
| | | |
| | | //查找到该车间预混区 |
| | | loction = GetLocatModel(houseNo, "1"); |
| | | if (loction == null) |
| | | { |
| | | throw new Exception("该车间预混区暂无空余储位"); |
| | | } |
| | | |
| | | |
| | | taskMsg = "接料设备(预混料桶)申请储位任务"; |
| | | } |
| | | else |
| | | break; |
| | | case "1"://混料设备申请储位(半成品桶申请储位) |
| | | { |
| | | //设备所在储位信息(起始储位) |
| | | deviceLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 2);//Column=1 投料储位,Column=2 投完料储位 |
| | | } |
| | | if (deviceLocatInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | deviceLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo); |
| | | if (deviceLocatInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //查找桶库存信息 |
| | | palletInfo = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == deviceLocatInfo.WareHouseNo && w.AreaNo == deviceLocatInfo.AreaNo && w.LocatNo == deviceLocatInfo.LocatNo).OrderBy(o => o.UpdateTime).First(); |
| | | if (palletInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备上桶的库存信息"); |
| | | } |
| | | //查找该桶有没有正在执行的任务 |
| | | var tasking = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.PalletNo == palletInfo.PalletNo); |
| | | if (tasking != null) |
| | | { |
| | | throw new Exception($"该桶有正在执行的任务,PalletNo:{palletInfo.PalletNo}"); |
| | | } |
| | | |
| | | //判断是否有批次号 |
| | | if (string.IsNullOrWhiteSpace(model.LotNo)) |
| | | { |
| | | throw new Exception("批次号为空!"); |
| | | } |
| | | //大单体车间有个接料混料一体机,这里判断批次为空就再维护下批次 |
| | | if (string.IsNullOrEmpty(palletInfo.LotNo)) |
| | | { |
| | | palletInfo.LotNo = model.LotNo; |
| | | //更新桶库存信息 |
| | | Db.Updateable(palletInfo).ExecuteCommand(); |
| | | } |
| | | |
| | | //校验此批次是否有入库单 |
| | | /*var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().Where(w => w.IsDel == "0" && w.Status == "0" && w.LotNo == model.LotNo).OrderByDescending(o => o.CreateTime).First(); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("该批次没有对应的入库单明细"); |
| | | } |
| | | noticeno = noticeDetail.Id.ToString(); |
| | | //入库总单 |
| | | var notice = Db.Queryable<BllArrivalNotice>().Where(w => w.IsDel == "0" && w.ASNNo == noticeDetail.ASNNo).First(); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("该批次没有对应的入库单"); |
| | | } |
| | | notice.Status = "1";//正在执行 |
| | | //更新入库单状态 |
| | | Db.Updateable(notice).ExecuteCommand();*/ |
| | | |
| | | //查找到该车间半成品区 |
| | | loction = GetLocatModel(houseNo, "2"); |
| | | if (loction == null) |
| | | { |
| | | throw new Exception("该车间半成品区暂无空余储位"); |
| | | } |
| | | |
| | | taskMsg = "接料设备(混料桶)申请储位任务"; |
| | | } |
| | | //查找到该车间脏桶区 |
| | | loction = GetLocatModel(houseNo, "3"); |
| | | if (loction == null) |
| | | break; |
| | | case "2"://下料设备申请储位(脏桶申请储位) |
| | | { |
| | | throw new Exception("该车间脏桶区暂无空余储位"); |
| | | //设备放桶储位信息(原始叫桶目标储位) |
| | | var deviceLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1);// Column=1 投料储位,Column=2 投完料储位 |
| | | if (deviceLocatInfo2 == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //查找桶库存信息 |
| | | palletInfo = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == deviceLocatInfo2.WareHouseNo && w.AreaNo == deviceLocatInfo2.AreaNo && w.LocatNo == deviceLocatInfo2.LocatNo).OrderBy(o => o.UpdateTime).First(); |
| | | if (palletInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备上桶的库存信息"); |
| | | } |
| | | //查找该桶有没有正在执行的任务 |
| | | var tasking = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.PalletNo == palletInfo.PalletNo); |
| | | if (tasking != null) |
| | | { |
| | | throw new Exception($"该桶有正在执行的任务,PalletNo:{palletInfo.PalletNo}"); |
| | | } |
| | | if (houseNo == "M04")//除了喷干车间下料口都是2个储位(投料储位、投完料储位) |
| | | { |
| | | //设备所在储位信息(起始储位) |
| | | deviceLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1); |
| | | } |
| | | else |
| | | { |
| | | //设备所在储位信息(起始储位) |
| | | deviceLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 2);//Column=1 投料储位,Column=2 投完料储位 |
| | | } |
| | | if (deviceLocatInfo == null) |
| | | { |
| | | throw new Exception($"未查询到该设备所在储位信息,Location:{model.Location}"); |
| | | } |
| | | //查找到该车间脏桶区 |
| | | loction = GetLocatModel(houseNo, "3"); |
| | | if (loction == null) |
| | | { |
| | | throw new Exception("该车间脏桶区暂无空余储位"); |
| | | } |
| | | |
| | | taskMsg = "下料设备(脏桶)申请储位任务"; |
| | | } |
| | | break; |
| | | } |
| | | |
| | | taskMsg = "下料设备(脏桶)申请储位任务"; |
| | | } |
| | | break; |
| | | taskNo = new Common().GetMaxNo("TN");//任务号 |
| | | //任务信息 |
| | | var logTaskEntry = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "RCS", |
| | | //IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | SendDate = DateTime.Now, //发送时间 |
| | | //BackDate = DateTime.Now, //返回时间 |
| | | StartLocat = deviceLocatInfo.LocatNo,//起始位置 |
| | | EndLocat = loction.LocatNo,//目标位置 |
| | | PalletNo = palletInfo.PalletNo,//桶号 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | OrderType = "3",//单据类型 0 入库 1 出库 3 移库 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | NoticeDetailNo = int.Parse(noticeno), |
| | | Msg = taskMsg, //关键信息 |
| | | LotNo = palletInfo.LotNo//批次号 |
| | | }; |
| | | var task = new TaskDetial |
| | | { |
| | | Taskno = taskNo,//任务号 |
| | | Startport = model.Location,//deviceLocatInfo.LocatNo,//起始位置 |
| | | Endport = loction.LocatNo,//目标位置 |
| | | Pallno = palletInfo.PalletNo, |
| | | Crtype = "0",//入库 |
| | | WareHouseNo = houseNo |
| | | }; |
| | | string agvMsg = string.Empty; |
| | | //给下车下发任务 |
| | | logTaskEntry.SendDate = DateTime.Now;//发送时间 |
| | | var agvResult = CreateTaskForAgv(task, url, out agvMsg); |
| | | if (agvResult)//成功 |
| | | { |
| | | //请求成功修改任务表相应字段状态 |
| | | logTaskEntry.IsSuccess = 1; |
| | | logTaskEntry.IsSend = 0; |
| | | //logTaskEntry.IsCancel = 0; |
| | | logTaskEntry.BackDate = DateTime.Now; |
| | | logTaskEntry.Status = "1";//正在执行 |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | |
| | | deviceLocatInfo.Status = "3";//出库中 |
| | | Db.Updateable(deviceLocatInfo).ExecuteCommand(); |
| | | |
| | | loction.Status = "2";//入库中 |
| | | Db.Updateable(loction).ExecuteCommand(); |
| | | } |
| | | else//失败 |
| | | { |
| | | logTaskEntry.IsSuccess = 0; |
| | | logTaskEntry.Information = agvMsg; |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | } |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | } |
| | | |
| | | taskNo = new Common().GetMaxNo("TK");//任务号 |
| | | //任务信息 |
| | | var logTaskEntry = new LogTask |
| | | catch (Exception ex) |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "RCS", |
| | | //IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | SendDate = DateTime.Now, //发送时间 |
| | | //BackDate = DateTime.Now, //返回时间 |
| | | StartLocat = deviceLocatInfo.LocatNo,//起始位置 |
| | | EndLocat = loction.LocatNo,//目标位置 |
| | | PalletNo = palletInfo.PalletNo,//桶号 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | OrderType = "3",//单据类型 0 入库 1 出库 3 移库 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | NoticeDetailNo = int.Parse(noticeno), |
| | | Msg = taskMsg, //关键信息 |
| | | }; |
| | | var task = new TaskDetial |
| | | { |
| | | Taskno = taskNo,//任务号 |
| | | Startport = model.Location,//deviceLocatInfo.LocatNo,//起始位置 |
| | | Endport = loction.LocatNo,//目标位置 |
| | | Pallno = palletInfo.PalletNo, |
| | | Crtype = "0",//入库 |
| | | WareHouseNo = houseNo |
| | | }; |
| | | //给下车下发任务 |
| | | logTaskEntry.SendDate = DateTime.Now;//发送时间 |
| | | var agvResult = CreateTaskForAgv(task, url); |
| | | if (agvResult)//成功 |
| | | { |
| | | //请求成功修改任务表相应字段状态 |
| | | logTaskEntry.IsSuccess = 1; |
| | | logTaskEntry.IsSend = 0; |
| | | //logTaskEntry.IsCancel = 0; |
| | | logTaskEntry.BackDate = DateTime.Now; |
| | | logTaskEntry.Status = "1";//正在执行 |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | |
| | | deviceLocatInfo.Status = "3";//出库中 |
| | | Db.Updateable(deviceLocatInfo).ExecuteCommand(); |
| | | |
| | | loction.Status = "2";//入库中 |
| | | Db.Updateable(loction).ExecuteCommand(); |
| | | //回滚事务 |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | else//失败 |
| | | { |
| | | logTaskEntry.IsSuccess = 0; |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | } |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //回滚事务 |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | |
| | | //查找储位 |
| | | var loctionModel = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" && w.WareHouseNo == houseNo && areaNoList.Contains(w.AreaNo)) |
| | | .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First(); |
| | | if (loctionModel == null) |
| | | { |
| | | throw new Exception("该车间净桶区暂无空余储位"); |
| | | } |
| | | //if (loctionModel == null) |
| | | //{ |
| | | // throw new Exception("该车间净桶区暂无空余储位"); |
| | | //} |
| | | return loctionModel; |
| | | } |
| | | catch (Exception ex) |
| | |
| | | Crtype = "2", |
| | | }; |
| | | string taskNo = ""; |
| | | CreateTaskForAgv(ztask, url); |
| | | string agvMsg = string.Empty; |
| | | CreateTaskForAgv(ztask, url, out agvMsg); |
| | | |
| | | statrtLocat.Status = "3";//出库中 |
| | | //修改起始储位状态 |
| | |
| | | Crtype = "1", |
| | | }; |
| | | string taskNo = ""; |
| | | CreateTaskForAgv(task,url); |
| | | string agvMsg = string.Empty; |
| | | CreateTaskForAgv(task, url, out agvMsg); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | Pallno = logTaskEntry.PalletNo, |
| | | Crtype = logTaskEntry.Type, |
| | | }; |
| | | string agvMsg = string.Empty; |
| | | //给下车下发任务 |
| | | logTaskEntry.SendDate = DateTime.Now;//发送时间 |
| | | var agvResult = CreateTaskForAgv(task, url); |
| | | var agvResult = CreateTaskForAgv(task, url, out agvMsg); |
| | | if (agvResult)//成功 |
| | | { |
| | | //请求成功修改任务表相应字段状态 |
| | |
| | | else//失败 |
| | | { |
| | | logTaskEntry.IsSuccess = 0; |
| | | logTaskEntry.Information = agvMsg; |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | } |
| | | |
| | |
| | | /// </summary> |
| | | /// <param name="req"></param> |
| | | /// <returns></returns> |
| | | public bool CreateTaskForAgv(TaskDetial taskDetial, string url) |
| | | public bool CreateTaskForAgv(TaskDetial taskDetial, string url, out string agvMsg, string priority=null) |
| | | { |
| | | bool result = false; |
| | | |
| | |
| | | agvTask.positionCodePath = pahtList;//小车路径 |
| | | agvTask.podCode = ""; |
| | | agvTask.userCallCode = "";//taskDetial.Endport;//目标位置 |
| | | agvTask.priority = priority;//优先级 |
| | | //判断容器类型 |
| | | if (taskDetial.WareHouseNo == "M04")//喷干车间 |
| | | { |
| | |
| | | if (agvModel.Code == "0") |
| | | { |
| | | result = true;//给下车下发任务成功 |
| | | |
| | | agvMsg = ""; |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | var logStr = $@".\log\AGV\AGV{logMsg}" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | LogFile.SaveLogToFile($"AGV{logMsg}异常:( {agvModel.Message} ),", logStr); |
| | | |
| | | agvMsg = agvModel.Message; |
| | | } |
| | | return result; |
| | | #endregion |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 分配桶后判断该桶外侧储位是否需要移库 |
| | | /// </summary> |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="url"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | private bool YikuTask(string palletNo,string url) |
| | | { |
| | | try |
| | | { |
| | | //分配桶的库存信息 |
| | | var palletInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo); |
| | | if (palletInfo == null) |
| | | { |
| | | throw new Exception("未查询到分配桶的库存信息"); |
| | | } |
| | | //判断分配的桶有没有正在执行的任务(移库中) |
| | | var taskIng= Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "0" || w.Status == "1") && w.PalletNo == palletNo); |
| | | if (taskIng != null) |
| | | { |
| | | throw new Exception($"分配的桶{palletNo}有正在执行的任务,请稍后再试"); |
| | | } |
| | | //分配桶的储位信息 |
| | | var locatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletInfo.LocatNo); |
| | | if (locatInfo == null) |
| | | { |
| | | throw new Exception("未查询到分配桶所在的储位信息"); |
| | | } |
| | | |
| | | //判断该储位是否是内侧储位 |
| | | if (!string.IsNullOrEmpty(locatInfo.AisleOne)) |
| | | { |
| | | //判断外侧储位是否有桶 |
| | | var palletInfoYi = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == locatInfo.AisleOne); |
| | | if (palletInfoYi != null) |
| | | { |
| | | //判断要移库的桶是否被分配 |
| | | if (palletInfoYi.Status != "0") |
| | | { |
| | | throw new Exception("要移库的桶已被分配,请稍后再试"); |
| | | } |
| | | //判断要移库的桶是否有正在执行的任务 |
| | | var taskInfo = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "0" || w.Status == "1") && w.PalletNo == palletInfoYi.PalletNo); |
| | | if (taskInfo != null) |
| | | { |
| | | throw new Exception("要移库的桶有正在执行的任务,请稍后再试"); |
| | | } |
| | | #region#给要移库的桶分配新储位 |
| | | var locatInfoNew = new SysStorageLocat(); |
| | | //优先分配内侧储位 |
| | | var locatListNei = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && !string.IsNullOrEmpty(w.AisleOne) && w.WareHouseNo == palletInfoYi.WareHouseNo && w.AreaNo == palletInfoYi.AreaNo).ToList(); |
| | | foreach (var item in locatListNei) |
| | | { |
| | | //判断该内侧储位的外侧储位是否有桶 |
| | | var detailWai = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == item.AisleOne); |
| | | if (detailWai != null) |
| | | { |
| | | continue; |
| | | } |
| | | locatInfoNew = item; |
| | | break; |
| | | } |
| | | if (locatInfoNew == null) |
| | | { |
| | | //没有内侧储位,再查找外侧储位 |
| | | var locatListWai = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && string.IsNullOrEmpty(w.AisleOne) && w.WareHouseNo == palletInfoYi.WareHouseNo && w.AreaNo == palletInfoYi.AreaNo).OrderBy(o => o.Row).ToList(); |
| | | foreach (var item in locatListWai) |
| | | { |
| | | //判断该储位的内侧储位是否有正在执行的任务 |
| | | var locatItemNei = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.AisleOne == item.LocatNo); |
| | | if (locatItemNei != null && locatItemNei.Status != "0") |
| | | { |
| | | continue; |
| | | } |
| | | locatInfoNew = item; |
| | | break; |
| | | } |
| | | } |
| | | if (locatInfoNew == null) |
| | | { |
| | | throw new Exception("没有空余的空储位进行移库"); |
| | | } |
| | | #endregion |
| | | |
| | | //给下车下发移库任务 |
| | | var taskNo = new Common().GetMaxNo("TN");//任务号 |
| | | //任务信息 |
| | | var logTaskEntry = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "RCS", |
| | | //IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | SendDate = DateTime.Now, //发送时间 |
| | | //BackDate = DateTime.Now, //返回时间 |
| | | StartLocat = palletInfoYi.LocatNo,//起始位置 |
| | | EndLocat = locatInfoNew.LocatNo,//目标位置 |
| | | PalletNo = palletInfoYi.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | OrderType = "3",//单据类型 0 入库 1 出库 3移库 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | NoticeDetailNo = 0, |
| | | Msg = $"将桶{palletInfoYi.PalletNo}从{palletInfoYi.LocatNo}移到{locatInfoNew.LocatNo}", //关键信息 |
| | | LotNo = ""//批次号 |
| | | }; |
| | | |
| | | //组织下发小车任务信息 |
| | | var task = new TaskDetial |
| | | { |
| | | Taskno = taskNo,//任务号 |
| | | Startport = palletInfoYi.LocatNo,//起始位置 |
| | | Endport = locatInfoNew.LocatNo,//endLoction.LocatNo,//目标位置 |
| | | Pallno = palletInfoYi.PalletNo,//桶号 |
| | | Crtype = "1",//叫桶 |
| | | WareHouseNo = palletInfoYi.WareHouseNo//车间编码 |
| | | }; |
| | | string agvMsg = string.Empty; |
| | | //给下车下发任务 |
| | | logTaskEntry.SendDate = DateTime.Now;//发送时间 |
| | | var agvResult = CreateTaskForAgv(task, url, out agvMsg, "70"); |
| | | if (agvResult)//成功 |
| | | { |
| | | //请求成功修改任务表相应字段状态 |
| | | logTaskEntry.IsSuccess = 1; |
| | | logTaskEntry.IsSend = 0; |
| | | //logTaskEntry.IsCancel = 0; |
| | | logTaskEntry.BackDate = DateTime.Now; |
| | | logTaskEntry.Status = "1";//正在执行 |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | |
| | | |
| | | locatInfo.Status = "5";//移出中 |
| | | Db.Updateable(locatInfo).ExecuteCommand(); |
| | | |
| | | locatInfoNew.Status = "4";//移入中 |
| | | Db.Updateable(locatInfoNew).ExecuteCommand(); |
| | | } |
| | | else//失败 |
| | | { |
| | | logTaskEntry.IsSuccess = 0; |
| | | logTaskEntry.Information = agvMsg; |
| | | Db.Insertable(logTaskEntry).ExecuteCommand(); |
| | | |
| | | throw new Exception($"给小车下发移库任务失败,桶号:{palletInfoYi.PalletNo}"); |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | } |
| | | } |