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