HTML/views/SOSetting/ComBoxInfo.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Pda/View/SoSetting/productOut.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Wms/Controllers/PdaSoController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
HTML/views/SOSetting/ComBoxInfo.html
@@ -97,7 +97,8 @@ // 表单需要的变量 var infoOptions = { elem: '#LAY-app-content-list', height: h1, // height: h1, height: 'full-100', id: 'LAY-app-content-list', page: true, limit: pageCnt, Pda/View/SoSetting/productOut.html
@@ -471,14 +471,14 @@ </div> </div> <div class="layui-form-item layout-input" style="display: flex; justify-content: space-between;"> <div style="width: 48%;"> <div style="width: 49%;"> <label class="layui-form-label" style="width: 34%;">出库口:</label> <div class="layui-input-block" style="width: 66%;margin-left:34%;"> <div class="layui-input-block" style="width: 62%;margin-left:34%;"> <input id="outModel2" type="text" lay-verify="" disabled placeholder="" class="layui-input" > <!-- style="border: 0px;" --> </div> </div> <div style="width: 48%;"> <div style="width: 49%;"> <label class="layui-form-label" style="width: 70px;">已拣数量:</label> <div class="layui-input-block" style="width: 120px; margin-left:70px;"> <input id="pickedQty2" type="text" lay-verify="" disabled @@ -519,8 +519,8 @@ </div> <div class="layout-tbl-paging" id=""> <table id="tableBoxList" class="tbl-box-list" border="" cellspacing="" cellpadding=""> <tr id="tableHead"> <table id="tableBoxList2" class="tbl-box-list" border="" cellspacing="" cellpadding=""> <tr id="tableHead2"> <th style="width: 54%;">物料编码</th> <th style="width: 20%;">托内<br>数量</th> <th style="width: 20%;">已拣<br>数量</th> @@ -528,9 +528,9 @@ <!-- <th style="width: 8%;">拣货</th> --> </tr> <tr id="boxCell2" style="display: none;"> <td name="SkuNo2">AG000001</td> <td name="qty2">30</td> <td name="pickedQty2">30</td> <td name="SkuNo">AG000001</td> <td name="Qty">30</td> <td name="pickedQty">30</td> </tr> </table> @@ -600,6 +600,7 @@ //是否整托拣货 var isContinue = "0"; var tableData = null var tableData2 = null var canPickBox = true $("#palletNo").focus();//光标默认选中 @@ -1191,14 +1192,17 @@ synData(IP + "/PdaSo/IsEnableOkPalletNo", param, 'post', function (res) { if (res.code == 0) { //成功 updateBillList2(); if ($('#bar').val() == "") { console.log($('#bar2').val()) if ($('#bar2').val() == "") { console.log(1) clear21(); return; } else { console.log(2) updateSkuLotNoList2(); updateQtyList2(); getBar2(); GetBoxInfo(); GetDataInfo(); } } else { //不成功 @@ -1250,10 +1254,20 @@ if (res.code == 0) { //成功 for (var i = 0; i < res.data.length; i++) { if (i == 0) { $("#skuLotNo2").append('<option value =' + res.data[i].SoDetailId + ' selected>' + res.data[i].SkuName + " - " + res.data[i].LotNo + '</option>'); $("#skuLotNo2").append('<option value =' + res.data[i].SoDetailId + ' selected>' + res.data[i].SkuName); if(res.data[i].LotNo == null) { $("#skuLotNo2").append(" - " + res.data[i].LotNo); } $("#skuLotNo2").append('</option>'); } else { $("#skuLotNo2").append('<option value =' + res.data[i].SoDetailId + '>' + res.data[i].SkuName + " - " + res.data[i].LotNo + '</option>'); $("#skuLotNo2").append('<option value =' + res.data[i].SoDetailId + '>' + res.data[i].SkuName); if(res.data[i].LotNo == null) { $("#skuLotNo2").append(" - " + res.data[i].LotNo); } $("#skuLotNo2").append('</option>'); } } form.render('select'); @@ -1302,7 +1316,7 @@ $('#outModel2').val(res.data.OutModel); $('#standard2').val(res.data.Standard); $('#pickQty2').val(res.data.PickQty); $('#pickQty2').val(res.data.PickQty - res.data.PickedQty); $('#pickedQty2').val(res.data.PickedQty); } else { //不成功 layer.msg(res.msg, { @@ -1315,18 +1329,17 @@ } //获取托盘物料名细 function GetBoxInfo() { function GetDataInfo() { let param2 = { "SoDetailId": $("#skuLotNo2").val(), "PalletNo": $("#palletNo2").val(), "BoxNo": $("#boxNo").val(), "BoxNo3": $("#boxNo3").val(), } synData(IP + "/PdaSo/GetDataComBoxInfo", param2, 'post', function (res) { console.log(param2); synData(IP + "/PdaSo/GetAllotPlnInfo", param2, 'post', function (res) { if (res.code == 0) { tableData = deepCopy(res.data) tableData2 = deepCopy(res.data) refreshTable(tableData) refreshTable2(tableData2) } else { layer.msg(res.msg, { icon: 2, @@ -1336,6 +1349,128 @@ }); } //渲染表格数据 function refreshTable2(list) { //先清空一下信息列表 let trs = $("#tableBoxList2 tr") let len = trs.length //console.log("tr 数量 + " + trs.length) for (i = len - 1; i >= 2; i--) { trs[i].remove(); } console.log(list != null); console.log(list); if (list != null && list.length > 0) { //成功 var arrTrs = new Array() let idx = 0 for (var i in list) { // list[i].BoxCode var tr = $("#boxCell2").eq(0).clone(); tr.appendTo("#tableBoxList2"); // tr.attr('id', list[i].BoxCode) idx++; tr.attr('index', idx) // tr.find("td[name='skuNo']").attr('style', 'max-width:90px;'); // tr.find("td[name='skuName']").attr('style', 'max-width:120px;'); tr.find("td[name='SkuNo']").html(list[i].BoxNo); tr.find("td[name='Qty']").html(list[i].Qty); tr.find("td[name='pickedQty']").html(list[i].PickedQty); tr.show(); arrTrs[i] = tr } setPages(1, list.length) canPickBox = true } else { //不成功 layer.msg("无数据", { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { }); // $("#boxNum").val(0) setPages(1, 0) } } //单拣货(确认按钮) form.on('submit(formPickScatter2)', function (data) { if ($('#bar2').val() == "") { layer.msg("请选择出库单", { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if ($('#skuLotNo2').val() == "") { layer.msg("请选择物料-批次", { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if ($('#palletNo2').val() == "") { layer.msg("请输入托盘码", { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } let pickedQty = parseInt($('#pickedQty2').val()) //已拣数量 let pickQty = parseInt($('#pickQty2').val()) //拣货数量 if (pickQty <= 0) { layer.msg("拣货数量需大于0", { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if (canPickBox == false) { layer.msg("请求未完成,不要重复请求", { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } reqPickScatter2() return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 }); //确认拣货 function reqPickScatter2() { var param = { "SoNo": $("#bar2").val(), "SoDetailId": $("#skuLotNo2").val(), "PalletNo": $('#palletNo2').val(), "PickQty": $('#pickQty2').val(), } sendData(IP + "/PdaSo/SoSetQtyPick", param, 'post', function (res) { //console.log(res); if (res.code == 0) { //成功 layer.msg(res.msg, { icon: 1, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { canPickBox = true//回调 updateQtyList2(); getBar2(); GetDataInfo(); }); } else { //不成功 layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { canPickBox = true;//回调 }); } }); } }) </script> Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -243,7 +243,7 @@ foreach (var demo in list) { var com = comInfo.FirstOrDefault(m => m.IsDel == "0" && m.BoxNo3 == demo.BoxNo); if (com!=null) if (com != null) { demo.PickedQty = com.CompleteQty; } @@ -279,10 +279,62 @@ } //获取库内无箱码的托盘分配信息 public List<OutPdaInfo> GetAllotPlnInfo(string soDetailId, string palletNo) public List<BoxInfo> GetAllotPlnInfo(string soDetailId, string palletNo) { try { #region 判断 //根据id及托盘获取出库单和托盘拣货信息 if (string.IsNullOrWhiteSpace(palletNo)) { throw new Exception("托盘号不能为空"); } //获取对应托盘下是否存在箱码信息 var boxInfo = Db.Queryable<DataBoxInfo>().First(b => b.IsDel == "0" && b.PalletNo == palletNo); if (boxInfo != null) { throw new Exception($"{palletNo}托盘上存在箱码信息,无法在数量拣货进行操作!"); } //出库单明细 var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(a => a.Id == int.Parse(soDetailId) && a.IsDel == "0"); if (noticeDetail == null) { throw new Exception($"未查询到对应出库单明细信息,请核实!"); } //出库单总单 var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == noticeDetail.SONo); if (notice == null) { throw new Exception($"未查询到对应出库单总单信息,请核实!"); } //分配信息 var allot = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.PalletNo == palletNo && a.Status == "2" || a.Status == "3"); if (allot == null) { throw new Exception($"未查询到对应分配信息,请核实!"); } //库存明细 var detail = Db.Queryable<DataStockDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo); if (detail == null) { throw new Exception($"未查询到库存明细信息,请核实!"); } #endregion List<BoxInfo> pdaInfo = new List<BoxInfo>(); BoxInfo info = new BoxInfo() { SkuNo = detail.SkuNo, BoxNo = detail.SkuNo, Qty = (int)allot.Qty, PickedQty = (int)allot.CompleteQty, }; pdaInfo.Add(info); return pdaInfo; } catch (Exception e) @@ -312,7 +364,7 @@ { throw new Exception("托盘码不能为空"); } //出库单 var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); if (notice == null) @@ -413,7 +465,7 @@ Db.Insertable(comList).ExecuteCommand(); //修改出库分配信息 allot.CompleteQty += pickQty; allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; Db.Updateable(allot).ExecuteCommand(); //删除库存明细 Db.Deleteable(stockDetail).ExecuteCommand(); @@ -627,6 +679,193 @@ } } //出库pda拣货 public void SoSetQtyPick(string soNo, string soDetailId, string palletNo, string PickQty, int userId) { Db.BeginTran(); try { #region 判断 if (string.IsNullOrWhiteSpace(soNo)) { throw new Exception("出库单据不能为空"); } //if (string.IsNullOrWhiteSpace(soDetailId)) //{ // throw new Exception("出库物料-批次不能为空"); //} if (string.IsNullOrWhiteSpace(palletNo)) { throw new Exception("托盘码不能为空"); } //出库单 var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); if (notice == null) { throw new Exception("未查询到该出库单的信息"); } if (notice.Status != "3") { throw new Exception("出库单的状态不是正在执行,不能拣货"); } //出库单明细 var noticeDetail = Db.Queryable<BllExportNoticeDetail>() .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); if (noticeDetail == null) { throw new Exception("未查询到该出库单明细的信息"); } //出库分配信息 var allot = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); if (allot == null) { throw new Exception("未查询到该托盘的分配信息"); } //剩余拣货数量(待拣减去已拣) var needQty = allot.Qty - allot.CompleteQty; if (int.Parse(PickQty) > needQty) { throw new Exception("拣货数量不能大于托内剩余待拣数量"); } //库存明细 var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); if (stockDetail == null) { throw new Exception("未查询到该托盘分配的库存明细信息!"); } //库存总表 var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); if (stock == null) { throw new Exception("未查询到该托盘分配的库存信息!"); } #endregion //获取当前托盘拣货明细 var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id); //判读是否存在拣货明细 int isComplete = 0; if (complete != null) { isComplete = 1; } var comList = new List<BllCompleteDetail>(); //判断是否存在拣货明细 if (isComplete == 0) { //添加拣货明细 var completeDetail = new BllCompleteDetail() { SONo = soNo, SODetailNo = int.Parse(soDetailId), ExportAllotId = allot.Id, StockId = allot.StockId, BoxNo = "", BoxNo2 = "", BoxNo3 = "", LotNo = allot.LotNo, LotText = allot.LotText, SupplierLot = allot.SupplierLot, SkuNo = allot.SkuNo, SkuName = allot.SkuName, Standard = allot.Standard, PalletNo = palletNo, CompleteQty = int.Parse(PickQty), CreateUser = userId, CreateTime = Db.GetDate(), }; comList.Add(completeDetail); //添加拣货明细 Db.Insertable(comList).ExecuteCommand(); } else if (isComplete == 1) { complete.CompleteQty += int.Parse(PickQty); complete.UpdateUser = userId; complete.UpdateTime = Db.GetDate(); Db.Updateable(complete).ExecuteCommand(); } //修改出库分配信息 allot.CompleteQty += int.Parse(PickQty); allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; Db.Updateable(allot).ExecuteCommand(); int isDel = 0; //删除或修改库存明细 stockDetail.Qty -= int.Parse(PickQty); stockDetail.LockQty -= int.Parse(PickQty); if (stockDetail.Qty <= 0) { Db.Deleteable(stockDetail).ExecuteCommand(); } else { isDel = 1; Db.Updateable(stockDetail).ExecuteCommand(); } //删除或修改库存 stock.Qty -= int.Parse(PickQty); stock.LockQty -= int.Parse(PickQty); if (stock.Qty <= 0) { Db.Deleteable(stock).ExecuteCommand(); } else { Db.Updateable(stock).ExecuteCommand(); } //改变托盘状态为:未使用 var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); if (pallet == null) { throw new Exception("未在托盘表中查询到托盘信息"); } //判断托盘上物料是否拣货完毕 if (isDel == 0) { pallet.Status = "0"; Db.Updateable(pallet).ExecuteCommand(); } //修改出库单明细拣货数量 noticeDetail.CompleteQty += int.Parse(PickQty); Db.Updateable(noticeDetail).ExecuteCommand(); var num = Db.Queryable<BllExportNoticeDetail>() .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); if (num <= 0) { notice.Status = "4"; //更改为执行完成 } //修改出库单信息 Db.Updateable(notice).ExecuteCommand(); Db.CommitTran(); } catch (Exception e) { Db.RollbackTran(); throw new Exception(e.Message); } } /// <summary> /// 下发空托出库 /// </summary> @@ -635,7 +874,7 @@ /// <param name="url"> </param> /// <returns></returns> /// <exception cref="Exception"></exception> public string IssuePlnOutHouse(OutModePalletVm model, int userId,string url) public string IssuePlnOutHouse(OutModePalletVm model, int userId, string url) { try { @@ -649,7 +888,7 @@ if (stockDetail.Count > 0) { //判断是否大于需要垛数 if (stockDetail.Count< int.Parse(model.Num)) if (stockDetail.Count < int.Parse(model.Num)) { strMsg = "需要垛数大于库存垛数,请重新输入!"; return strMsg; @@ -704,7 +943,7 @@ s.Status = "2"; //2 已分配 //修改库存明细信息 Db.Updateable(s).ExecuteCommand(); #region 分配 //添加分配表信息 @@ -738,7 +977,7 @@ Db.Insertable(allot).ExecuteCommand(); #endregion #region 添加出库任务信息 var taskNo = new Common().GetMaxNo("TK"); @@ -804,7 +1043,7 @@ { //更改任务的发送返回时间// new TaskServer().EditTaskIssueOk(list2, time1, time2); str += "下发成功"; str += "下发成功"; } if (wcsModel.StatusCode == -1) { @@ -820,7 +1059,7 @@ } //添加操作日志记录 var k = new OperationSOServer().AddLogOperationSo("PDA模块", "空托出库", i+"", "下发", $"用PDA下发了 {i} 个空托垛", userId); var k = new OperationSOServer().AddLogOperationSo("PDA模块", "空托出库", i + "", "下发", $"用PDA下发了 {i} 个空托垛", userId); Db.CommitTran(); return ""; @@ -893,7 +1132,7 @@ throw new Exception("库存信息中不存在该托盘信息,请检查!"); } if (result.WareHouseNo!="W02")//W02:零箱库 if (result.WareHouseNo != "W02")//W02:零箱库 { throw new Exception("该托盘未在零箱库,请检查!"); } @@ -901,7 +1140,7 @@ #endregion //获取库存明细信息 var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList(); var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList(); //验证库存明细信息是否存在 if (stockDetail == null) { @@ -990,6 +1229,6 @@ } } } } Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
@@ -63,7 +63,7 @@ /// <param name="soDetailId">出库单明细ID</param> /// <param name="palletNo">托盘号</param> /// <returns></returns> List<OutPdaInfo> GetAllotPlnInfo(string soDetailId,string palletNo); List<BoxInfo> GetAllotPlnInfo(string soDetailId,string palletNo); /// <summary> /// 出库pda拣货 @@ -78,6 +78,16 @@ void SoSetPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, int userId); /// <summary> /// 出库pda拣货 /// </summary> /// <param name="soNo">出库单</param> /// <param name="soDetailId">出库单明细ID</param> /// <param name="palletNo">托盘号</param> /// <param name="PickQty">拣货数量</param> /// <param name="userId">操作人</param> void SoSetQtyPick(string soNo, string soDetailId, string palletNo, string PickQty, int userId); /// <summary> /// 下发空托出库 /// </summary> /// <param name="model">托盘跺数</param> Wms/Wms/Controllers/PdaSoController.cs
@@ -159,7 +159,27 @@ return Ok(new { code = 1, msg = e.Message }); } } /// <summary> /// 获取箱码信息(获取库内无箱码的托盘分配信息) /// </summary> /// <param name="model">BoxNo:箱码号</param> /// <returns></returns> [HttpPost] public IActionResult GetAllotPlnInfo(PdaSoVm model) { try { var models = _pdaSoSvc.GetAllotPlnInfo(model.SoDetailId, model.PalletNo); return Ok(new { code = 0, msg = "箱码信息", data = models }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// <summary> /// 出库pda拣货 @@ -193,6 +213,38 @@ } } /// <summary> /// 出库pda拣货 /// </summary> /// <param name="model">SoDetailId:出库单明细ID、PalletNo:托盘码</param> /// <returns></returns> [HttpPost] public IActionResult SoSetQtyPick(PdaSoVm 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 = "未获取到当前操作人信息" }); } _pdaSoSvc.SoSetQtyPick(model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, int.Parse(userId)); return Ok(new { code = 0, msg = "拣货完成", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// <summary> /// 空托出库