Demo
2024-03-13 cbf4a8f42cd0d7e4ff994ee7f9b9e9c33b9c39c8
PDA取样出库拣货
5个文件已修改
387 ■■■■■ 已修改文件
Pda/View/SoSetting/SampleOut.html 162 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/PdaVm/PdaSoVm.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/PdaSoController.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/SoSetting/SampleOut.html
@@ -549,8 +549,9 @@
            var form = layui.form;
            /* 标签切换代码 */
            var xianshiyemian = 0;
            /* 标签切换代码 */
            var sampleType = "";  //0 库内取样; 1 库前取样
            
            $('#kuneilabel').hide();
            $('#kuqianlabel').hide();
@@ -655,6 +656,17 @@
                                    $('#kuneilabel').show();
                                    $('#kuneiQty').show();
                                    $('#kuqianlabel').hide();
                                    updateBillList();
                                    if ($('#bar').val() == "") {
                                        clear1();
                                        return;
                                    } else {
                                        updateSkuLotNoList();
                                        updateQtyList();
                                        getBar();
                                        GetBoxInfo();
                                    }
                                    sampleType = 0;
                                }
                                if (res.data == "1") {//库前取样
                                    $('#kuqianlabel').show();
@@ -662,17 +674,10 @@
                                    $('#kuneiQty').hide();
                                    
                                    updateAsnBillList();
                                    GetBoxInfo();
                                    sampleType = 1;
                                }
                                // updateBillList();
                                // if ($('#bar').val() == "") {
                                //     clear1();
                                //     return;
                                // } else {
                                //     updateSkuLotNoList();
                                //     updateQtyList();
                                //     getBar();
                                //     GetBoxInfo();
                                // }
                            }else { //不成功
                                layer.msg(res.msg, {
                                    icon: 2,
@@ -941,73 +946,78 @@
            //单拣货(确认按钮)
            form.on('submit(formPickScatter)', function (data) {
                if ($('#bar').val() == "") {
                    layer.msg("请选择出库单", {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    }); return;
                }
                if ($('#bar').val() == "") {
                    layer.msg("请选择物料-批次", {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    }); return;
                }
                if ($('#palletNo').val() == "") {
                    layer.msg("请输入托盘码", {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    }); return;
                }
                if(isContinue=="0"){
                    if ($('#boxNo').val() == "") {
                        layer.msg("请输入箱码", {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }); return;
                    }
                    if ($('#boxQty').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())
                // if (qty <= 0 || qty > boxQty) {
                //     layer.msg("拣货数量需大于0,并且不能超过待拣箱内数量", {
                //         icon: 2,
                //         time: 2000 //2秒关闭(如果不配置,默认是3秒)
                //     });
                //     return;
                // }
                if (sampleType == "0") {
                    if ($('#bar').val() == "") {
                        layer.msg("请选择出库单", {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }); return;
                    }
                    if ($('#bar').val() == "") {
                        layer.msg("请选择物料-批次", {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }); return;
                    }
                    if ($('#palletNo').val() == "") {
                        layer.msg("请输入托盘码", {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }); return;
                    }
                    if(isContinue=="0"){
                        if ($('#boxNo').val() == "") {
                            layer.msg("请输入箱码", {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }); return;
                        }
                        if ($('#boxQty').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;
                        }
                    }
                }
                else if (sampleType == "1") {
                }
                else {
                    layer.msg("类型错误,请刷新页面重试", {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    });
                    return;
                }
                if (canPickBox == false) {
                if (canPickBox == false) {
                    layer.msg("请求未完成,不要重复请求", {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    });
                    return;
                }
                    layer.msg("请求未完成,不要重复请求", {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    });
                    return;
                }
                reqPickScatter()
                reqPickScatter()
                return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
            });
Wms/Model/ModelVm/PdaVm/PdaSoVm.cs
@@ -58,6 +58,12 @@
        /// </summary>
        public string Type { get; set; }
        /// <summary>
        /// 入库库单号 库前取样出库使用
        /// </summary>
        public string AsnNo { get; set; }
    }
    /// <summary>
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -1388,39 +1388,17 @@
                    }
                    //出库单
                    var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.AsnSampleNo == asnNo);
                    BllExportNoticeDetail noticeDetail2;
                    if (notice != null && notice.Status != "6")
                    {
                    }
                    else
                    {
                        //创建出库单及明细
                    }
                    //出库单明细
                    var noticeDetail = Db.Queryable<BllExportNoticeDetail>()
                        .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId));
                    if (noticeDetail == null)
                    {
                        throw new Exception("未查询到该出库单明细的信息");
                    }
                    //出库分配信息
                    var allot2 = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.Status == "5" && m.SONo == soNo && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo);
                    if (allot2 == null)
                    {
                        throw new Exception("未查询到该托盘的分配信息");
                    }
                    //库存明细
                    var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId);
                    var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.ASNNo == asnNo && m.PalletNo == palletNo);
                    if (stockDetail == null)
                    {
                        throw new Exception("未查询到该托盘分配的库存明细信息!");
                        throw new Exception("未查询到该托盘的库存明细信息!");
                    }
                    var sku = Db.Queryable<SysMaterials>().First(m=>m.IsDel == "0" && m.SkuNo == stockDetail.SkuNo);
                    if (sku == null)
                    {
                        throw new Exception("未查询到当前托盘上的物料信息");
                    }
                    //库存总表
                    var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
