| | |
| | | }} |
| | | {{ GetBtn1(d) }} |
| | | </script> |
| | | |
| | | |
| | | <!-- 任务类型 --> |
| | | <script type="text/html" id="TypeButton"> |
| | | {{# |
| | |
| | | html = `<p>出库</p>`; |
| | | } else if(d.Type=='2') { |
| | | html = `<p>移库</p>`; |
| | | } else { |
| | | |
| | | } |
| | | return html; |
| | | |
| | | }} |
| | | </script> |
| | | |
| | | <!-- 单据类型 --> |
| | | <script type="text/html" id="OrderTypeButton"> |
| | | {{# |
| | | var html = ``; |
| | | if(d.OrderType=='0'){ |
| | | html = `<p>入库单</p>`; |
| | | } else if(d.OrderType=='1') { |
| | | html = `<p>出库单</p>`; |
| | | } else if(d.OrderType=='2') { |
| | | html = `<p>盘点单</p>`; |
| | | } else if(d.OrderType=='3') { |
| | | html = `<p>移库单</p>`; |
| | | } else { |
| | | |
| | | } |
| | |
| | | width: 95, |
| | | align: 'center', |
| | | templet: '#TypeButton', |
| | | }, { |
| | | field: 'OrderType', |
| | | title: '单据类型', |
| | | width: 95, |
| | | align: 'center', |
| | | templet: '#OrderTypeButton', |
| | | }, { |
| | | field: 'IsSuccess', |
| | | title: '是否下发成功', |
| | |
| | | var param = { |
| | | taskNo: data.TaskNo |
| | | }; |
| | | sendData(IP + "/BllCheck/CancelCheckTask", param, 'post', function (res) { |
| | | var postUrl="/BllCheck/CancelCheckTask" |
| | | if(data.OrderType=='3'){ |
| | | postUrl='/BllCheck/CancelMoveTask' |
| | | } |
| | | sendData(IP + postUrl, param, 'post', function (res) { |
| | | console.log(res); |
| | | if (res.code == 0) { //成功 |
| | | layer.msg(res.msg, { |
| | |
| | | var param = { |
| | | taskNo: data.TaskNo, |
| | | }; |
| | | sendData(IP + "/BllCheck/FinishCheckTask", param, 'post', function (res) { |
| | | var postUrl="/BllCheck/FinishCheckTask" |
| | | if(data.OrderType=='3'){ |
| | | postUrl='/BllCheck/FinishMoveTask' |
| | | } |
| | | sendData(IP + postUrl, param, 'post', function (res) { |
| | | console.log(res); |
| | | if (res.code == 0) { //成功 |
| | | layer.msg(res.msg, { |
| | |
| | | form.on('switch(IsLianXu)', function (obj) { |
| | | if (obj.elem.checked) { |
| | | $('#BOX2').attr("style", "display:block") |
| | | $('#zongDiv').attr("style", "height: 285px;") |
| | | $('#zongDiv').attr("style", "height: 315px;") |
| | | isContinue = "1"; |
| | | } else { |
| | | $('#BOX2').attr("style", "display:none") |
| | | $('#zongDiv').attr("style", "height: 255px;") |
| | | $('#zongDiv').attr("style", "height: 285px;") |
| | | isContinue = "0"; |
| | | } |
| | | $('#BOXCODE2').val(""); |
| | |
| | | } |
| | | } |
| | | |
| | | //AGV移库完成 |
| | | public void MoveSuccess(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); |
| | | |
| | | //更改任务 |
| | | task.Status = "2";//任务状态 |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.FinishDate = DateTime.Now;//完成时间 |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | // 更改当前任务中的储位状态(改为0空储位) |
| | | locate.Status = "0"; |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | //更改库存明细 |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.Status = "0";//待分配 |
| | | item.LockQty = 0;//锁定数量改为0 |
| | | item.LocatNo = "";//储位更改(改为空) |
| | | item.WareHouseNo = "";//所属仓库更改(改为空) |
| | | item.RoadwayNo = "";//所属巷道更改(改为空) |
| | | item.AreaNo = "";//所属区域更改(改为空) |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | //更改库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo); |
| | | stock.LockQty -= (decimal)item.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | } |
| | | |
| | | if (userId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); |
| | | } |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception("完成反馈失败:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | //重新下发盘点出库任务 |
| | | public OutCommandDto AgainSendCheckTask(string taskNo, int userId, string url) |
| | | { |
| | |
| | | checkLog.IsDel = "1"; |
| | | Db.Updateable(checkLog).ExecuteCommand(); |
| | | //修改储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat); |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat); |
| | | if (locat == null) |
| | | { |
| | | throw new Exception("未查询到储位信息,请核实!"); |
| | |
| | | } |
| | | } |
| | | |
| | | //取消AGV移库任务 |
| | | public void CancelMoveTask(string taskNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | Db.BeginTran(); |
| | | |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception("未查询到任务信息"); |
| | | } |
| | | //修改任务 |
| | | task.IsSuccess = 0; |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.Status = "4"; |
| | | task.CancelDate = DateTime.Now; |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | |
| | | //修改储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat); |
| | | if (locat == null) |
| | | { |
| | | throw new Exception("未查询到储位信息,请核实!"); |
| | | } |
| | | locat.Status = "1"; //有物品 |
| | | Db.Updateable(locat).ExecuteCommand(); |
| | | |
| | | //修改库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("托盘上物料库存明细信息不存在,请检查!"); |
| | | } |
| | | stockDetail.Status = "0";//待分配 |
| | | stockDetail.LockQty = 0;//锁定数量 |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | |
| | | //修改库存 |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("托盘上物料库存信息不存在,请检查!"); |
| | | } |
| | | stock.LockQty -= (decimal)stockDetail.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | #region 上游系统接口 |
| | | |
| | | //盘点结果返回erp |
| | |
| | | using Model.ModelDto.PdaDto; |
| | | using SqlSugar; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using WMS.Entity.BllCheckEntity; |
| | | using WMS.Entity.BllSoEntity; |
| | | using WMS.Entity.Context; |
| | | using WMS.Entity.DataEntity; |
| | | using WMS.Entity.LogEntity; |
| | | using WMS.Entity.SysEntity; |
| | | using WMS.IBLL.IPdaServer; |
| | | |
| | |
| | | { |
| | | throw new Exception("请选择目标区域或入库口!"); |
| | | } |
| | | if (!string.IsNullOrEmpty(areaNo) && !string.IsNullOrEmpty(ruku)) |
| | | { |
| | | throw new Exception("目标区域和入库口不能同时选择!"); |
| | | } |
| | | string EndLocat = string.Empty;//目标位置 |
| | | if (!string.IsNullOrEmpty(areaNo)) |
| | | { |
| | | EndLocat = areaNo; |
| | | } |
| | | else |
| | | { |
| | | EndLocat = ruku; |
| | | } |
| | | try |
| | | { |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("托盘库存信息不存在,请检查!"); |
| | | throw new Exception("托盘上物料库存明细信息不存在,请检查!"); |
| | | } |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("托盘上物料库存信息不存在,请检查!"); |
| | | } |
| | | if (string.IsNullOrEmpty(stockDetail.LocatNo)) |
| | | { |
| | |
| | | } |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | |
| | | //添加出库任务 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "AGV", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = stockDetail.LocatNo,//起始位置 |
| | | EndLocat = EndLocat,//目标位置 |
| | | PalletNo = palletNo,//托盘码 |
| | | 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(); |
| | | |
| | | //修改库存明细信息 |
| | | stockDetail.WareHouseNo = ""; |
| | | stockDetail.RoadwayNo = ""; |
| | | stockDetail.AreaNo = ""; |
| | | stockDetail.LocatNo = ""; |
| | | |
| | | stockDetail.Status = "4";//移库锁定 |
| | | stockDetail.LockQty = stockDetail.Qty;//锁定库存数量 |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | //修改储位地址状态 |
| | | storageLocat.Status = "0";//空储位 |
| | | //修改库存信息 |
| | | stock.LockQty += (decimal)stockDetail.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | |
| | | //修改储位地址状态 |
| | | storageLocat.Status = "3";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV转运", palletNo, "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId); |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | |
| | | #region 呼叫小车代码 |
| | | |
| | | #endregion |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("托盘库存信息不存在,请检查!"); |
| | | throw new Exception("托盘上物料库存信息不存在,请检查!"); |
| | | } |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("托盘上物料库存信息不存在,请检查!"); |
| | | } |
| | | if (string.IsNullOrEmpty(stockDetail.LocatNo)) |
| | | { |
| | |
| | | { |
| | | throw new Exception("储位信息不存在,请检查!"); |
| | | } |
| | | var storageArea = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.AreaNo == areaNo); |
| | | if (storageArea == null) |
| | | { |
| | | throw new Exception("所选区域信息不存在,请检查!"); |
| | | } |
| | | string EndLocat = string.Empty;//目标位置 |
| | | EndLocat= Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.AreaNo==storageArea.AreaNo && w.Status=="0" &&w.Flag=="0").Select(s=>s.LocatNo).First(); |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | |
| | | //添加出库任务 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "AGV", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = stockDetail.LocatNo,//起始位置 |
| | | EndLocat = EndLocat,//目标位置 |
| | | PalletNo = palletNo,//托盘码 |
| | | 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(); |
| | | |
| | | //修改库存明细信息 |
| | | stockDetail.WareHouseNo = ""; |
| | | stockDetail.RoadwayNo = ""; |
| | | stockDetail.AreaNo = ""; |
| | | stockDetail.LocatNo = ""; |
| | | |
| | | stockDetail.Status = "4";//移库锁定 |
| | | stockDetail.LockQty = stockDetail.Qty;//锁定库存数量 |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | //修改储位地址状态 |
| | | storageLocat.Status = "0";//空储位 |
| | | //修改库存信息 |
| | | stock.LockQty += (decimal)stockDetail.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | |
| | | //修改储位地址状态 |
| | | storageLocat.Status = "3";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV转运", palletNo, "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId); |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | |
| | | #region 呼叫小车代码 |
| | | |
| | | #endregion |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | /// <param name="url">上传路径</param> |
| | | /// <param name="userId">操作人</param> |
| | | bool FinishCr(int id, string url, int userId); |
| | | |
| | | /// <summary> |
| | | /// AGV移库完成 |
| | | /// </summary> |
| | | /// <param name="taskNo"></param> |
| | | /// <param name="userId"></param> |
| | | void MoveSuccess(string taskNo, int userId); |
| | | /// <summary> |
| | | /// 取消AGV移库任务 |
| | | /// </summary> |
| | | /// <param name="taskNo"></param> |
| | | /// <param name="userId"></param> |
| | | void CancelMoveTask(string taskNo, int userId); |
| | | } |
| | | } |
| | |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region AGV转运 |
| | | /// <summary> |
| | | /// AGV移库完成 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult FinishMoveTask(CheckTaskVm model) |
| | | { |
| | | try |
| | | { |
| | | //获取当前登录的用户ID |
| | | var claimsIdentity = this.User.Identity as ClaimsIdentity; |
| | | if (claimsIdentity == null) |
| | | { |
| | | return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); |
| | | } |
| | | var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; |
| | | if (string.IsNullOrWhiteSpace(userId)) |
| | | { |
| | | return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); |
| | | } |
| | | _stockCheckSvc.MoveSuccess(model.taskNo, int.Parse(userId)); |
| | | |
| | | return Ok(new { code = 0, msg = "成功完成任务", data = "" }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 取消AGV移库任务 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult CancelMoveTask(CheckTaskVm model) |
| | | { |
| | | try |
| | | { |
| | | //获取当前登录的用户ID |
| | | var claimsIdentity = this.User.Identity as ClaimsIdentity; |
| | | if (claimsIdentity == null) |
| | | { |
| | | return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); |
| | | } |
| | | var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; |
| | | if (string.IsNullOrWhiteSpace(userId)) |
| | | { |
| | | return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); |
| | | } |
| | | _stockCheckSvc.CancelMoveTask(model.taskNo, int.Parse(userId)); |
| | | |
| | | return Ok(new { code = 0, msg = "成功取消任务", data = "" }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | } |