HTML/views/HouseWithinSetting/CRLogTask.html
@@ -682,15 +682,14 @@ layer.confirm('确定完成选中的出库任务?', function (index) { var param = { taskNo: data.TaskNo, TaskStatus:"2", TaskType:data.Type }; var postUrl="/BllCheck/FinishCheckTask" if(data.OrderType=='3'){ postUrl='/BllCheck/FinishMoveTask' } sendData(IP + postUrl, param, 'post', function (res) { sendData(IP + "/DownApi/ReceiveRenGongSignal", param, 'post', function (res) { console.log(res); if (res.code == 0) { //成功 layer.msg(res.msg, { if (res.Success == "0") { //成功 layer.msg(res.Message, { icon: 1, time: 1000 //2秒关闭(如果不配置,默认是3秒) }, function () { @@ -701,7 +700,7 @@ }); }); } else { //不成功 layer.msg(res.msg, { layer.msg(res.Message, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { }); HTML/views/QualityControl/InspectionRequest.html
@@ -149,10 +149,8 @@ <div class="layui-input-inline" style="width: 220px;"> <select name="PickingArea" id="PickingArea" lay-search> <option value=""></option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="B020101">B020101</option> <option value="B050101">B050101</option> </select> </div> </div> Pda/View/AsnSetting/requestRuku.html
@@ -88,7 +88,17 @@ autocomplete="off" class="layui-input"> </div> </div> <div id="" class="layui-form-item layout-dropdownlist"> <label class="layui-form-label" lang>层数:</label> <div class="layui-input-block" id="cengDiv"> <select id="ceng" lay-filter="cengSelect" lay-search> <option value=""></option> <option value="1">1层</option> <option value="2">2层</option> </select> <img src="/assets/down_arraw.png"> </div> </div> <!-- <table class="layout-tbl-input" border="" cellspacing="" cellpadding=""> <tr> <td colspan="2"> @@ -195,6 +205,7 @@ } //获取托盘上架信息 sendData(IP + "/PdaAsn/IsEnablePalletNo", param1, 'post', function (res) { if (res.code == 0) { //成功 } else { //不成功 @@ -204,7 +215,7 @@ }, function () { }); return //return } }); } @@ -220,6 +231,7 @@ } var param = { PalletNo: $("#PalletNo").val(), Ceng: $("#ceng").val(), HouseNo:"W02" } sendData(IP + "/DownApi/RequestLocation", param, 'post', function (res) { Pda/View/SoSetting/ExNoticeOut.html
@@ -105,6 +105,13 @@ <div class="layui-input-block"> <select id="endSelect" lay-filter="endSelect" lay-search> <option value=""></option> <option value="B020101">一楼-1</option> <option value="B020102">一楼-2</option> <option value="B020103">一楼-3</option> <option value="B020104">一楼-4</option> <option value="B050101">二楼-1</option> <option value="B050102">二楼-2</option> <option value="B050103">二楼-3</option> </select> <img src="/assets/down_arraw.png"> </div> Pda/js/public.js
@@ -18,19 +18,19 @@ if (!$.cookie('token')) { callbackFun("登录人信息已失效"); try { parent.window.location.href = '/views/Login.html'; parent.window.location.href = '/View/login.html'; } catch (error) { window.location.href = '/views/Login.html'; window.location.href = '/View/login.html'; } return; } if (isTokenExpired($.cookie('token'))) { try { parent.window.location.href = '/views/Login.html'; parent.window.location.href = '/View/login.html'; } catch (error) { window.location.href = '/views/Login.html'; window.location.href = '/View/login.html'; } return; } @@ -68,19 +68,19 @@ if (!$.cookie('token')) { callbackFun("登录人信息已失效"); try { parent.window.location.href = '/view/Login.html'; parent.window.location.href = '/View/login.html'; } catch (error) { window.location.href = '/view/Login.html'; window.location.href = '/View/login.html'; } return; } if (isTokenExpired($.cookie('token'))) { try { parent.window.location.href = '/view/Login.html'; parent.window.location.href = '/View/login.html'; } catch (error) { window.location.href = '/view/Login.html'; window.location.href = '/View/login.html'; } return; } Wms/Model/InterFaceModel/AsnModels.cs
@@ -77,6 +77,7 @@ public string PalletNo { get; set; } public string HouseNo { get; set; } public string RoadwayNo { get; set; } public string Ceng { get; set; } } Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -800,6 +800,666 @@ } } //取样出库拣货(标签) public async Task SampleSetPick(string qcNo, string palletNo, string boxNo, string boxNo3, string pickQty, int userId) { try { #region 判断 if (string.IsNullOrWhiteSpace(qcNo)) { throw Oops.Bah("请验单据不能为空"); } if (string.IsNullOrWhiteSpace(palletNo)) { throw Oops.Bah("托盘号不能为空"); } var type = await GetSampleType2(palletNo); if (type != "0") { throw Oops.Bah("当前托盘请在数量页签取样"); } if (string.IsNullOrEmpty(boxNo)) { throw Oops.Bah("外箱条码不能为空"); } //if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty) && int.Parse(pickQty) > 0) //{ // throw new Exception("追溯条码和拣货数量不能同时输入"); //} //请验单 var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); if (inspecd == null) { throw Oops.Bah("未查询到请验单信息"); } if (inspecd.Status == "0" || inspecd.Status == "3") { throw Oops.Bah("请验单状态错误,请核实"); } //库存明细信息 var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (stockDetail == null) { throw Oops.Bah("未在库存中查询出当前托盘信息"); } // 判断托盘是否在库内 if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) { var wareHouseData = await Db.Queryable<SysWareHouse>().FirstAsync(m => m.IsDel == "0" && m.WareHouseNo == stockDetail.WareHouseNo); if (wareHouseData.Type != "2") { throw Oops.Bah("当前托盘不是库外托盘,请核实"); } } //箱支信息 var boxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync(); //库存总表 var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (stock == null) { throw Oops.Bah("未查询出库存总信息"); } //入库单 var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); if (notice == null) { throw Oops.Bah("未查询到入库单信息"); } #endregion //取样明细记录表 var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync(); var isAddSampld = false; var PickType = ""; //0数量拣货 1 箱支拣货 var EditboxInfo = new DataBoxInfo(); var EditboxInfoList = new List<DataBoxInfo>(); #region 判断拣货方式 散支 数量 if (!string.IsNullOrEmpty(pickQty) && decimal.Parse(pickQty) > 0) //数量拣货 { PickType = "0"; if (!string.IsNullOrWhiteSpace(boxNo3)) //支中拣数量 { if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0) { throw Oops.Bah("未查询到支码信息"); } if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1) { throw Oops.Bah("支码信息数据信息错误,请核实"); } EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3); if (EditboxInfo.Qty < decimal.Parse(pickQty)) { throw Oops.Bah("拣货数量不能大于箱内数量"); } isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0; } else //箱中拣数量 { if (boxInfoList.Count == 0) { throw Oops.Bah("未在托盘上查询到箱码信息,请核实"); } if (boxInfoList.Count > 1) { throw Oops.Bah("箱码数据信息错误,请核实"); } if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) { throw Oops.Bah("当前箱码中含有支码,请输入支码信息取样"); } EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo); if (EditboxInfo.Qty < decimal.Parse(pickQty)) { throw Oops.Bah("拣货数量不能大于箱内数量"); } isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0; } if (sampld.Sum(m => m.CompleteQty) + decimal.Parse(pickQty) > inspecd.SamplingQty) { throw Oops.Bah("取样总拣货数量大于请验单取样数量"); } //判断箱中是否含有支码,有:不让拣数量 if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < decimal.Parse(pickQty)) { throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); } } else //箱支拣货 { PickType = "1"; var qty = 0m; if (!string.IsNullOrWhiteSpace(boxNo3)) //拣支 { if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0) { throw Oops.Bah("未查询到支码信息"); } if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1) { throw Oops.Bah("支码数据信息错误,请核实"); } EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3).ToListAsync(); if (EditboxInfoList.Sum(m => m.Qty) + sampld.Sum(m => m.CompleteQty) > inspecd.SamplingQty) { throw Oops.Bah("取样总拣货数量大于请验单取样数量"); } qty = EditboxInfoList.Sum(m => m.Qty); //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0; } else //拣箱 { if (boxInfoList.Count == 0) { throw Oops.Bah("未在托盘上查询到箱码信息,请核实"); } if (boxInfoList.Count > 1) { throw Oops.Bah("箱码数据信息错误,请核实"); } if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) { throw Oops.Bah("当前箱码中含有支码,请输入支码信息取样"); } EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync(); if (EditboxInfo.Qty < decimal.Parse(pickQty)) { throw Oops.Bah("拣货数量不能大于箱内数量"); } qty = EditboxInfoList.Sum(m => m.Qty); //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0; } if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty) { throw Oops.Bah("取样总拣货数量大于请验单取样数量"); } if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty) { throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); } } #endregion Db.BeginTran(); #region if (PickType == "0") { #region 添加或修改取样明细 var boxInfo = EditboxInfo; //if (isAddSampld) //添加取样明细 //{ var sampleDetail = new BllSamplingDetails() { QcNo = qcNo, ASNNo = inspecd.ASNNo, PalletNo = palletNo, BoxNo = boxInfo.BoxNo, BoxNo2 = boxInfo.BoxNo2, BoxNo3 = boxInfo.BoxNo3, SkuNo = boxInfo.SkuNo, SkuName = boxInfo.SkuName, Standard = boxInfo.Standard, LotNo = boxInfo.LotNo, SupplierLot = boxInfo.SupplierLot, CompleteQty = decimal.Parse(pickQty), CreateTime = DateTime.Now, CreateUser = userId }; Db.Insertable(sampleDetail).ExecuteCommand(); //} //else //{ // var sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo); // if (!string.IsNullOrWhiteSpace(boxNo3)) // { // sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo && m.BoxNo3 == boxInfo.BoxNo3); // } // sampldFirst.CompleteQty += decimal.Parse(pickQty); // sampldFirst.UpdateTime = DateTime.Now; // sampldFirst.UpdateUser = userId; // Db.Updateable(sampldFirst).ExecuteCommand(); //} #endregion #region 修改库存三表 //拆包有效期更改 var unpackWarranty = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo).UnpackWarranty; foreach (var item in boxInfoList) { item.BitBoxMark = "1"; item.InspectMark = "1"; if (unpackWarranty > 0 && boxInfoList.Count(m => m.ProductionTime != null) > 0) { if (item.ProductionTime != null) { var time = DateTime.Parse(item.ProductionTime.ToString()).AddDays((double)unpackWarranty); if (time < item.ExpirationTime) { item.ExpirationTime = time; } } } } Db.Updateable(boxInfoList).ExecuteCommand(); //库存箱码 boxInfo.Qty -= decimal.Parse(pickQty); if (boxInfo.Qty == 0) { Db.Deleteable(boxInfo).ExecuteCommand(); } else { Db.Updateable(boxInfo).ExecuteCommand(); } //库存明细 stockDetail.Qty -= decimal.Parse(pickQty); if (stockDetail.Qty == 0) { Db.Deleteable(stockDetail).ExecuteCommand(); } else { Db.Updateable(stockDetail).ExecuteCommand(); } //库存总表 stock.Qty -= decimal.Parse(pickQty); if (stock.Qty == 0) { Db.Deleteable(stock).ExecuteCommand(); } else { Db.Updateable(stock).ExecuteCommand(); } #endregion #region 修改入库单 //不是上传完毕的修改取样状态 if (notice.Status != "4") { var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (noticeDetail.IsSampling == "0") { noticeDetail.IsSampling = "1"; Db.Updateable(noticeDetail).ExecuteCommand(); } } #endregion #region 修改请验单 inspecd.Status = "2"; inspecd.UpdateTime = DateTime.Now; if (sampld.Sum(m => m.CompleteQty) + decimal.Parse(pickQty) >= inspecd.SamplingQty) { inspecd.Status = "3"; } Db.Updateable(inspecd).ExecuteCommand(); #endregion } else { var sumQty = 0m; foreach (var boxInfo in EditboxInfoList) { #region 添加或修改取样明细 //if (isAddSampld) //添加取样明细 //{ var sampleDetail = new BllSamplingDetails() { QcNo = qcNo, ASNNo = inspecd.ASNNo, PalletNo = palletNo, BoxNo = boxInfo.BoxNo, BoxNo2 = boxInfo.BoxNo2, BoxNo3 = boxInfo.BoxNo3, SkuNo = boxInfo.SkuNo, SkuName = boxInfo.SkuName, Standard = boxInfo.Standard, LotNo = boxInfo.LotNo, SupplierLot = boxInfo.SupplierLot, CompleteQty = boxInfo.Qty, CreateTime = DateTime.Now, CreateUser = userId }; await Db.Insertable(sampleDetail).ExecuteCommandAsync(); //} //else //{ // var sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo); // if (!string.IsNullOrWhiteSpace(boxNo3)) // { // sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo && m.BoxNo3 == boxInfo.BoxNo3); // } // sampldFirst.CompleteQty += boxInfo.Qty; // sampldFirst.UpdateTime = DateTime.Now; // sampldFirst.UpdateUser = userId; // Db.Updateable(sampldFirst).ExecuteCommand(); //} #endregion #region 修改库存三表 //拆包有效期更改 var unpackWarranty = (await Db.Queryable<SysMaterials>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo)).UnpackWarranty; foreach (var item in boxInfoList) { item.BitBoxMark = "1"; item.InspectMark = "1"; if (unpackWarranty > 0 && boxInfoList.Count(m => m.ProductionTime != null) > 0) { if (item.ProductionTime != null) { var time = DateTime.Parse(item.ProductionTime.ToString()).AddDays((double)unpackWarranty); if (time < item.ExpirationTime) { item.ExpirationTime = time; } } } } await Db.Updateable(boxInfoList).ExecuteCommandAsync(); //库存箱码 await Db.Deleteable(boxInfo).ExecuteCommandAsync(); //库存明细 stockDetail.Qty -= boxInfo.Qty; if (stockDetail.Qty == 0) { await Db.Deleteable(stockDetail).ExecuteCommandAsync(); } else { await Db.Updateable(stockDetail).ExecuteCommandAsync(); } //库存总表 stock.Qty -= boxInfo.Qty; if (stock.Qty == 0) { await Db.Deleteable(stock).ExecuteCommandAsync(); } else { await Db.Updateable(stock).ExecuteCommandAsync(); } #endregion #region 修改入库单 //不是上传完毕的修改取样状态 if (notice.Status != "4") { var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (noticeDetail.IsSampling == "0") { noticeDetail.IsSampling = "1"; await Db.Updateable(noticeDetail).ExecuteCommandAsync(); } } #endregion sumQty += boxInfo.Qty; } #region 修改请验单 inspecd.Status = "2"; inspecd.UpdateTime = DateTime.Now; if (sampld.Sum(m => m.CompleteQty) + sumQty >= inspecd.SamplingQty) { inspecd.Status = "3"; } await Db.Updateable(inspecd).ExecuteCommandAsync(); #endregion } #endregion //添加操作日志记录 var k = new OperationSOServer().AddLogOperationSo("PDA模块", "取样拣货", qcNo, "拣货", $"在PDA上对请验单号为:{qcNo}的托盘码为:{palletNo}的拣货操作", userId); Db.CommitTran(); } catch (Exception e) { Db.RollbackTran(); throw e; } } //取样出库拣货(数量) public async Task SampleSetQtyPick(string qcNo, string palletNo, string pickQty, int userId) { try { #region 判断 if (string.IsNullOrWhiteSpace(qcNo)) { throw Oops.Bah("请验单据不能为空"); } if (string.IsNullOrWhiteSpace(palletNo)) { throw Oops.Bah("托盘号不能为空"); } var type = await GetSampleType2(palletNo); if (type != "1") { throw Oops.Bah("当前托盘请在标签页签取样"); } if (string.IsNullOrWhiteSpace(pickQty)) { throw Oops.Bah("拣货数量不能为空"); } if (decimal.Parse(pickQty) <= 0) { throw Oops.Bah("拣货数量不能小于等于0"); } //请验单 var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); if (inspecd == null) { throw Oops.Bah("未查询到请验单信息"); } if (inspecd.Status == "0" || inspecd.Status == "3") { throw Oops.Bah("请验单状态错误,请核实"); } //库存明细信息 var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (stockDetail == null) { throw Oops.Bah("未在库存中查询出当前托盘信息"); } // 判断托盘是否在库内 if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) { var wareHouseData = await Db.Queryable<SysWareHouse>().FirstAsync(m => m.IsDel == "0" && m.WareHouseNo == stockDetail.WareHouseNo); if (wareHouseData.Type != "2") { throw Oops.Bah("当前托盘不是库外托盘,请核实"); } } //库存总表 var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (stock == null) { throw Oops.Bah("未查询出库存总信息"); } //入库单 var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); if (notice == null) { throw Oops.Bah("未查询到入库单信息"); } #endregion //取样明细记录表 var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync(); var qty = decimal.Parse(pickQty); //var isAddSampld = sampld.Count(m => m.PalletNo == palletNo) == 0; #region 判断数量 if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty) { throw Oops.Bah("取样总拣货数量大于请验单取样数量"); } //判断箱中是否含有支码,有:不让拣数量 if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty) { throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); } #endregion #region 添加或修改取样明细 Db.BeginTran(); //if (isAddSampld) //添加取样明细 //{ var sampleDetail = new BllSamplingDetails() { QcNo = qcNo, ASNNo = inspecd.ASNNo, PalletNo = palletNo, SkuNo = stockDetail.SkuNo, SkuName = stockDetail.SkuName, Standard = stockDetail.Standard, LotNo = stockDetail.LotNo, SupplierLot = stockDetail.SupplierLot, CompleteQty = qty, CreateTime = DateTime.Now, CreateUser = userId }; await Db.Insertable(sampleDetail).ExecuteCommandAsync(); //} //else //{ // var sampldFirst = sampld.First(m => m.PalletNo == palletNo); // sampldFirst.CompleteQty += qty; // sampldFirst.UpdateTime = DateTime.Now; // sampldFirst.UpdateUser = userId; // Db.Updateable(sampldFirst).ExecuteCommand(); //} #endregion #region 修改库存三表 //库存明细 stockDetail.Qty -= qty; if (stockDetail.Qty == 0) { await Db.Deleteable(stockDetail).ExecuteCommandAsync(); } else { stockDetail.BitPalletMark = "1"; stockDetail.InspectMark = "1"; await Db.Updateable(stockDetail).ExecuteCommandAsync(); } //库存总表 stock.Qty -= qty; if (stock.Qty == 0) { await Db.Deleteable(stock).ExecuteCommandAsync(); } else { await Db.Updateable(stock).ExecuteCommandAsync(); } #endregion #region 修改入库单 //不是上传完毕的修改取样状态 if (notice.Status != "4") { var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (noticeDetail.IsSampling == "0") { noticeDetail.IsSampling = "1"; await Db.Updateable(noticeDetail).ExecuteCommandAsync(); } } #endregion #region 修改请验单 inspecd.Status = "2"; inspecd.UpdateTime = DateTime.Now; if (sampld.Sum(m => m.CompleteQty) + qty >= inspecd.SamplingQty) { inspecd.Status = "3"; } await Db.Updateable(inspecd).ExecuteCommandAsync(); #endregion //添加操作日志记录 var k = new OperationSOServer().AddLogOperationSo("PDA模块", "取样拣货", qcNo, "拣货", $"在PDA上对请验单号为:{qcNo}的托盘码为:{palletNo}的拣货操作", userId); Db.CommitTran(); } catch (Exception e) { Db.RollbackTran(); throw e; } } #endregion //验证托盘是否存在并是否可出库 @@ -4269,659 +4929,7 @@ return data; } //取样出库拣货(标签) public async Task SampleSetPick(string qcNo, string palletNo, string boxNo, string boxNo3, string pickQty, int userId) { try { #region 判断 if (string.IsNullOrWhiteSpace(qcNo)) { throw Oops.Bah("请验单据不能为空"); } if (string.IsNullOrWhiteSpace(palletNo)) { throw Oops.Bah("托盘号不能为空"); } var type = await GetSampleType2(palletNo); if (type != "0") { throw Oops.Bah("当前托盘请在数量页签取样"); } if (string.IsNullOrEmpty(boxNo)) { throw Oops.Bah("外箱条码不能为空"); } //if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty) && int.Parse(pickQty) > 0) //{ // throw new Exception("追溯条码和拣货数量不能同时输入"); //} //请验单 var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); if (inspecd == null) { throw Oops.Bah("未查询到请验单信息"); } if (inspecd.Status == "0" || inspecd.Status == "3") { throw Oops.Bah("请验单状态错误,请核实"); } //库存明细信息 var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (stockDetail == null) { throw Oops.Bah("未在库存中查询出当前托盘信息"); } if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) { throw Oops.Bah("当前托盘不是库外托盘,请核实"); } //箱支信息 var boxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync(); //库存总表 var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (stock == null) { throw Oops.Bah("未查询出库存总信息"); } //入库单 var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); if (notice == null) { throw Oops.Bah("未查询到入库单信息"); } #endregion //取样明细记录表 var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync(); var isAddSampld = false; var PickType = ""; //0数量拣货 1 箱支拣货 var EditboxInfo = new DataBoxInfo(); var EditboxInfoList = new List<DataBoxInfo>(); #region 判断拣货方式 散支 数量 if (!string.IsNullOrEmpty(pickQty) && decimal.Parse(pickQty) > 0) //数量拣货 { PickType = "0"; if (!string.IsNullOrWhiteSpace(boxNo3)) //支中拣数量 { if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0) { throw Oops.Bah("未查询到支码信息"); } if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1) { throw Oops.Bah("支码信息数据信息错误,请核实"); } EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3); if (EditboxInfo.Qty < decimal.Parse(pickQty)) { throw Oops.Bah("拣货数量不能大于箱内数量"); } isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0; } else //箱中拣数量 { if (boxInfoList.Count == 0) { throw Oops.Bah("未在托盘上查询到箱码信息,请核实"); } if (boxInfoList.Count > 1) { throw Oops.Bah("箱码数据信息错误,请核实"); } if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) { throw Oops.Bah("当前箱码中含有支码,请输入支码信息取样"); } EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo); if (EditboxInfo.Qty < decimal.Parse(pickQty)) { throw Oops.Bah("拣货数量不能大于箱内数量"); } isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0; } if (sampld.Sum(m => m.CompleteQty) + decimal.Parse(pickQty) > inspecd.SamplingQty) { throw Oops.Bah("取样总拣货数量大于请验单取样数量"); } //判断箱中是否含有支码,有:不让拣数量 if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < decimal.Parse(pickQty)) { throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); } } else //箱支拣货 { PickType = "1"; var qty = 0m; if (!string.IsNullOrWhiteSpace(boxNo3)) //拣支 { if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0) { throw Oops.Bah("未查询到支码信息"); } if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1) { throw Oops.Bah("支码数据信息错误,请核实"); } EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3).ToListAsync(); if (EditboxInfoList.Sum(m => m.Qty) + sampld.Sum(m => m.CompleteQty) > inspecd.SamplingQty) { throw Oops.Bah("取样总拣货数量大于请验单取样数量"); } qty = EditboxInfoList.Sum(m => m.Qty); //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0; } else //拣箱 { if (boxInfoList.Count == 0) { throw Oops.Bah("未在托盘上查询到箱码信息,请核实"); } if (boxInfoList.Count > 1) { throw Oops.Bah("箱码数据信息错误,请核实"); } if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) { throw Oops.Bah("当前箱码中含有支码,请输入支码信息取样"); } EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync(); if (EditboxInfo.Qty < decimal.Parse(pickQty)) { throw Oops.Bah("拣货数量不能大于箱内数量"); } qty = EditboxInfoList.Sum(m => m.Qty); //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0; } if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty) { throw Oops.Bah("取样总拣货数量大于请验单取样数量"); } if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty) { throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); } } #endregion Db.BeginTran(); #region if (PickType == "0") { #region 添加或修改取样明细 var boxInfo = EditboxInfo; //if (isAddSampld) //添加取样明细 //{ var sampleDetail = new BllSamplingDetails() { QcNo = qcNo, ASNNo = inspecd.ASNNo, PalletNo = palletNo, BoxNo = boxInfo.BoxNo, BoxNo2 = boxInfo.BoxNo2, BoxNo3 = boxInfo.BoxNo3, SkuNo = boxInfo.SkuNo, SkuName = boxInfo.SkuName, Standard = boxInfo.Standard, LotNo = boxInfo.LotNo, SupplierLot = boxInfo.SupplierLot, CompleteQty = decimal.Parse(pickQty), CreateTime = DateTime.Now, CreateUser = userId }; Db.Insertable(sampleDetail).ExecuteCommand(); //} //else //{ // var sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo); // if (!string.IsNullOrWhiteSpace(boxNo3)) // { // sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo && m.BoxNo3 == boxInfo.BoxNo3); // } // sampldFirst.CompleteQty += decimal.Parse(pickQty); // sampldFirst.UpdateTime = DateTime.Now; // sampldFirst.UpdateUser = userId; // Db.Updateable(sampldFirst).ExecuteCommand(); //} #endregion #region 修改库存三表 //拆包有效期更改 var unpackWarranty = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo).UnpackWarranty; foreach (var item in boxInfoList) { item.BitBoxMark = "1"; item.InspectMark = "1"; if (unpackWarranty > 0 && boxInfoList.Count(m => m.ProductionTime != null) > 0) { if (item.ProductionTime != null) { var time = DateTime.Parse(item.ProductionTime.ToString()).AddDays((double)unpackWarranty); if (time < item.ExpirationTime) { item.ExpirationTime = time; } } } } Db.Updateable(boxInfoList).ExecuteCommand(); //库存箱码 boxInfo.Qty -= decimal.Parse(pickQty); if (boxInfo.Qty == 0) { Db.Deleteable(boxInfo).ExecuteCommand(); } else { Db.Updateable(boxInfo).ExecuteCommand(); } //库存明细 stockDetail.Qty -= decimal.Parse(pickQty); if (stockDetail.Qty == 0) { Db.Deleteable(stockDetail).ExecuteCommand(); } else { Db.Updateable(stockDetail).ExecuteCommand(); } //库存总表 stock.Qty -= decimal.Parse(pickQty); if (stock.Qty == 0) { Db.Deleteable(stock).ExecuteCommand(); } else { Db.Updateable(stock).ExecuteCommand(); } #endregion #region 修改入库单 //不是上传完毕的修改取样状态 if (notice.Status != "4") { var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (noticeDetail.IsSampling == "0") { noticeDetail.IsSampling = "1"; Db.Updateable(noticeDetail).ExecuteCommand(); } } #endregion #region 修改请验单 inspecd.Status = "2"; inspecd.UpdateTime = DateTime.Now; if (sampld.Sum(m => m.CompleteQty) + decimal.Parse(pickQty) >= inspecd.SamplingQty) { inspecd.Status = "3"; } Db.Updateable(inspecd).ExecuteCommand(); #endregion } else { var sumQty = 0m; foreach (var boxInfo in EditboxInfoList) { #region 添加或修改取样明细 //if (isAddSampld) //添加取样明细 //{ var sampleDetail = new BllSamplingDetails() { QcNo = qcNo, ASNNo = inspecd.ASNNo, PalletNo = palletNo, BoxNo = boxInfo.BoxNo, BoxNo2 = boxInfo.BoxNo2, BoxNo3 = boxInfo.BoxNo3, SkuNo = boxInfo.SkuNo, SkuName = boxInfo.SkuName, Standard = boxInfo.Standard, LotNo = boxInfo.LotNo, SupplierLot = boxInfo.SupplierLot, CompleteQty = boxInfo.Qty, CreateTime = DateTime.Now, CreateUser = userId }; await Db.Insertable(sampleDetail).ExecuteCommandAsync(); //} //else //{ // var sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo); // if (!string.IsNullOrWhiteSpace(boxNo3)) // { // sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo && m.BoxNo3 == boxInfo.BoxNo3); // } // sampldFirst.CompleteQty += boxInfo.Qty; // sampldFirst.UpdateTime = DateTime.Now; // sampldFirst.UpdateUser = userId; // Db.Updateable(sampldFirst).ExecuteCommand(); //} #endregion #region 修改库存三表 //拆包有效期更改 var unpackWarranty = (await Db.Queryable<SysMaterials>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo)).UnpackWarranty; foreach (var item in boxInfoList) { item.BitBoxMark = "1"; item.InspectMark = "1"; if (unpackWarranty > 0 && boxInfoList.Count(m => m.ProductionTime != null) > 0) { if (item.ProductionTime != null) { var time = DateTime.Parse(item.ProductionTime.ToString()).AddDays((double)unpackWarranty); if (time < item.ExpirationTime) { item.ExpirationTime = time; } } } } await Db.Updateable(boxInfoList).ExecuteCommandAsync(); //库存箱码 await Db.Deleteable(boxInfo).ExecuteCommandAsync(); //库存明细 stockDetail.Qty -= boxInfo.Qty; if (stockDetail.Qty == 0) { await Db.Deleteable(stockDetail).ExecuteCommandAsync(); } else { await Db.Updateable(stockDetail).ExecuteCommandAsync(); } //库存总表 stock.Qty -= boxInfo.Qty; if (stock.Qty == 0) { await Db.Deleteable(stock).ExecuteCommandAsync(); } else { await Db.Updateable(stock).ExecuteCommandAsync(); } #endregion #region 修改入库单 //不是上传完毕的修改取样状态 if (notice.Status != "4") { var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (noticeDetail.IsSampling == "0") { noticeDetail.IsSampling = "1"; await Db.Updateable(noticeDetail).ExecuteCommandAsync(); } } #endregion sumQty += boxInfo.Qty; } #region 修改请验单 inspecd.Status = "2"; inspecd.UpdateTime = DateTime.Now; if (sampld.Sum(m => m.CompleteQty) + sumQty >= inspecd.SamplingQty) { inspecd.Status = "3"; } await Db.Updateable(inspecd).ExecuteCommandAsync(); #endregion } #endregion //添加操作日志记录 var k = new OperationSOServer().AddLogOperationSo("PDA模块", "取样拣货", qcNo, "拣货", $"在PDA上对请验单号为:{qcNo}的托盘码为:{palletNo}的拣货操作", userId); Db.CommitTran(); } catch (Exception e) { Db.RollbackTran(); throw e; } } //取样出库拣货(数量) public async Task SampleSetQtyPick(string qcNo, string palletNo, string pickQty, int userId) { try { #region 判断 if (string.IsNullOrWhiteSpace(qcNo)) { throw Oops.Bah("请验单据不能为空"); } if (string.IsNullOrWhiteSpace(palletNo)) { throw Oops.Bah("托盘号不能为空"); } var type = await GetSampleType2(palletNo); if (type != "1") { throw Oops.Bah("当前托盘请在标签页签取样"); } if (string.IsNullOrWhiteSpace(pickQty)) { throw Oops.Bah("拣货数量不能为空"); } if (decimal.Parse(pickQty) <= 0) { throw Oops.Bah("拣货数量不能小于等于0"); } //请验单 var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); if (inspecd == null) { throw Oops.Bah("未查询到请验单信息"); } if (inspecd.Status == "0" || inspecd.Status == "3") { throw Oops.Bah("请验单状态错误,请核实"); } //库存明细信息 var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (stockDetail == null) { throw Oops.Bah("未在库存中查询出当前托盘信息"); } // 判断托盘是否在库内 if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) { var wareHouseData = await Db.Queryable<SysWareHouse>().FirstAsync(m => m.IsDel == "0" && m.WareHouseNo == stockDetail.WareHouseNo); if (wareHouseData.Type != "2") { throw Oops.Bah("当前托盘不是库外托盘,请核实"); } } //库存总表 var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (stock == null) { throw Oops.Bah("未查询出库存总信息"); } //入库单 var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); if (notice == null) { throw Oops.Bah("未查询到入库单信息"); } #endregion //取样明细记录表 var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync(); var qty = decimal.Parse(pickQty); //var isAddSampld = sampld.Count(m => m.PalletNo == palletNo) == 0; #region 判断数量 if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty) { throw Oops.Bah("取样总拣货数量大于请验单取样数量"); } //判断箱中是否含有支码,有:不让拣数量 if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty) { throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); } #endregion #region 添加或修改取样明细 Db.BeginTran(); //if (isAddSampld) //添加取样明细 //{ var sampleDetail = new BllSamplingDetails() { QcNo = qcNo, ASNNo = inspecd.ASNNo, PalletNo = palletNo, SkuNo = stockDetail.SkuNo, SkuName = stockDetail.SkuName, Standard = stockDetail.Standard, LotNo = stockDetail.LotNo, SupplierLot = stockDetail.SupplierLot, CompleteQty = qty, CreateTime = DateTime.Now, CreateUser = userId }; await Db.Insertable(sampleDetail).ExecuteCommandAsync(); //} //else //{ // var sampldFirst = sampld.First(m => m.PalletNo == palletNo); // sampldFirst.CompleteQty += qty; // sampldFirst.UpdateTime = DateTime.Now; // sampldFirst.UpdateUser = userId; // Db.Updateable(sampldFirst).ExecuteCommand(); //} #endregion #region 修改库存三表 //库存明细 stockDetail.Qty -= qty; if (stockDetail.Qty == 0) { await Db.Deleteable(stockDetail).ExecuteCommandAsync(); } else { stockDetail.BitPalletMark = "1"; stockDetail.InspectMark = "1"; await Db.Updateable(stockDetail).ExecuteCommandAsync(); } //库存总表 stock.Qty -= qty; if (stock.Qty == 0) { await Db.Deleteable(stock).ExecuteCommandAsync(); } else { await Db.Updateable(stock).ExecuteCommandAsync(); } #endregion #region 修改入库单 //不是上传完毕的修改取样状态 if (notice.Status != "4") { var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); if (noticeDetail.IsSampling == "0") { noticeDetail.IsSampling = "1"; await Db.Updateable(noticeDetail).ExecuteCommandAsync(); } } #endregion #region 修改请验单 inspecd.Status = "2"; inspecd.UpdateTime = DateTime.Now; if (sampld.Sum(m => m.CompleteQty) + qty >= inspecd.SamplingQty) { inspecd.Status = "3"; } await Db.Updateable(inspecd).ExecuteCommandAsync(); #endregion //添加操作日志记录 var k = new OperationSOServer().AddLogOperationSo("PDA模块", "取样拣货", qcNo, "拣货", $"在PDA上对请验单号为:{qcNo}的托盘码为:{palletNo}的拣货操作", userId); Db.CommitTran(); } catch (Exception e) { Db.RollbackTran(); throw e; } } #endregion Wms/WMS.BLL/BllQualityServer/InspectionRequestServer.cs
@@ -358,97 +358,7 @@ var Locats = Db.Queryable<SysStorageLocat>() .Where(m => m.LocatNo == pallet.LocatNo && m.WareHouseNo == pallet.WareHouseNo && m.IsDel == "0").ToList().FirstOrDefault(); if (Locats.Depth == "02") { // 获取外侧储位地址 string locatNo = Locats.LocatNo.Substring(0, 6) + "01"; var Locatwc = Db.Queryable<SysStorageLocat>() .Where(m => m.LocatNo == locatNo && m.WareHouseNo == pallet.WareHouseNo && m.IsDel == "0").ToList().FirstOrDefault(); if (Locatwc.Status == "1") { // 外侧有货物 var Locatwcsku = Db.Queryable<DataStockDetail>() .Where(m => m.LocatNo == locatNo && m.IsDel == "0" && m.WareHouseNo== Locatwc.WareHouseNo).ToList().FirstOrDefault(); // 获取移库地址 var newSlot = com.MoveAddress(locatNo, Locatwc.RoadwayNo, Locatwcsku.SkuNo); var taskNo1 = new Common().GetMaxNo("TK"); var exTask1 = new LogTask(); //出库任务 exTask1.TaskNo = taskNo1; exTask1.Sender = "WMS"; exTask1.Receiver = "WCS"; exTask1.IsSuccess = 0; //是否下发成功 0失败 1成功 exTask1.StartLocat = locatNo; //起始位置 exTask1.PalletNo = Locatwcsku.PalletNo; //托盘码 exTask1.IsSend = 1;//是否可再次下发 exTask1.IsCancel = 1;//是否可取消 exTask1.IsFinish = 1;//是否可完成 exTask1.Status = "0";//任务状态0:等待执行1正在执行2执行完成 exTask1.OrderType = "4"; //0 入库单 1 出库单 2 盘点单 3 移库单 4 取样出库单 OutCommandDto taskModel = new OutCommandDto(); taskModel.TaskNo = com.GetMaxNo("TK"); // 任务号 taskModel.StartRoadway = Locatwc.RoadwayNo; taskModel.PalletNo = Locatwcsku.PalletNo; // 托盘号 taskModel.StartLocate = locatNo; // 起始位置 taskModel.Order = 1; if (newSlot == "") { exTask1.EndLocat = model.Code; //目标位置 exTask1.Type = "1"; //任务类型 0 入库任务 1 出库任务 2 移库任务 exTask1.Msg = Locats.LocatNo +"托盘出库创建的"+locatNo + "托盘的出库任务"; // 没有多余的空储位 taskModel.EndLocate = model.Code; // 出库口 taskModel.EndRoadway = ""; // 目标巷道 taskModel.TaskType = "1";// 任务类型 (出库) taskModel.OutMode = model.Code; //目标地址 // 更新储位地址 Locatwc.Status = "3"; Db.Updateable(Locatwc).ExecuteCommand(); } else { // 获取移库巷道号 var Locatyk = Db.Queryable<SysStorageLocat>() .Where(m => m.LocatNo == newSlot && m.WareHouseNo == pallet.WareHouseNo && m.IsDel == "0").ToList().FirstOrDefault(); exTask1.EndLocat = newSlot; //目标位置 exTask1.Type = "2"; //任务类型 0 入库任务 1 出库任务 2 移库任务 exTask1.Msg = Locats.LocatNo + "托盘出库创建的" + locatNo + "托盘的移库任务"; taskModel.EndLocate = newSlot; // 目标地址 taskModel.EndRoadway = Locatyk.RoadwayNo; // 目标巷道 taskModel.TaskType = "2"; // 任务类型 (移库) taskModel.OutMode = newSlot; // 更新储位地址 Locatwc.Status = "5"; // 移出中 Locatyk.Status = "4"; // 移入中 Db.Updateable(Locatyk).ExecuteCommand(); } Db.Updateable(Locatwc).ExecuteCommand(); // 插入任务日志 Db.Insertable(exTask1).ExecuteCommand(); outWhs.Add(taskModel); } if (Locatwc.Status == "2" || Locatwc.Status == "4") { numberQty = numberQty + pallet.Qty; continue; } } var Locats2 = Db.Queryable<SysStorageLocat>().Where(m => m.LocatNo == model.Code && m.IsDel == "0").ToList().FirstOrDefault(); var taskNo2 = new Common().GetMaxNo("TK"); var exTask2 = new LogTask(); //出库任务 @@ -464,7 +374,7 @@ exTask2.Status = "0";//任务状态0:等待执行1正在执行2执行完成 exTask2.OrderType = "4"; //0 入库单 1 出库单 2 盘点单 3 移库单 4 取样出库单 exTask2.EndLocat = model.Code; //目标位置 exTask2.Type = "1"; //任务类型 0 入库任务 1 出库任务 2 移库任务 exTask2.Type = "2"; //任务类型 0 入库任务 1 出库任务 2 移库任务 exTask2.Msg = pallet.LocatNo + "托盘出库任务"; // 插入任务日志 Db.Insertable(exTask2).ExecuteCommand(); @@ -476,42 +386,46 @@ taskModel1.Order = 1; taskModel1.EndLocate = model.Code; // 目标地址 taskModel1.EndRoadway = ""; // 目标巷道 taskModel1.TaskNo = com.GetMaxNo("TK"); // 任务号 taskModel1.TaskType = "1";// 任务类型 (出库) taskModel1.OutMode = model.Code; taskModel1.TaskNo = taskNo2; // 任务号 taskModel1.TaskType = "2";// 任务类型 (出库) taskModel1.Type = PLCTypeEnum.AGV; // 更新储位状态 Locats.Status = "3"; Locats.Status = "5"; Db.Updateable(Locats).ExecuteCommand(); Locats2.Status = "4"; Db.Updateable(Locats2).ExecuteCommand(); outWhs.Add(taskModel1); } // 向WCS下发出库任务 if (outWhs.Count > 0) { // 正式运行程序放开 var list2 = outWhs.Select(m => m.TaskNo).ToList(); var jsonData = JsonConvert.SerializeObject(outWhs); //string response = ""; string response = ""; try { //var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") //response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); //var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") ////解析返回数据 //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); //if (wcsModel.StatusCode == 0) //{ // //更改任务的发送返回时间// //new TaskServer().EditTaskIssueOk(list2, time1, time2); //} //if (wcsModel.StatusCode == -1) //{ // new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); // throw new Exception(wcsModel.Msg); //} //解析返回数据 var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); if (wcsModel.code == 200) { //更改任务的发送返回时间// new TaskServer().EditTaskIssueOk(list2, time1, time2); } else { new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message); throw new Exception(wcsModel.message); } } catch (Exception ex) { @@ -519,8 +433,6 @@ } } } //添加操作日志记录 var k = new OperationCrServer() .AddLogOperationCr("质量管理", "质检请验", data.QcNo, "出库", $"点击了出库操作;请验单:{data.QcNo}!", userId); Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -4330,12 +4330,12 @@ try { task.Status = "5";//任务状态 //判断起始目标位置都是平库 if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat)) { //task.Status = "5";//任务状态 ////判断起始目标位置都是平库 //if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat)) //{ task.Status = "2"; } //} task.IsSend = 0; task.IsCancel = 0; Wms/WMS.BLL/HttpServer.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using Utility.Tools; using WMS.BLL.Logic; using WMS.BLL.LogServer; using WMS.DAL; @@ -30,10 +31,10 @@ /// </summary> /// <param name="palletNo"></param> /// <param name="houseNo"></param> /// <param name="roadwayNo"></param> /// <param name="ceng"></param> /// <returns></returns> /// <exception cref="Exception"></exception> public OutCommandDto RequestLocation(string palletNo, string houseNo) public OutCommandDto RequestLocation(string palletNo, string houseNo,string ceng) { try { @@ -242,7 +243,7 @@ areaList.Add(item); } locate = allotLocate.GetSuiTableLocate(houseNo, areaList, ""); locate = allotLocate.GetSuiTableLocate(houseNo, areaList, "",ceng); #endregion @@ -1140,9 +1141,8 @@ } } /// <summary> /// 移库任务完成JC34 /// 移库单的 移库任务完成JC34 兼容AGV小车移库 /// </summary> /// <param name="taskNo"></param> /// <param name="userId"></param> @@ -1191,7 +1191,7 @@ if (userId != 0) { //添加操作日志记录 var k = new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); var k = new OperationASNServer().AddLogOperationAsn("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); } foreach (var item in stockDetail) @@ -1245,6 +1245,410 @@ } } /// <summary> /// 出库单的移库任务,JC34 货架托盘下架 /// </summary> /// <param name="taskNo">任务号</param> /// <param name="userId">操作人</param> /// <exception cref="Exception"></exception> public void ExMoveSuccess(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 locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat); if (locate == null) { throw new Exception($"WMS系统中没有该{task.StartLocat}储位对应的信息"); } var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); if (locate2 == null) { throw new Exception($"WMS系统中没有该{task.EndLocat}储位对应的信息"); } //平库中储位集合 var pingKuLocate = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == "W04" && m.IsDel == "0").ToList(); var pingKuList = pingKuLocate.Select(m => m.LocatNo).ToList(); try { //task.Status = "5";//任务状态 ////判断起始目标位置都是平库 //if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat)) //{ task.Status = "2"; //} task.IsSend = 0; task.IsCancel = 0; task.IsFinish = 0; task.FinishDate = DateTime.Now;//完成时间 Db.Updateable(task).ExecuteCommand(); #region 修改储位状态 if (!pingKuList.Contains(task.StartLocat)) { //原储位改为空储位 0 locate.Status = "0"; Db.Updateable(locate).ExecuteCommand(); } //目标储位改为有货物 1 locate2.Status = "1"; Db.Updateable(locate2).ExecuteCommand(); foreach (var item in stockDetail) { item.WareHouseNo = locate2.WareHouseNo; item.AreaNo = locate2.AreaNo; item.RoadwayNo = locate2.RoadwayNo; item.LocatNo = locate2.LocatNo; } Db.Updateable(stockDetail).ExecuteCommand(); #endregion Db.CommitTran(); } catch (Exception ex) { Db.RollbackTran(); throw new Exception(ex.Message); } } catch (Exception ex) { throw new Exception("完成反馈失败:" + ex.Message); } } /// <summary> /// PDA下发出库 /// </summary> /// <param name="soNo"></param> /// <param name="detailId"></param> /// <param name="outMode"></param> /// <param name="userId"></param> /// <param name="url"></param> /// <param name="str"></param> /// <returns></returns> /// <exception cref="Exception"></exception> public List<OutCommandDto> IssueOutHouseLk(string soNo, string detailId,string outMode, int userId, string url, out string str) { try { var outDto1 = new List<OutCommandDto>(); //出库数据的集合(深度为1的储位) //记录错误信息的集合 //1:当前要出库的储位正在移出、2 出库的托盘储位信息错误(在储位表中未查询到)、3储位损坏不能出库、4 要出库的托盘正在入库 var com = new Common(); var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0"); if (notice == null) { throw new Exception($"未找到{soNo}出库单信息"); } if (notice.WareHouseNo != "W02") { throw new Exception("仓库号错误"); } var intDetailId = int.Parse(detailId); if (intDetailId <=0) { throw new Exception("选择的出库单明细参数错误"); } //所有要出库的出库分配信息(未下发的信息和待拣货的信息) var item = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == soNo && a.SODetailNo == intDetailId && a.Status == "0" ); if (item == null) //判断是否有需要下发的出库流水 { throw new Exception("当前出库单据无需要下发的托盘"); } #region 集合 //要出库的明细集合 var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == item.PalletNo).ToList(); //物料编码表 var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0"); //包装表 var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0"); Db.BeginTran(); try { List<LogTask> logTaskList = new List<LogTask>();//此次出库任务集合,为应对同托盘不同物料出库 var i = 0; str = string.Empty; var outLocatelist1 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == "B02" && m.Flag == "0").ToList(); var outLocatelist2 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == "B05" && m.Flag == "0").ToList(); //循环分配的信息生成出库任务 var outModeLocate = outMode; var taskNoStr = ""; // 储位号 var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo; #region 判断 //判断托盘是否在库内 if (string.IsNullOrWhiteSpace(locateNo)) //库外 { //判断托盘是否在入库中 var imBl = com.GetImTask(item.PalletNo); if (imBl != null) { str = "要出库的托盘正在入库"; return outDto1; } //判断是否是已经出过库又回库 if (item.Status == "0") { //如果不在仓库内,当前分配信息直接更新出库完成 item.Status = "2";//状态 item.OutMode = outModeLocate;//出库口 Db.Updateable(item).ExecuteCommand(); var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo); if (noticeDetail != null) //更新出库单据的下发数量 { noticeDetail.FactQty += item.Qty; Db.Updateable(noticeDetail).ExecuteCommand(); } //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo); if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") { var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); if (detailList.Count(m => m.Qty >= m.AllotQty) > 0) { notice.Status = "3"; //变更状态为正在执行 Db.Updateable(notice).ExecuteCommand(); } } str = "要出库的托盘已在库外"; return outDto1; } str = "要出库的托盘正在入库"; return outDto1; } var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//当前出库的储位信息 if (locate == null) { str = "出库的托盘储位信息错误(在储位表中未查询到)"; return outDto1; } //判断储位标志是否为损坏 if (locate.Flag == "2") { str = "储位损坏不能出库"; return outDto1; } #endregion if (locate.Status == "1") //有物品 { #region 添加出库任务 var taskNo = new Common().GetMaxNo("TK"); var exTask = new LogTask //出库任务 { TaskNo = taskNo, Sender = "WMS", Receiver = "WCS", IsSuccess = 0, //是否下发成功 0失败 1成功 StartLocat = locate.LocatNo,//起始位置 EndLocat = outModeLocate,//目标位置 PalletNo = item.PalletNo,//托盘码 IsSend = 1,//是否可再次下发 IsCancel = 1,//是否可取消 IsFinish = 1,//是否可完成 Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 Status = "0",//任务状态0:等待执行1正在执行2执行完成 OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 Msg = "从" + locate.LocatNo + "到" + outModeLocate + "的出库任务", //关键信息 }; Db.Insertable(exTask).ExecuteCommand(); logTaskList.Add(exTask); outDto1.Add(new OutCommandDto() { TaskNo = exTask.TaskNo, // 任务号 TaskType = "1",// 任务类型 (出库)0入 1出 2移 PalletNo = item.PalletNo,//托盘号 StartLocate = locate.LocatNo, // 起始位置 StartRoadway = locate.RoadwayNo,//其实巷道 EndLocate = outModeLocate, // 目标位置 Order = 999, Type = PLCTypeEnum.AGV }); taskNoStr = exTask.TaskNo; #endregion #region 改变数据 if (item.Status == "0")//判断托盘是否下发过 { var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo); if (noticeDetail != null) //更新出库单据的下发数量 { noticeDetail.FactQty += item.Qty; Db.Updateable(noticeDetail).ExecuteCommand(); } //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo); if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") { var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); if (detailList.Count(m => m.Qty >= m.AllotQty) > 0) { notice.Status = "3"; //变更状态为正在执行 Db.Updateable(notice).ExecuteCommand(); } } } locate.Status = "3"; //要出库的储位改变状态 正在出库 Db.Updateable(locate).ExecuteCommand(); var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == outModeLocate && m.IsDel == "0");//当前出库的目标储位信息 locate2.Status = "4"; Db.Updateable(locate2).ExecuteCommand(); item.TaskNo = taskNoStr; // 出库分配信息中更新任务号 item.Status = "1"; // 出库分配信息状态改为正在执行 //item.UnstackingMode = unstackingMode2;//拆垛方式 item.OutMode = outModeLocate;//出库口 //item.LoadingAddre = unstackingMode2 == "0" ? loadingAddre : "";//装车口 Db.Updateable(item).ExecuteCommand(); #endregion } else if (locate.Status == "3") //出库中 { #region 改变数据 //判断是否是已经出过库又回库(状态为待拣货的 1) if (item.Status == "0") { var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo); if (noticeDetail != null) //更新出库单据的下发数量 { noticeDetail.FactQty += item.Qty; Db.Updateable(noticeDetail).ExecuteCommand(); } //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo); if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") { var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); if (detailList.Count(m => m.Qty >= m.AllotQty) > 0) { notice.Status = "3"; //变更状态为正在执行 Db.Updateable(notice).ExecuteCommand(); } } } var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "1" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo); if (taskNo == null) { taskNo = logTaskList.FirstOrDefault(m => m.PalletNo == item.PalletNo);//当前有同托盘不同物料出库 } if (taskNo == null) { throw new Exception($"托盘号:{item.PalletNo},出库异常"); } item.TaskNo = taskNo.TaskNo; item.Status = "1"; // 出库分配信息状态改为正在执行 item.OutMode = item.OutMode;//出库口 //item.UnstackingMode = unstackingMode2;//拆垛模式 Db.Updateable(item).ExecuteCommand(); #endregion } else if (locate.Status == "5") //移出中 { str = "当前要出库的储位正在移出"; return outDto1; } //添加操作日志记录 var k = new OperationSOServer().AddLogOperationSo("PDA模块", "下发出库", soNo, "出库", $"点击出库按钮出库单号为:{soNo}的出库单", userId); Db.CommitTran(); if (outDto1.Count > 0) { // 正式运行程序放开 var list2 = outDto1.Select(m => m.TaskNo).ToList(); var jsonData = JsonConvert.SerializeObject(outDto1); string response = ""; try { var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") //解析返回数据 var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); if (wcsModel.code == 0) { //更改任务的发送返回时间// new TaskServer().EditTaskIssueOk(list2, time1, time2); str = "下发成功"; } else { new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message); throw new Exception(wcsModel.message); } } catch (Exception ex) { throw new Exception(ex.Message); } } return outDto1; } catch (Exception e) { Db.RollbackTran(); throw new Exception(e.Message); } #endregion } catch (Exception e) { throw new Exception(e.Message); } } #region MyRegion Wms/WMS.BLL/Logic/AllotLocation.cs
@@ -292,10 +292,14 @@ /// <param name="areaList">区域集合</param> /// <param name="roadwayNo">巷道号(可空)</param> /// <returns></returns> public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "") public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "",string ceng = "") { try { if (string.IsNullOrWhiteSpace(ceng)) { throw new Exception($"申请货架库位层数不能为空"); } var db = DataContext.Db; /* 1.先判断仓库(立库或者平库) * 2.如果是立库 再判断是否指定巷道号 @@ -334,7 +338,7 @@ //查询该巷道并且标志为正常的的储位 roadwayList.Add(roadway); var locate = GetLocateByRoadways(roadwayList,areaList,true,houseNo); var locate = GetLocateByRoadways(roadwayList,areaList,true,houseNo, ceng); if (locate == null) { throw new Exception($"{roadwayNo}巷道没有合适的空储位"); @@ -346,7 +350,7 @@ { var roadwayList = db.Queryable<SysStorageRoadway>().Where(m => m.WareHouseNo == houseNo && m.Status == "0" && roadList.Contains(m.RoadwayNo)).OrderBy(m => new { m.Priority, m.RoadwayNo }).ToList(); var locate = GetLocateByRoadways(roadwayList,areaList,false, houseNo); var locate = GetLocateByRoadways(roadwayList,areaList,false, houseNo,ceng); if (locate == null) { throw new Exception($"{houseNo}仓库已启用的巷道中没有合适的空储位"); @@ -380,7 +384,7 @@ /// <param name="areaList">区域集合</param> /// <param name="isRoadway">是否指定巷道</param> /// <returns></returns> private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false ,string houseNo = "W02") private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false ,string houseNo = "W02",string ceng = "") { try { @@ -469,7 +473,7 @@ var count = 0; do { locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count); locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count, ceng); if (locate != null) { break; @@ -503,7 +507,7 @@ var count = 0; do { locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count); locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count,ceng); if (locate != null) { break; @@ -531,7 +535,7 @@ var count = 0; do { locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count); locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count,ceng); if (locate != null) { break; @@ -575,7 +579,7 @@ /// <param name="areaList">区域集合</param> /// <param name="locateNoStr">排除的储位集合</param> /// <returns></returns> private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList,List<string> locateNoStr,ref int count) private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList,List<string> locateNoStr,ref int count,string ceng = "") { var db = DataContext.Db; var str = ""; @@ -596,7 +600,11 @@ foreach (var area in areaList) { var sql = $@"select * from SysStorageLocat where IsDel = 0 and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and AreaNo = '{area}' and LocatNo not in({str}) "; var sql = $@"select * from SysStorageLocat where IsDel = 0 and Layer!= '3' and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and AreaNo = '{area}' and LocatNo not in({str}) "; if (!string.IsNullOrWhiteSpace(ceng)) { sql += $"and Layer = '{ceng}' "; } sql += "order by "; sql += topOrBom == 0 ? "Layer desc, " : "Layer, "; sql += leftOrRight == 0 ? "[Column], " : "[Column] desc, "; Wms/WMS.Entity/LogEntity/LogTask.cs
@@ -128,7 +128,7 @@ public int? IsFinish {get;set;} /// <summary> /// Desc:单据类型 0 入库单 1 出库单 2 盘点单 3 移库单 4视觉盘点 /// Desc:单据类型 0 入库单 1 出库单 2 盘点单 3 移库单 4取样出库单 /// Default: /// Nullable:True /// </summary> Wms/WMS.IBLL/IHttpServer.cs
@@ -15,8 +15,9 @@ /// </summary> /// <param name="palletNo"></param> /// <param name="houseNo"></param> /// <param name="ceng"></param> /// <returns></returns> OutCommandDto RequestLocation(string palletNo, string houseNo); OutCommandDto RequestLocation(string palletNo, string houseNo,string ceng); /// <summary> /// 申请巷道(密集库) @@ -56,7 +57,29 @@ /// <param name="userId"></param> void MoveSuccess(string taskNo, int userId); /// <summary> /// 出库单的移库任务完成 /// </summary> /// <param name="taskNo"></param> /// <param name="userId"></param> void ExMoveSuccess(string taskNo, int userId); //---------------------------------------------------------------------------------------------------------- /// <summary> /// PDA下发出库 /// </summary> /// <param name="soNo"></param> /// <param name="detailId"></param> /// <param name="outMode"></param> /// <param name="userId"></param> /// <param name="url"></param> /// <param name="str"></param> /// <returns></returns> List<OutCommandDto> IssueOutHouseLk(string soNo, string detailId, string outMode, int userId, string url, out string str); #endregion Wms/Wms/Controllers/BllSoController.cs
@@ -703,7 +703,7 @@ { try { var type = new List<string>(){"1","4"}; var type = new List<string>(){"1"}; RefAsync<int> count = new RefAsync<int>(); var bolls = await _taskSvc.GetTaskList( type, model.Type,model.Status,model.TaskNo,model.IsSuccess,model.PalletNo,model.Msg,model.Page, model.Limit, count); Wms/Wms/Controllers/DownApiController.cs
@@ -151,6 +151,58 @@ } } /// <summary> /// PDA下发出库 /// </summary> /// <param name="soNo"></param> /// <param name="soDetailId">出库单明细ID</param> /// <param name="outMode">出库地址(平库拣货位)</param> /// <returns></returns> [HttpGet] public IActionResult PDAIssueOut(string soNo, string soDetailId,string outMode) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new HttpReturnModel { Success = "-1", Message = "未获取到当前操作人信息"}); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new HttpReturnModel { Success = "-1", Message = "未获取到当前操作人信息"}); } //验证出库口 if (string.IsNullOrWhiteSpace(outMode)) { return Ok(new HttpReturnModel { Success = "-1", Message = "请选择出库地址" }); } var house = _exNoticeSvc.GetHouseBySo(soNo); if (house == "W01") { //var list = _exNoticeSvc.IssueOutHouseMk(soNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str); return Ok(new HttpReturnModel { Success = "0", Message = "str", Data = "list" }); } else if (house == "W02") { var list = _exNoticeSvc.IssueOutHouseLk(soNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str); return Ok(new HttpReturnModel { Success = "0", Message = str, Data = list}); } else { return Ok(new HttpReturnModel { Success = "-1", Message = "仓库信息错误,请核实单据信息" }); } } catch (Exception e) { return Ok(new HttpReturnModel { Success = "-1", Message = e.Message }); } } /// <summary> /// 重新下发出库任务 @@ -301,7 +353,7 @@ try { var list = _http.RequestLocation(model.PalletNo, model.HouseNo); var list = _http.RequestLocation(model.PalletNo, model.HouseNo,model.Ceng); _asnPalletBindSvc.IssueAsnTask(list, _config.WcsHost+ _config.IssueComApiUrl2);//WCS路径 new OperationASNServer().AddLogOperationAsn("PDA模块", "申请入库", model.PalletNo, "添加", $"申请储位托盘号:{model.PalletNo}的成功信息", int.Parse(userId)); @@ -420,7 +472,7 @@ } else if (model.TaskType == "2") { _exNoticeSvc.RelocationSuccess(model.TaskNo, 0); _http.ExMoveSuccess(model.TaskNo, 0); return Ok(new WcsModel { StatusCode = 0, Msg = "移库完成" }); } break; @@ -436,11 +488,19 @@ return Ok(new WcsModel { StatusCode = 0, Msg = "入库完成" }); } break; case "3"://移库完成任务、优化储位 case "3"://移库单 AGV走这 if (model.TaskType == "2") //0:入库 1:出库 2:移库 { //填写移库完成代码 _http.MoveSuccess(model.TaskNo, 0); return Ok(new WcsModel { StatusCode = 0, Msg = "移库完成" }); } break; case "4"://质检出库 if (model.TaskType == "2") //0:入库 1:出库 2:移库 { //填写移库完成代码 _http.ExMoveSuccess(model.TaskNo, 0); return Ok(new WcsModel { StatusCode = 0, Msg = "移库完成" }); } break; @@ -483,6 +543,93 @@ } } /// <summary> /// 接受wcs返回的信号 //指令反馈(是否完成) /// </summary> /// <returns></returns> [HttpPost] public IActionResult ReceiveRenGongSignal(ReceiveWcsSignal model) { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new HttpReturnModel { Success = "1", Message = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new HttpReturnModel { Success = "1", Message = "未获取到当前操作人信息" }); } try { if (string.IsNullOrEmpty(model.TaskNo) || string.IsNullOrEmpty(model.TaskStatus) || string.IsNullOrEmpty(model.TaskType)) { return Ok(new HttpReturnModel { Success = "-1", Message = "参数错误" }); } //接收时间 var orderType = _taskSvc.GetTaskOrderType(model.TaskNo);// 判断单据类型入出移 switch (orderType) { case "0"://入库完成任务 if (model.TaskType == "0")//0:入库 1:出库 2:移库 { _http.ArrivalSuccess2(model.TaskNo, 0); return Ok(new HttpReturnModel { Success = "0", Message = "入库完成" }); } break; case "1"://出库完成任务 if (model.TaskType == "1")//0:入库 1:出库 2:移库 { _exNoticeSvc.ExportSuccess(model.TaskNo, 0); return Ok(new HttpReturnModel { Success = "0", Message = "出库完成" }); } else if (model.TaskType == "2") { _http.ExMoveSuccess(model.TaskNo, 0); return Ok(new HttpReturnModel { Success = "0", Message = "移库完成" }); } break; case "2"://盘库完成任务 if (model.TaskType == "1")//0:入库 1:出库 2:移库 { _crCheckSvc.CheckSuccess(model.TaskNo, 0); return Ok(new HttpReturnModel { Success = "0", Message = "盘点出库完成" }); } else if (model.TaskType == "0")// 盘点出库托盘回库完成 { _http.ArrivalSuccess2(model.TaskNo, 0); return Ok(new HttpReturnModel { Success = "0", Message = "入库完成" }); } break; case "3"://移库单 if (model.TaskType == "2") //0:入库 1:出库 2:移库 { //填写移库完成代码 _http.MoveSuccess(model.TaskNo, 0); return Ok(new HttpReturnModel { Success = "0", Message = "移库完成" }); } break; case "4"://质检出库 if (model.TaskType == "2") //0:入库 1:出库 2:移库 { _http.ExMoveSuccess(model.TaskNo, 0); return Ok(new HttpReturnModel { Success = "0", Message = "移库完成" }); } break; default: return Ok(new HttpReturnModel { Success = "-1", Message = "传递的任务状态为失败状态" }); } return Ok(new HttpReturnModel { Success = "-1", Message = "传递的任务状态为失败状态" }); } catch (Exception ex) { return Ok(new HttpReturnModel { Success = "-1", Message = ex.Message }); } } /// <summary> /// WCS反馈AGV任务取货完成 /// </summary>