@@ -1429,11 +1407,111 @@
                        throw new Exception("未查询到该托盘分配的库存信息!");
                    }
                    //出库单
                    var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.AsnSampleNo == asnNo);
                    //创建出库单
                    if (notice == null || (notice != null && notice.Status != "6"))
                    {
                        var billNo = "";
                        var bl = true;
                        do
                        {
                            //获取自增单据号
                            billNo = new Common().GetMaxNo("SO");
                            var no = billNo;
                            bl = Db.Queryable<BllExportNotice>().Any(m => m.SONo == no);
                        } while (bl);
                        var addNotice = new BllExportNotice()
                        {
                            SONo = billNo,
                            Type = "3",
                            Status = "4",
                            Origin = "WMS",
                            IsWave = "0",
                            WaveNo = "",
                            IsDespatch = "0",
                            CompleteTime = DateTime.Now,
                            CreateUser = 0,
                        };
                        var n = Db.Insertable(addNotice).ExecuteCommand();
                        notice = addNotice;
                    }
                    //创建出库单明细
                    var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.SONo == notice.SONo && m.SkuNo == stockDetail.SkuNo && m.LotNo.Contains(stockDetail.LotNo));
                    if (noticeDetail == null)
                    {
                        var addNoticeDetail = new BllExportNoticeDetail()
                        {
                            SONo = notice.SONo,
                            SkuNo = sku.SkuNo,
                            SkuName = sku.SkuName,
                            Standard = sku.Standard,
                            LotNo = stockDetail.LotNo,
                            LotText = "",
                            Qty = 0,
                            AllotQty = 0,
                            FactQty = 0,
                            CompleteQty = 0,
                            PackagNo = sku.PackagNo,
                            Price = sku.Price,
                            //Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * pickQty,
                            IsBale = "",
                            IsBelt = "",
                            SupplierLot = stock.SupplierLot,
                            IsWave = "0",
                            WaveNo = "",
                            IsIssueLotNo = "0",
                            Status = "3",
                            CreateUser = 0,
                        };
                        var m = Db.Insertable(addNoticeDetail).ExecuteCommand();
                        noticeDetail = addNoticeDetail;
                    }
                    //出库分配信息
                    var allot2 = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.Status == "5" && m.SONo == notice.SONo && m.PalletNo == palletNo);
                    if (allot2 == null)
                    {
                        //添加分配表信息
                        var addAllot = new BllExportAllot
                        {
                            SONo = notice.SONo,
                            WaveNo = "",
                            SODetailNo = noticeDetail.Id,
                            StockId = stockDetail.Id,
                            LotNo = stockDetail.LotNo,
                            LotText = stockDetail.LotText,
                            SupplierLot = stockDetail.SupplierLot,
                            SkuNo = sku.SkuNo,
                            SkuName = sku.SkuName,
                            Standard = sku.Standard,
                            PalletNo = palletNo,
                            IsBale = "0" , //是否裹包
                            IsBelt = "0" , //是否打带
                            Qty = 0,
                            CompleteQty = 0,
                            Status = "5",
                            LogisticsId = notice.LogisticsId,
                            IsAdvance = "0",
                            OutMode = "",//出库口
                            CreateUser = userId,
                            CreateTime = DateTime.Now
                        };
                        var fp = Db.Insertable(addAllot).ExecuteCommand();
                        allot2 = addAllot;
                    }
                    #endregion
                    //判断是散支拣货还是数量拣货
                    var biaoShi = "0";//0:整箱拣货、1:散支拣货、2:数量拣货
