Merge branch 'master' of http://47.95.120.53:8083/r/JC34WMS
| | |
| | | layer = layui.layer; |
| | | var h1 = GetTableHeight(); |
| | | var boxNo = getQueryString('BoxNo'); |
| | | var SONo = getQueryString('SONo'); |
| | | if (!boxNo) |
| | | { |
| | | boxNo = ""; |
| | |
| | | refreshTable(); |
| | | function refreshTable() { |
| | | var param={ |
| | | SONo: getQueryString('SONo'), |
| | | BoxNo:getQueryString('BoxNo'), |
| | | BoxNo3:$("#BoxNo3").val() |
| | | } |
| | |
| | | field: 'PalletNo', title: '托盘条码', align: 'center', width: 110, |
| | | }, |
| | | { |
| | | field: 'BoxNo2', title: '盒码', align: 'center', width: 220, |
| | | }, |
| | | { |
| | | field: 'BoxNo3', title: '支码', align: 'center', width: 220, |
| | | }, |
| | | { |
| | |
| | | layer.open({ |
| | | type: 2, |
| | | title: '箱支详情信息', |
| | | content: 'ComBoxInfo.html?BoxNo=' + BoxNo, |
| | | content: 'ComBoxInfo.html?BoxNo=' + BoxNo+'&SONo='+data.SONo, |
| | | maxmin: true, |
| | | area: ['80%', '85%'], |
| | | btn: ['关闭'], |
| | |
| | | </a>`; |
| | | } |
| | | |
| | | if( d.Status == '2' || d.Status == '3'){ |
| | | if( (d.Status == '2' || d.Status == '3') && d.Type=='0'){ |
| | | html += `<a class="layui-btn layui-btn-normal layui-btn-xs outClass" lay-event="outKu"> |
| | | <i class="layui-icon layui-icon-ok"></i>出库 |
| | | </a>`; |
| | |
| | | var item = { |
| | | SkuNo: infoOptions.data[i].SkuNo, |
| | | LotNo: infoOptions.data[i].LotNo, |
| | | Qty: parseFloat(infoOptions.data[i].Qty), // 保留4位小数精度 |
| | | Qty: parseFloat(formattedExQty),//parseFloat(infoOptions.data[i].Qty), // 保留4位小数精度 |
| | | IsBale: infoOptions.data[i].IsBale, |
| | | IsBelt: infoOptions.data[i].IsBelt, |
| | | ExQty: parseFloat(formattedExQty), |
| | | //ExQty: parseFloat(formattedExQty), |
| | | |
| | | }; |
| | | DataList.push(item); |
| | |
| | | <div class="layui-input-inline"> |
| | | <select name="PickingArea" id="PickingArea" 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> |
| | | </div> |
| | | </div> |
| | |
| | | var data = obj.data; |
| | | |
| | | if(obj.event === 'outKu'){ |
| | | $("#PickingArea").empty(); |
| | | $("#PickingArea").append('<option value =""></option>'); |
| | | if(data.WareHouseNo=='W02'){ |
| | | $("#PickingArea").append('<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>'); |
| | | }else if(data.WareHouseNo=='W01'){ |
| | | $("#PickingArea").append('<option value="17">17工位</option><option value="18">18工位</option>'); |
| | | } |
| | | form.render('select'); |
| | | |
| | | layer.open({ |
| | | type: 1, |
| | | title: '确认出库口', |
| | |
| | | placeholder="结束时间"> |
| | | </div> |
| | | </div> --> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 60px;">所属仓库</label> |
| | | <div class="layui-input-inline"> |
| | | <select name="WareHouseNo" id="WareHouseNo" lay-filter="getWareHouseNo" lay-search> |
| | | <option value=""></option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 60px;">所属区域</label> |
| | | <div class="layui-input-inline"> |
| | | <select name="AreaNo" id="AreaNo" lay-filter="getAreaNo" lay-search> |
| | | <option value=""></option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | <div class="layui-inline sousuo"> |
| | | <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit |
| | | lay-filter="LAY-app-contlist-search"> |
| | |
| | | var TotalColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码 |
| | | //#endregion |
| | | //获取总量信息 |
| | | function refreshTable(SelectType, SkuNo, SkuName, OwnerNo, OwnerName, LotNo, Status, InspectStatus) { |
| | | function refreshTable(SelectType, SkuNo, SkuName, OwnerNo, OwnerName, LotNo, Status, InspectStatus, WareHouseNo, AreaNo) { |
| | | //#region 自定义表头 |
| | | var colsJson |
| | | var param1 = { |
| | |
| | | LotNo: LotNo, //批次号 |
| | | Status: Status, //库存状态 = $("#Status").val(); |
| | | InspectStatus: InspectStatus, //质检状态 = $("#InspectStatus").val(); |
| | | WareHouseNo:WareHouseNo, //所属仓库 |
| | | AreaNo:AreaNo//所属区域 |
| | | }; |
| | | sendData(IP + "/Statistical/GetInventoryList", param, 'get', function (res) { |
| | | console.log(res) |
| | |
| | | var OwnerName = $("#OwnerName").val(); |
| | | var Status = $("#Status").val(); |
| | | var InspectStatus = $("#InspectStatus").val(); |
| | | refreshTable(SelectType, SkuNo, SkuName, OwnerNo, OwnerName, LotNo, Status, InspectStatus); |
| | | var WareHouseNo = $("#WareHouseNo").val(); |
| | | var AreaNo = $("#AreaNo").val(); |
| | | refreshTable(SelectType, SkuNo, SkuName, OwnerNo, OwnerName, LotNo, Status, InspectStatus, WareHouseNo, AreaNo); |
| | | |
| | | }); |
| | | |
| | |
| | | |
| | | |
| | | }); |
| | | //获取仓库下拉框信息 |
| | | sendData(IP + "/Sys/GetWarehouseDic", {}, 'get', function (res) { |
| | | if (res.code == 0) { //成功 |
| | | for (var i = 0; i < res.data.length; i++) { |
| | | $("#WareHouseNo").append('<option value =' + res.data[i].WareHouseNo + '>' + res.data[i].WareHouseNo + '-' + |
| | | res.data[i].WareHouseName + '</option>'); |
| | | } |
| | | form.render('select'); |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | } |
| | | }); |
| | | |
| | | getAR(""); |
| | | form.on('select(getWareHouseNo)', function (data) { |
| | | console.log(data); |
| | | getAR(data.value); |
| | | }); |
| | | function getAR(val) { |
| | | //获取 区域下拉框 |
| | | sendData(IP + "/Sys/GetStorageAreaByHouseNo?wareHouseNo=" + val, {}, 'get', function (res) { |
| | | $("#AreaNo").empty(); |
| | | $("#AreaNo").append('<option value =""></option>'); |
| | | if (res.code == 0) { //成功 |
| | | for (var i = 0; i < res.data.length; i++) { |
| | | $("#AreaNo").append('<option value =' + res.data[i].AreaNo + '>' + res.data[i].AreaNo + '-' + |
| | | res.data[i].AreaName + '</option>'); |
| | | } |
| | | form.render('select'); |
| | | } else { //不成功 |
| | | layer.msg('获取区域信息失败', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | //回调 |
| | | form.render('select'); |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | }; |
| | | |
| | | //#region 自定义表头 |
| | | //自定义表头 |
| | | active = { |
| | |
| | | </div> |
| | | </td> |
| | | </tr> --> |
| | | <tr> |
| | | <!-- <tr> |
| | | <td> |
| | | <div class="layui-form-item layout-input" style="margin-top: 6px;"> |
| | | <label class="layui-form-label lableWidth">追溯条码:</label> |
| | |
| | | </div> |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | </tr> --> |
| | | <tr class="divPickQty1"> |
| | | <td> |
| | | <div class="layui-form-item layout-input" style="margin-top: 6px;"> |
| | | <label class="layui-form-label lableWidth">拣货数量:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="pickQty1" type="number" placeholder="请输入拣货数量" |
| | | autocomplete="off" class="layui-input" |
| | | oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"> |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | </td> |
| | |
| | | }); |
| | | return; |
| | | } |
| | | if (($('#boxNo3').val() != "" && ($('#pickQty1').val() != "" || $('#pickQty1').val() != 0))) { |
| | | layer.msg("追溯条码和拣货数量不能同时输入!", { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | if ($('#pickQty1').val() != "" && $('#pickQty1').val() > parseInt($('#pickQty').val())) { |
| | | layer.msg("拣货数量不能大于待拣数量!", { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | // if (($('#boxNo3').val() != "" && ($('#pickQty1').val() != "" || $('#pickQty1').val() != 0))) { |
| | | // layer.msg("追溯条码和拣货数量不能同时输入!", { |
| | | // icon: 2, |
| | | // time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | // }); |
| | | // return; |
| | | // } |
| | | // if ($('#pickQty1').val() != "" && $('#pickQty1').val() > parseInt($('#pickQty').val())) { |
| | | // layer.msg("拣货数量不能大于待拣数量!", { |
| | | // icon: 2, |
| | | // time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | // }); |
| | | // return; |
| | | // } |
| | | } |
| | | // let boxQty = parseInt($('#boxQty').val()) |
| | | // let qty = parseInt($('#qty').val()) |
| | |
| | | "SoDetailId": $("#skuLotNo").val(), |
| | | "PalletNo": $('#palletNo').val(), |
| | | "BoxNo": $('#boxNo').val(), |
| | | "BoxNo3": $('#boxNo3').val(), |
| | | //"BoxNo3": $('#boxNo3').val(), |
| | | "PickQty": $('#pickQty1').val() |
| | | } |
| | | sendData(IP + "/PdaSo/SoSetPick", param, 'post', function (res) { |
| | |
| | | return "-1:入库单状态已变更,不可删除!"; |
| | | |
| | | } |
| | | if (asnModel.Origin != "录入" && asnModel.Origin != "采购单") |
| | | { |
| | | return "-1:上游系统下发的单据,不可删除;"; |
| | | } |
| | | //if (asnModel.Origin != "录入" && asnModel.Origin != "采购单") |
| | | //{ |
| | | // return "-1:上游系统下发的单据,不可删除;"; |
| | | //} |
| | | |
| | | // 删除总单 |
| | | var editDateTime = DateTime.Now; |
| | |
| | | { |
| | | throw new Exception("未查询到单据明细信息,请核实"); |
| | | } |
| | | var skuInfo = Db.Queryable<SysMaterials>().First(w => w.IsDel == "0" && w.SkuNo == asnDetail.SkuNo); |
| | | if (skuInfo == null) |
| | | { |
| | | throw new Exception("未查询到物料信息,请核实"); |
| | | } |
| | | if (string.IsNullOrEmpty(skuInfo.PackagNo)) |
| | | { |
| | | throw new Exception("未查询到物料的包装信息,请核实"); |
| | | } |
| | | |
| | | var packInfo = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == asnDetail.PackagNo); |
| | | var packInfo = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo); |
| | | if (packInfo == null) |
| | | { |
| | | throw new Exception("未查询到单据明细中的物料包装信息"); |
| | |
| | | maxBoxCode = maxBoxCode.Substring(0, maxBoxCode.Length-6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0'); |
| | | } |
| | | |
| | | DateTime? storeTime2 = null; |
| | | // 将条码保存到原料条码表 |
| | | var labelModel = new BllBoxInfo() |
| | | { |
| | |
| | | BitBoxMark = bNum > boxQty ? "1" : "0", |
| | | InspectStatus = "0", |
| | | |
| | | ProductionTime = DateTime.Parse(productionTime), |
| | | StoreTime = string.IsNullOrWhiteSpace(storeTime) ? storeTime2 : DateTime.Parse(storeTime ), |
| | | ExpirationTime = DateTime.Parse(expirationTime), |
| | | ProductionTime = null, |
| | | StoreTime = null, |
| | | ExpirationTime = null, |
| | | |
| | | Origin = "WMS生成", |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now, |
| | | }; |
| | | if (!string.IsNullOrEmpty(productionTime)) |
| | | { |
| | | labelModel.ProductionTime = DateTime.Parse(productionTime); |
| | | } |
| | | if (!string.IsNullOrEmpty(storeTime)) |
| | | { |
| | | labelModel.StoreTime = DateTime.Parse(storeTime); |
| | | } |
| | | if (!string.IsNullOrEmpty(expirationTime)) |
| | | { |
| | | labelModel.ExpirationTime = DateTime.Parse(expirationTime); |
| | | } |
| | | |
| | | Db.Insertable(labelModel).ExecuteCommand(); |
| | | modelList.Add(labelModel); |
| | |
| | | BitBoxMark = bNum > boxQty ? "1" : "0", |
| | | InspectStatus = "0", |
| | | |
| | | ProductionTime = DateTime.Parse(productionTime), |
| | | StoreTime = DateTime.Parse(storeTime), |
| | | ExpirationTime = DateTime.Parse(expirationTime), |
| | | ProductionTime = null, |
| | | StoreTime = null, |
| | | ExpirationTime = null, |
| | | |
| | | Origin = "WMS生成", |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now, |
| | | }; |
| | | if (!string.IsNullOrEmpty(productionTime)) |
| | | { |
| | | labelModel.ProductionTime = DateTime.Parse(productionTime); |
| | | } |
| | | if (!string.IsNullOrEmpty(storeTime)) |
| | | { |
| | | labelModel.StoreTime = DateTime.Parse(storeTime); |
| | | } |
| | | if (!string.IsNullOrEmpty(expirationTime)) |
| | | { |
| | | labelModel.ExpirationTime = DateTime.Parse(expirationTime); |
| | | } |
| | | |
| | | Db.Insertable(labelModel).ExecuteCommand(); |
| | | modelList.Add(labelModel); |
| | |
| | | throw new Exception("当前物料及批次与单据无关联,请核实!"); |
| | | } |
| | | //判断托盘是否在库外 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo); |
| | | if (stockDetail != null && !string.IsNullOrEmpty(stockDetail.WareHouseNo)) |
| | | { |
| | | throw new Exception("该托盘已有储位信息,不可组托,请核实!"); |
| | | } |
| | | //var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo); |
| | | //if (stockDetail != null && !string.IsNullOrEmpty(stockDetail.WareHouseNo)) |
| | | //{ |
| | | // throw new Exception("该托盘已有储位信息,不可组托,请核实!"); |
| | | //} |
| | | |
| | | #endregion |
| | | |
| | |
| | | } |
| | | |
| | | // 判断库存明细是否已有此托盘信息 |
| | | var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.ASNDetailNo == bind.ASNDetailNo && m.PalletNo == model.PalletNo); |
| | | var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo && m.LotNo == detail.LotNo && m.SkuNo == detail.SkuNo);// && m.ASNDetailNo == bind.ASNDetailNo |
| | | var sdId1 = 0; |
| | | if (sd1 != null) |
| | | { |
| | | sdId1 = sd1.Id; |
| | | // 库存已存在 更新数据 |
| | | sd1.Qty = bind.Qty; |
| | | sd1.Qty += bind.Qty; |
| | | sd1.CompleteTime = comTime; |
| | | sd1.UpdateUser = userId; |
| | | sd1.UpdateTime = comTime; |
| | |
| | | CreateUser = 0, |
| | | CreateTime = comTime |
| | | }; |
| | | var palletData = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == sd1.PalletNo && !string.IsNullOrEmpty(w.LocatNo)); |
| | | if (palletData != null) |
| | | { |
| | | sd1.WareHouseNo = palletData.WareHouseNo; |
| | | sd1.RoadwayNo = palletData.RoadwayNo; |
| | | sd1.AreaNo = palletData.AreaNo; |
| | | sd1.LocatNo = palletData.LocatNo; |
| | | } |
| | | |
| | | //维护库存明细货主/供应商信息 //0:成品入库,2:中间品入库,4:车间余料入库,6:代储入库,7:寄存入库 |
| | | if (notice.Type == "0" || notice.Type == "2" || notice.Type == "4" || notice.Type == "6" || notice.Type == "7") |
| | |
| | | } |
| | | detail.UpdateUser = userId; |
| | | detail.UpdateTime = comTime; |
| | | if (notice.Type == "4" || notice.Type == "8") |
| | | { |
| | | detail.InspectStatus = "1";//车间退料默认检验合格 |
| | | } |
| | | //更新入库单明细 |
| | | Db.Updateable(detail).ExecuteCommand(); |
| | | |
| | |
| | | #endregion |
| | | |
| | | #region 库存明细 |
| | | if (sd1.Qty <= 0) |
| | | { |
| | | sd1.Qty = bind.Qty; |
| | | } |
| | | //更改库存明细数量 |
| | | Db.Updateable(sd1).Where(m => m.Id == sdId1).ExecuteCommand(); |
| | | #endregion |
| | |
| | | |
| | | } |
| | | } |
| | | else if (notice.Type == "1" || notice.Type == "4") //采购入库 |
| | | else if (notice.Type == "1" || notice.Type == "4" || notice.Type == "8") //采购入库 |
| | | { |
| | | string sqlString = $@"SELECT |
| | | ASNNo, |
| | |
| | | ExpirationTime = boxInfoOne.ExpirationTime, |
| | | Status = "0", |
| | | InspectMark = boxInfoOne.InspectMark, |
| | | InspectStatus = sku.IsInspect, |
| | | InspectStatus = "1",//sku.IsInspect,//从车间入库的质检状态默认合格 |
| | | BitPalletMark = "1", |
| | | PackagNo = sku.PackagNo, |
| | | |
| | |
| | | Db.BeginTran(); |
| | | |
| | | //库存箱支明细信息 |
| | | var boxList = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo).ToList(); |
| | | var boxList = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo && w.Status == "2").ToList(); |
| | | if (boxList.Count != 1) |
| | | { |
| | | throw new Exception("该箱码信息错误,存在多个此箱码信息"); |
| | |
| | | } |
| | | //出库分配信息 |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && |
| | | m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.SONo == soNo && |
| | | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); |
| | | if (allot == null) |
| | | { |
| | |
| | | else |
| | | { |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo && m.Status == "2"); |
| | | if (await boxInfo.CountAsync() == 0) |
| | | { |
| | | throw Oops.Bah("未查询到该箱码的信息"); |
| | |
| | | return allotList; |
| | | } |
| | | //获取状态为待拣货或者部分拣货的出库单 |
| | | var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); |
| | | var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); |
| | | |
| | | //var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList(); |
| | | //获取出库单据不为待拣货 执行完毕 订单关闭 等待执行的单据 |
| | |
| | | throw Oops.Bah("托盘码为空,请输入托盘码"); |
| | | } |
| | | //获取状态为待拣货或者部分拣货的出库单 |
| | | var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == palletNo); |
| | | var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.PalletNo == palletNo); |
| | | //var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SONo == soNo && m.Status != "4" && m.Status != "5"); |
| | | if (!string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | |
| | | //获取出库口、规格、待拣及已拣数量(根据出库单明细ID、托盘号) |
| | | public async Task<OutPdaInfo> GetOutlets(string soDetailId, string palletNo) |
| | | { |
| | | var allotInfo = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3")).ToListAsync(); |
| | | var allotInfo = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3" || m.Status == "5")).ToListAsync(); |
| | | if (allotInfo.Count == 0) |
| | | { |
| | | throw Oops.Bah($"{palletNo}托盘上未查询到分配信息,请核实"); |
| | |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(soDetailId)) |
| | | { |
| | | var allotInfos = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3")).ToListAsync(); |
| | | var allotInfos = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3" || m.Status == "5")).ToListAsync(); |
| | | if (allotInfos.Count == 0) |
| | | { |
| | | throw Oops.Bah($"{palletNo}托盘上未查询到分配信息,请核实"); |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 出库pda拣货-JC34 |
| | | /// </summary> |
| | | /// <param name="soNo"></param> |
| | | /// <param name="soDetailId"></param> |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="boxNo">箱码/盒码/支码</param> |
| | | /// <param name="pickQty1"></param> |
| | | /// <param name="userId"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public async Task SoSetPick34(string soNo, string soDetailId, string palletNo, string boxNo, string pickQty1, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | | { |
| | | #region 判断 |
| | | |
| | | if (string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | | throw Oops.Bah("出库单据不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | { |
| | | throw Oops.Bah("出库物料-批次不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw Oops.Bah("托盘码不能为空"); |
| | | } |
| | | //if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | //{ |
| | | // throw Oops.Bah("追溯条码和拣货数量不能同时输入"); |
| | | //} |
| | | |
| | | //出库单 |
| | | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | | { |
| | | throw Oops.Bah("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3" && notice.Status != "4") |
| | | { |
| | | throw Oops.Bah("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = await Db.Queryable<BllExportNoticeDetail>() |
| | | .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw Oops.Bah("未查询到该出库单明细的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.SONo == soNo && |
| | | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); |
| | | if (allot == null) |
| | | { |
| | | throw Oops.Bah("未查询到该托盘的分配信息"); |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | |
| | | //库存明细 |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | #endregion |
| | | |
| | | if (string.IsNullOrWhiteSpace(boxNo))//整托拣货 |
| | | { |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == stockDetail.SkuNo && m.LotNo == stockDetail.LotNo);//找到托盘上所有箱码 |
| | | boxInfos = await boxInfo.ToListAsync(); |
| | | if (boxInfo.Count() <= 0) |
| | | { |
| | | throw Oops.Bah("该托盘上没有可拣货的箱子"); |
| | | } |
| | | var boxQty = await boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); |
| | | if (boxQty[0] > needQty) |
| | | { |
| | | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); |
| | | } |
| | | decimal pickQty = 0;//拣货的数量 |
| | | var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync(); |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3) && item.BoxNo3 != null) |
| | | { |
| | | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo) |
| | | { |
| | | throw Oops.Bah("当前托盘上有其他不同物料批次,拣货失败"); |
| | | } |
| | | //添加拣货明细 |
| | | var completeDetail = new BllCompleteDetail() |
| | | { |
| | | SONo = soNo, |
| | | SODetailNo = int.Parse(soDetailId), |
| | | ExportAllotId = allot.Id, |
| | | StockId = allot.StockId, |
| | | BoxNo = item.BoxNo, |
| | | BoxNo2 = item.BoxNo2, |
| | | BoxNo3 = item.BoxNo3, |
| | | |
| | | LotNo = allot.LotNo, |
| | | LotText = allot.LotText, |
| | | SupplierLot = allot.SupplierLot, |
| | | SkuNo = allot.SkuNo, |
| | | SkuName = allot.SkuName, |
| | | Standard = allot.Standard, |
| | | PalletNo = palletNo, |
| | | CompleteQty = item.Qty, |
| | | |
| | | CreateUser = userId |
| | | }; |
| | | comList.Add(completeDetail); |
| | | |
| | | //删除库存箱码明细 |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | pickQty += item.Qty; |
| | | } |
| | | //添加拣货明细 |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | //删除库存明细 |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | //删除或修改库存 |
| | | stock.Qty -= pickQty; |
| | | stock.LockQty -= pickQty; |
| | | if (stock.LockQty < 0) |
| | | { |
| | | stock.LockQty = 0; |
| | | } |
| | | if (stock.Qty <= 0) |
| | | { |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | //判断托盘上还有没有其他物料 |
| | | var palletData = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo && w.Id != stockDetail.Id); |
| | | if (palletData == null) |
| | | { |
| | | //改变托盘状态为:未使用 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | var num = await Db.Queryable<BllExportNoticeDetail>() |
| | | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | //修改出库单信息 |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | if (notice.IsWave == "1") |
| | | { |
| | | var waveNum = await Db.Queryable<BllExportNotice>().CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); |
| | | if (waveNum == 0) |
| | | { |
| | | var wave = await Db.Queryable<BllWaveMage>().FirstAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo); |
| | | if (wave != null) |
| | | { |
| | | wave.Status = "4"; |
| | | wave.UpdateUser = userId; |
| | | wave.UpdateTime = DateTime.Now; |
| | | await Db.Updateable(wave).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | var biaoShi = "0";//0:整箱拣货、1:整盒拣货、 2:散支拣货、3:数量拣货 |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); |
| | | if (await boxInfo.CountAsync() == 0) |
| | | { |
| | | biaoShi = "1"; |
| | | boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo2 == boxNo); |
| | | if (await boxInfo.CountAsync() == 0) |
| | | { |
| | | biaoShi = "2"; |
| | | boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo3 == boxNo); |
| | | if (await boxInfo.CountAsync() == 0) |
| | | { |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | } |
| | | } |
| | | if (biaoShi == "0" && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0) |
| | | { |
| | | biaoShi = "3"; |
| | | } |
| | | if (biaoShi == "2" && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0) |
| | | { |
| | | throw Oops.Bah("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | | boxInfos = await boxInfo.ToListAsync(); |
| | | |
| | | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); |
| | | if (biaoShi == "2") //散支拣货 |
| | | { |
| | | boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo).ToList(); |
| | | |
| | | if (boxInfos.Count() == 0) |
| | | { |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | if (boxInfos.Count() > 1) |
| | | { |
| | | throw Oops.Bah("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | } |
| | | |
| | | if (boxInfos.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = boxInfos.First().Qty; |
| | | //if (boxQty > needQty) |
| | | //{ |
| | | // throw Oops.Bah("拣货数量不能大于剩余待拣数量"); |
| | | //} |
| | | |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | { |
| | | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | } |
| | | else if (biaoShi == "1")//整盒拣货 |
| | | { |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw Oops.Bah("未查询到该盒码的信息"); |
| | | } |
| | | if (boxInfo.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw Oops.Bah("该托盘与盒码没有绑定关系"); |
| | | } |
| | | var boxQty = await boxInfo.GroupBy(m => m.BoxNo2).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); |
| | | //if (boxQty[0] > needQty) |
| | | //{ |
| | | // throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); |
| | | //} |
| | | |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | { |
| | | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | } |
| | | else if (biaoShi == "3")//数量拣货 |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw Oops.Bah("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | decimal boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToDecimal(pickQty1) > boxQty) |
| | | { |
| | | throw Oops.Bah("拣货数量不能大于箱内数量"); |
| | | } |
| | | //if (Convert.ToInt32(pickQty1) > needQty) |
| | | //{ |
| | | // throw Oops.Bah("拣货数量不能大于剩余待拣数量"); |
| | | //} |
| | | } |
| | | else //整箱拣货 |
| | | { |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw Oops.Bah("未查询到该箱码的信息"); |
| | | } |
| | | if (boxInfo.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = await boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); |
| | | //if (boxQty[0] > needQty) |
| | | //{ |
| | | // throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); |
| | | //} |
| | | |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (comDetailList.Any(m => m.BoxNo == item.BoxNo)) |
| | | { |
| | | throw Oops.Bah($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | } |
| | | decimal pickQty = 0;//拣货的数量 |
| | | |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | | { |
| | | //添加拣货明细 |
| | | var completeDetail = new BllCompleteDetail() |
| | | { |
| | | SONo = soNo, |
| | | SODetailNo = int.Parse(soDetailId), |
| | | ExportAllotId = allot.Id, |
| | | StockId = allot.StockId, |
| | | BoxNo = item.BoxNo, |
| | | BoxNo2 = item.BoxNo2, |
| | | BoxNo3 = item.BoxNo3, |
| | | |
| | | LotNo = allot.LotNo, |
| | | LotText = allot.LotText, |
| | | SupplierLot = allot.SupplierLot, |
| | | SkuNo = allot.SkuNo, |
| | | SkuName = allot.SkuName, |
| | | Standard = allot.Standard, |
| | | PalletNo = palletNo, |
| | | CompleteQty = biaoShi == "3" ? decimal.Parse(pickQty1) : item.Qty, |
| | | |
| | | CreateUser = userId |
| | | }; |
| | | comList.Add(completeDetail); |
| | | |
| | | if (biaoShi != "3") |
| | | { |
| | | //删除库存箱码明细 |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | |
| | | pickQty += item.Qty; |
| | | } |
| | | else//数量拣货 |
| | | { |
| | | if (decimal.Parse(pickQty1) == item.Qty) |
| | | { |
| | | //删除库存箱码明细 |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | item.Qty -= decimal.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | pickQty += decimal.Parse(pickQty1); |
| | | } |
| | | } |
| | | //改变库内箱码是否零箱信息 |
| | | if (biaoShi == "1" || biaoShi == "2") |
| | | { |
| | | var boxSurplusList = new List<DataBoxInfo>(); |
| | | if (biaoShi == "1") |
| | | { |
| | | boxSurplusList = boxInfo.Where(m => m.BoxNo2 != boxNo).ToList(); |
| | | } |
| | | else |
| | | { |
| | | boxSurplusList = boxInfo.Where(m => m.BoxNo3 != boxNo).ToList(); |
| | | } |
| | | foreach (var item in boxSurplusList) |
| | | { |
| | | item.BitBoxMark = "1"; |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | if (allot.Status == "5") |
| | | { |
| | | //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成 |
| | | } |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.Qty -= pickQty; |
| | | stockDetail.LockQty -= pickQty; |
| | | if (stockDetail.LockQty < 0) |
| | | { |
| | | stockDetail.LockQty = 0; |
| | | } |
| | | if (stockDetail.Qty == stockDetail.LockQty) |
| | | { |
| | | stockDetail.Status = "2"; |
| | | } |
| | | else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0) |
| | | { |
| | | stockDetail.Status = "1"; |
| | | } |
| | | else |
| | | { |
| | | stockDetail.Status = "0"; |
| | | } |
| | | |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | stock.Qty -= pickQty; |
| | | stock.LockQty -= pickQty; |
| | | if (stock.LockQty < 0) |
| | | { |
| | | stock.LockQty = 0; |
| | | } |
| | | if (stock.Qty <= 0) |
| | | { |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (num2 <= 0) |
| | | { |
| | | //改变托盘状态 |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | var num = await Db.Queryable<BllExportNoticeDetail>() |
| | | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | //修改出库单信息 |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | if (notice.IsWave == "1") |
| | | { |
| | | var waveNum = await Db.Queryable<BllExportNotice>() |
| | | .CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); |
| | | if (waveNum == 0) |
| | | { |
| | | var wave = await Db.Queryable<BllWaveMage>().FirstAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo); |
| | | if (wave != null) |
| | | { |
| | | wave.Status = "4"; |
| | | wave.UpdateUser = userId; |
| | | wave.UpdateTime = DateTime.Now; |
| | | await Db.Updateable(wave).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货出库", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | //catch (AppFriendlyException e) |
| | | //{ |
| | | // Db.RollbackTran(); |
| | | //} |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | //出库pda拣货 |
| | | public async Task SoSetQtyPick(string soNo, string soDetailId, string palletNo, string PickQty, int userId) |
| | | { |
| | |
| | | } |
| | | |
| | | //查询拣货明细支码详细信息 |
| | | public List<CompleteDetailDto> GetCompBoxInfoList(string boxNo, string boxNo3) |
| | | public List<CompleteDetailDto> GetCompBoxInfoList(string sONo, string boxNo, string boxNo3) |
| | | { |
| | | try |
| | | { |
| | | Expression<Func<BllCompleteDetail, bool>> item = Expressionable.Create<BllCompleteDetail>() |
| | | .AndIF(!string.IsNullOrWhiteSpace(sONo), it => it.SONo == sONo.Trim()) |
| | | .AndIF(!string.IsNullOrWhiteSpace(boxNo), it => it.BoxNo == boxNo.Trim()) |
| | | .AndIF(!string.IsNullOrWhiteSpace(boxNo3), it => it.BoxNo3.Contains(boxNo3.Trim())) |
| | | .ToExpression(); |
| | |
| | | ExportAllotId = a.ExportAllotId, |
| | | |
| | | BoxNo = a.BoxNo, |
| | | BoxNo2 = a.BoxNo2, |
| | | BoxNo3 = a.BoxNo3, |
| | | LotNo = a.LotNo, |
| | | LotText = a.LotText, |
| | |
| | | using System.Drawing.Drawing2D; |
| | | using Model.ModelDto.LogDto; |
| | | using AutoMapper.Internal; |
| | | using System.Diagnostics.Contracts; |
| | | |
| | | namespace WMS.BLL.BllSoServer |
| | | { |
| | |
| | | .AndIF(!string.IsNullOrWhiteSpace(model.BitPalletMark), m => m.BitPalletMark == model.BitPalletMark) |
| | | .And(m => !string.IsNullOrWhiteSpace(m.WareHouseNo)) |
| | | .And(a => a.Status == "0") |
| | | .And(a => a.WareHouseNo == "W02") |
| | | .And(a => a.WareHouseNo == "W01" || a.WareHouseNo == "W02") |
| | | .ToExpression(); |
| | | var data = await Db.Queryable<DataStockDetail>().Where(item).OrderBy(m => m.LocatNo).ToPageListAsync(model.Page, model.Limit, count); |
| | | //data.Select(m => m.Status == "0" && m.IsDel == "0"); |
| | |
| | | } |
| | | |
| | | return outDtoList; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 托盘出库(密集库) |
| | | /// </summary> |
| | | /// <param name="palletNo"></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> IssuePalletNoOutMk(string palletNo, string outMode, int userId, string url, out string str) |
| | | { |
| | | try |
| | | { |
| | | //判断托盘号是否为空 |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception($"托盘号不能为空,请核实"); |
| | | } |
| | | |
| | | str = ""; |
| | | var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0").ToList(); |
| | | |
| | | if (stockDetailList.Count == 0) |
| | | { |
| | | throw new Exception($"未在库内查询到该托盘信息"); |
| | | } |
| | | var stocka = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetailList[0].SkuNo); |
| | | |
| | | |
| | | //验证库存托盘状态 |
| | | if (stockDetailList[0].Status != "0") |
| | | { |
| | | throw new Exception($"当前托盘未处于待分配状态,请核实!"); |
| | | } |
| | | //判断托盘库存信息分组后是否大于1条 |
| | | var detailGroup = stockDetailList.GroupBy(m => new { m.SkuNo, m.PalletNo, m.WareHouseNo, m.LocatNo }).ToList(); |
| | | if (detailGroup.Count > 1) |
| | | { |
| | | throw new Exception($"未在库内查询到该托盘信息"); |
| | | } |
| | | |
| | | var locatStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == stockDetailList[0].LocatNo && w.Status == "1"); |
| | | if (locatStart == null) |
| | | { |
| | | throw new Exception($"起始储位不存在或非空闲,请检查"); |
| | | } |
| | | #region 集合 |
| | | |
| | | var outDto1 = new List<OutCommandDto>(); //先出库数据的集合(深度为1的储位) |
| | | var outDto2 = new List<OutCommandDto>(); //后出库数据的集合(深度为2的储位) |
| | | var moveDto = new List<OutCommandDto>(); //要移库数据的集合 |
| | | |
| | | #endregion |
| | | var com = new Common(); |
| | | var allot = new AllotLocation(); |
| | | |
| | | #region 集合 |
| | | |
| | | Db.BeginTran(); |
| | | try |
| | | { |
| | | List<LogTask> logTaskList = new List<LogTask>();//此次出库任务集合,为应对同托盘不同物料出库 |
| | | |
| | | var taskNoStr = ""; |
| | | |
| | | // 储位号 |
| | | var locateNo = locatStart.LocatNo; |
| | | List<string> locateListStrs = new List<string>(); |
| | | locateListStrs.Add(locateNo); |
| | | |
| | | var row1 = int.Parse(locatStart.LocatNo.Substring(2, 2)); |
| | | var row2 = int.Parse(locatStart.AisleOne.Substring(2, 2)); |
| | | //需要移库的信息 |
| | | var NeedMoveInfo = IsNeedMoveLocate(locatStart, locateListStrs, out int isOut); |
| | | if (isOut == 1) |
| | | { |
| | | //巷道组中有入库或移入的储位,或者是当前储位前有储位未下发成功的任务 |
| | | throw new Exception($"巷道组中有入库或移入的储位,请稍后再试"); |
| | | } |
| | | if (NeedMoveInfo.Count > 0)//需要移库 |
| | | { |
| | | //判断库内空储位是否够 |
| | | var okRoad = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0" && m.WareHouseNo == locatStart.WareHouseNo).Select(m => m.RoadwayNo).ToList(); |
| | | var nullSlotNum = Db.Queryable<SysStorageLocat>().Count(m => m.RoadwayNo != locatStart.RoadwayNo && okRoad.Contains(m.RoadwayNo) && m.Status == "0"); |
| | | //判断空储位的数量是否大于需要移库的数量 |
| | | if (nullSlotNum >= NeedMoveInfo.Count) |
| | | { |
| | | foreach (var s in NeedMoveInfo) |
| | | { |
| | | //储位列 |
| | | var rows = int.Parse(s.Substring(2, 2)); |
| | | |
| | | //获取移库储位 |
| | | var moveAddress = GetMiJiMoveAddress(s, locatStart.AisleOne); |
| | | var tary = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == s); |
| | | if (string.IsNullOrWhiteSpace(moveAddress)) // 判断是否获取到移库的库位 |
| | | { |
| | | throw new Exception($"出库前有货物,需移库但未查询到空储位"); |
| | | } |
| | | else |
| | | { |
| | | var ykTaskNo = new Common().GetMaxNo("TK"); |
| | | var ykTask = new LogTask //出库任务 |
| | | { |
| | | TaskNo = ykTaskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = s,//起始位置 |
| | | EndLocat = moveAddress,//outMode,//目标位置 |
| | | PalletNo = tary.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "2",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = "从" + s + "到" + moveAddress + "的移库任务", //关键信息 |
| | | }; |
| | | Db.Insertable(ykTask).ExecuteCommand(); |
| | | logTaskList.Add(ykTask); |
| | | |
| | | outDto1.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = ykTask.PalletNo,//托盘号 |
| | | StartLocate = ykTask.StartLocat, // 起始位置 |
| | | StartRoadway = locatStart.RoadwayNo,//其实巷道 |
| | | EndLocate = moveAddress,//outMode, // 目标位置 |
| | | TaskNo = ykTaskNo, // 任务号 |
| | | TaskType = "2",// 任务类型 (出库)0入 1出 2移 |
| | | Order = Math.Abs(row2 - rows), |
| | | Type = PLCTypeEnum.ShuttleCar |
| | | |
| | | }); |
| | | var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == s); |
| | | var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == moveAddress); |
| | | |
| | | slotChange.Status = "5"; //改变状态(正在出库) |
| | | slotChange2.Status = "4"; // 改变状态(正在移入) |
| | | Db.Updateable(slotChange).ExecuteCommand(); |
| | | Db.Updateable(slotChange2).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | throw new Exception($"出库前有货物,需移库但空储位不够移库"); |
| | | } |
| | | } |
| | | #region 添加出库任务 |
| | | |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask //出库任务 |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locatStart.LocatNo,//起始位置 |
| | | EndLocat = outMode,//outMode,//目标位置 |
| | | PalletNo = palletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = "从" + locatStart.LocatNo + "到" + outMode + "的出库任务", //关键信息 |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | logTaskList.Add(exTask); |
| | | var endroad = allot.RoadwayToStationNum(locatStart.RoadwayNo, outMode); |
| | | outDto1.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = palletNo,//托盘号 |
| | | StartLocate = locatStart.LocatNo, // 起始位置 |
| | | StartRoadway = locatStart.RoadwayNo,//起始巷道 |
| | | EndLocate = outMode,//, // 目标位置 |
| | | EndRoadway = endroad, |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库)0入 1出 2移 |
| | | OutMode = outMode, //出库口 |
| | | Order = Math.Abs(row2 - row1), |
| | | Type = PLCTypeEnum.ShuttleCar |
| | | |
| | | }); |
| | | taskNoStr = exTask.TaskNo; |
| | | |
| | | #endregion |
| | | |
| | | #region 改变数据 |
| | | |
| | | locatStart.Status = "3"; //要出库的储位改变状态 正在出库 |
| | | Db.Updateable(locatStart).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | |
| | | outDto1.AddRange(moveDto); |
| | | outDto1.AddRange(outDto2); |
| | | //添加操作日志记录 |
| | | new OperationSOServer().AddLogOperationSo("出库作业", "托盘出库", palletNo, "出库", $"点击出库按钮出库托盘为:{palletNo}", 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 == 200) |
| | | { |
| | | //更改任务的发送返回时间// |
| | | 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) |
| | | { |
| | |
| | | } |
| | | |
| | | //判断储位 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//当前出库的储位信息 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0" && m.WareHouseNo == "W01");//当前出库的储位信息 |
| | | if (locate == null) |
| | | { |
| | | flagList.Add(2); |
| | |
| | | |
| | | outDto1.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = item.PalletNo,//托盘号 |
| | | StartLocate = locate.LocatNo, // 起始位置 |
| | | PalletNo = ykTask.PalletNo,//托盘号 |
| | | StartLocate = ykTask.StartLocat, // 起始位置 |
| | | StartRoadway = locate.RoadwayNo,//其实巷道 |
| | | EndLocate = moveAddress,//outMode, // 目标位置 |
| | | TaskNo = ykTaskNo, // 任务号 |
| | |
| | | // 010101 派列层 |
| | | //var bol = String.CompareOrdinal(lcoate.LocatNo, lcoate.AisleOne); |
| | | |
| | | var sArray = lcoate.LocatNo.Substring(4,2); |
| | | var sArray = lcoate.LocatNo.Substring(2, 2); |
| | | var row = int.Parse(sArray);//储位列 |
| | | var sArray2 = lcoate.AisleOne.Substring(4, 2); |
| | | var sArray2 = lcoate.AisleOne.Substring(2, 2); |
| | | var row2 = int.Parse(sArray2); //通道口列 |
| | | |
| | | isOut = 0; |
| | |
| | | { |
| | | foreach (var item2 in item) |
| | | { |
| | | var okLan = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0").Select(m => m.RoadwayNo).ToList(); |
| | | var okLan = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0" && m.WareHouseNo == item2.WareHouseNo).Select(m => m.RoadwayNo).ToList(); |
| | | //当前托盘所在楼层 |
| | | if (oldSlot.Layer == 1) |
| | | { |
| | | okLan = okLan.Where(m => Convert.ToInt32(m.Replace("MR", "")) <= 56).ToList(); |
| | | } |
| | | else if (oldSlot.Layer == 2) |
| | | { |
| | | okLan = okLan.Where(m => Convert.ToInt32(m.Replace("MR", "")) > 56).ToList(); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("当前托盘所在楼层异常"); |
| | | } |
| | | |
| | | var tray2 = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == item2.SkuNo |
| | | && m.LotNo == item2.LotNo && !slotList.Contains(m.LocatNo) && m.PalletTags == item2.PalletTags && okLan.Contains(m.RoadwayNo)).ToList(); |
| | | foreach (var s in tray2) |
| | |
| | | location = ""; |
| | | |
| | | // 判断储位组是否有空储位 关联库存明细表可防止储位状态不准确避免造成满入异常//not in ('1','2','4','6','7','8') |
| | | sqlString = $"select LocatNo,Column,AisleOne from SysStorageLocat where RoadwayNo = {laneWayId} and Status in ('0') and LocatNo not in (select LocatNo from DataStockDetail where RoadwayNo = { laneWayId}) order by Row;"; |
| | | sqlString = $"select LocatNo,[Column],AisleOne from SysStorageLocat where IsDel=0 and WareHouseNo='W01' and RoadwayNo = '{laneWayId}' and Status in ('0') and LocatNo not in (select LocatNo from DataStockDetail where RoadwayNo = '{laneWayId}') order by Row;"; |
| | | var slotModel =Db.SqlQueryable<LocateInfo>(sqlString).ToList(); |
| | | if (slotModel.Count == 0) |
| | | { |
| | |
| | | /// <param name="lotNo">批次</param> |
| | | /// <param name="status">库存状态</param> |
| | | /// <param name="inspectStatus">质检状态</param> |
| | | /// <param name="wareHouseNo">所属仓库</param> |
| | | /// <param name="areaNo">所属区域</param> |
| | | /// <returns></returns> |
| | | public async Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, |
| | | string ownerName, string lotNo, string status, string inspectStatus) |
| | | string ownerName, string lotNo, string status, string inspectStatus, string wareHouseNo, string areaNo) |
| | | { |
| | | Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() |
| | | .AndIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo.Contains(skuNo)) |
| | |
| | | .AndIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo.Contains(lotNo)) |
| | | .AndIF(!string.IsNullOrEmpty(status), a => a.Status == status) |
| | | .AndIF(!string.IsNullOrEmpty(inspectStatus), a => a.InspectStatus == inspectStatus) |
| | | .AndIF(!string.IsNullOrEmpty(wareHouseNo), a => a.WareHouseNo == wareHouseNo) |
| | | .AndIF(!string.IsNullOrEmpty(areaNo), a => a.AreaNo == areaNo) |
| | | .And(a => a.IsDel == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | |
| | | /// <param name="boxNo">箱码</param> |
| | | /// <param name="boxNo3">支码</param> |
| | | /// <returns></returns> |
| | | List<CompleteDetailDto> GetCompBoxInfoList(string boxNo,string boxNo3); |
| | | List<CompleteDetailDto> GetCompBoxInfoList(string sONo, string boxNo,string boxNo3); |
| | | |
| | | #region 数据归档 |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | List<OutCommandDto> IssuePalletNoOut(string palletNo, string outMode, int userId, string url, out string str); |
| | | |
| | | /// <summary> |
| | | /// 托盘出库(密集库) |
| | | /// </summary> |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="outMode"></param> |
| | | /// <param name="userId"></param> |
| | | /// <param name="url"></param> |
| | | /// <param name="str"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | List<OutCommandDto> IssuePalletNoOutMk(string palletNo, string outMode, int userId, string url, out string str); |
| | | |
| | | //------------------------------------------------------------------------------------------ |
| | | #region 备料 |
| | | |
| | |
| | | /// <param name="lotNo">批次</param> |
| | | /// <param name="status">库存状态</param> |
| | | /// <param name="inspectStatus">质检状态</param> |
| | | /// <param name="wareHouseNo">所属仓库</param> |
| | | /// <param name="areaNo">所属区域</param> |
| | | /// <returns></returns> |
| | | Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, |
| | | string status, string inspectStatus); |
| | | string status, string inspectStatus, string wareHouseNo, string areaNo); |
| | | |
| | | /// <summary> |
| | | /// 获取库存明细 |
| | |
| | | /// <param name="boxNo3">支/袋码</param> |
| | | /// <param name="userId">操作人</param> |
| | | Task SoSetPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string PickQty, int userId); |
| | | /// <summary> |
| | | /// 出库pda拣货-JC34 |
| | | /// </summary> |
| | | /// <param name="soNo"></param> |
| | | /// <param name="soDetailId"></param> |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="boxNo">箱码/盒码/支码</param> |
| | | /// <param name="pickQty1"></param> |
| | | /// <param name="userId"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | Task SoSetPick34(string soNo, string soDetailId, string palletNo, string boxNo, string pickQty1, int userId); |
| | | |
| | | /// <summary> |
| | | /// 出库pda拣货 |
| | |
| | | } |
| | | |
| | | [HttpGet] |
| | | public IActionResult GetCompBoxInfoList( string boxNo,string boxNo3) |
| | | public IActionResult GetCompBoxInfoList(string sONo, string boxNo,string boxNo3) |
| | | { |
| | | try |
| | | { |
| | | var bolls = _comDetailSvc.GetCompBoxInfoList(boxNo, boxNo3); |
| | | var bolls = _comDetailSvc.GetCompBoxInfoList(sONo, boxNo, boxNo3); |
| | | |
| | | return Ok(new { code = 0, count = bolls.Count, msg = "拣货明细信息", data = bolls }); |
| | | } |
| | |
| | | return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); |
| | | } |
| | | //验证出库口 |
| | | //if (string.IsNullOrWhiteSpace(outMode)) |
| | | //{ |
| | | // return Ok(new { code = 1, msg = "请选择出库口" }); |
| | | //} |
| | | if (string.IsNullOrWhiteSpace(outMode)) |
| | | { |
| | | return Ok(new { code = 1, msg = "请选择出库口" }); |
| | | } |
| | | string str = string.Empty; |
| | | var list = new List<OutCommandDto>(); |
| | | if (outMode == "17" || outMode == "18") |
| | | { |
| | | list = _exNoticeSvc.IssuePalletNoOutMk(palletNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out str); |
| | | } |
| | | else |
| | | { |
| | | list = _exNoticeSvc.IssuePalletNoOut(palletNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out str); |
| | | } |
| | | |
| | | var list = _exNoticeSvc.IssuePalletNoOut(palletNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str); |
| | | |
| | | return Ok(new { code = 0, msg = str, data = list }); |
| | | |
| | |
| | | [HttpPost] |
| | | public async Task SoSetPick(PdaSoVm model) |
| | | { |
| | | await _pdaSoSvc.SoSetPick(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, _userManager.UserId); |
| | | //await _pdaSoSvc.SoSetPick(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, _userManager.UserId); |
| | | await _pdaSoSvc.SoSetPick34(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.PickQty, _userManager.UserId); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | using WMS.IBLL.IDataServer; |
| | | using System.Security.Claims; |
| | | using System.Threading.Tasks; |
| | | using Model.ModelDto.SysDto; |
| | | |
| | | namespace Wms.Controllers |
| | | { |
| | |
| | | /// <param name="inspectStatus">质检状态</param> |
| | | /// <returns></returns> |
| | | [HttpGet] |
| | | public async Task<IActionResult> GetInventoryList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus) |
| | | public async Task<IActionResult> GetInventoryList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus, string wareHouseNo, string areaNo) |
| | | { |
| | | List<MateDataStockDto> StockList = await _stock.GetDataStockList(selectType, skuNo, skuName, ownerNo, ownerName, lotNo, status, inspectStatus); |
| | | List<MateDataStockDto> StockList = await _stock.GetDataStockList(selectType, skuNo, skuName, ownerNo, ownerName, lotNo, status, inspectStatus, wareHouseNo, areaNo); |
| | | return Ok(new |
| | | { |
| | | data = StockList, |