@@ -1547,6 +1625,8 @@
                        }
                        pickQty += item.Qty;
                    }
                    //改变库内箱码是否零箱信息
                    if (biaoShi == "1")
                    {
@@ -1561,31 +1641,14 @@
                    Db.Insertable(comList).ExecuteCommand();
                    //修改出库分配信息
                    allot.CompleteQty += pickQty;
                    allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
                    if (allot.Status == "5")
                    {
                        //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成
                    }
                    allot2.Qty += pickQty;
                    allot2.CompleteQty += pickQty;
                    Db.Updateable(allot).ExecuteCommand();
                    //删除或修改库存明细
                    stockDetail.BitPalletMark = "1";//修改为零托标识
                    stockDetail.Qty -= pickQty;
                    stockDetail.LockQty -= pickQty;
                    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)
                    {
                        Db.Deleteable(stockDetail).ExecuteCommand();
@@ -1595,7 +1658,6 @@
                        Db.Updateable(stockDetail).ExecuteCommand();
                    }
                    stock.Qty -= pickQty;
                    stock.LockQty -= pickQty;
                    if (stock.Qty <= 0)
                    {
                        Db.Deleteable(stock).ExecuteCommand();
@@ -1617,6 +1679,9 @@
                        Db.Updateable(pallet).ExecuteCommand();
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.Qty += pickQty;
                    noticeDetail.AllotQty += pickQty;
                    noticeDetail.FactQty += pickQty;
                    noticeDetail.CompleteQty += pickQty;
                    Db.Updateable(noticeDetail).ExecuteCommand();
Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
@@ -129,5 +129,20 @@
        /// <returns>单据集合</returns>
        List<string> GetAsnNoByPallet(string palletNo);
        /// <summary>
        /// 取样出库拣货(标签)
        /// </summary>
        /// <param name="soType">拣货类型 0库内取样,有出库单及分配信息; 1库前取样,反向添加出库单及分配信息</param>
        /// <param name="soNo">出库单</param>
        /// <param name="soDetailId">出库单明细</param>
        /// <param name="palletNo">托盘号</param>
        /// <param name="boxNo">外箱码</param>
        /// <param name="boxNo3">内箱码</param>
        /// <param name="pickQty1">拣货数量</param>
        /// <param name="asnNo">入库单</param>
        /// <param name="userId">操作人ID</param>
        void SampleSoSetPick(string soType, string soNo, string soDetailId, string palletNo, string boxNo,
            string boxNo3, string pickQty1, string asnNo, int userId);
    }
}
Wms/Wms/Controllers/PdaSoController.cs
@@ -393,7 +393,38 @@
            }
        }
        /// <summary>
        /// 取样出库拣货(标签)
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult SampleSoSetPick(PdaSoVm model)
        {
            try
            {
                var claimsIdentity = this.User.Identity as ClaimsIdentity;
                if (claimsIdentity == null)
                {
                    throw new Exception("未获取到用户信息");
                }
                string UserId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value;
                if (string.IsNullOrWhiteSpace(UserId))
                {
                    throw new Exception("未获取到用户信息");
                }
                int uid = Convert.ToInt32(UserId);
                _pdaSoSvc.SampleSoSetPick(model.Type,model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, model.AsnNo, uid);
                return Ok(new { data = "", code = 0, msg = "(标签)取样出库拣货" });
            }
            catch (Exception e)
            {
                return Ok(new { data = "", code = 1, msg = "(标签)取样出库拣货错误:" + e.Message });
            }
        }
    }