test
71 分钟以前 587d9d9cec49585729d8f141dd3b0df2ffb637dc
前端精确到小数点后四位,后端质检状态
7个文件已修改
295 ■■■■ 已修改文件
HTML/js/public.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/ArrivalNotice.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/ArrivalNoticeDetail.html 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/SOSetting/ExportNoticeAddFrom.html 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/AsnSetting/productEnterQuantity.html 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/js/public.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllQualityServer/QualityInspectServer.cs 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/js/public.js
@@ -1,7 +1,8 @@
//var IP = "http://47.104.149.73:1991";//接口IP
// var IP = "http://172.16.71.101:8082/";//接口IP
//var IP = "http://localhost:13243/api";
var IP = "http://localhost:50515/api";  //本地
//var IP = "http://localhost:50515/api";  //本地
var IP="https://localhost:5001/api";
// var IP = "http://localhost:44318/api";
//var IP = "http://192.168.1.6:8017";
//var IP = "http://192.168.1.226:8086";  
HTML/views/ASNSetting/ArrivalNotice.html
@@ -886,7 +886,7 @@
                                } else { //不成功
                                    layer.msg(res.msg, {
                                        icon: 2,
                                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                        time: 2000 //2秒关闭(如果不配置,默认是3秒)  B2025080501000035   tuopan T2500037
                                    }, function () { doing = true });
                                }
                            });
HTML/views/ASNSetting/ArrivalNoticeDetail.html
@@ -668,13 +668,25 @@
                    }
                    if (!reg.test(arr[i].Qty)) {
                        layer.msg("入库数量必须是大于0的整数", {
                    var qtyValue = arr[i].Qty;
                    // 尝试将值转换为数字
                    var num = Number(qtyValue);
                    // 验证规则:必须是有效数字、大于0、小数位数不超过4位
                    if (
                        isNaN(num) ||  // 不是有效数字   T2500009   地码 B010109
                        num <= 0 ||    // 小于等于0
                        // 检查小数位数(先转为字符串处理)
                        (qtyValue.toString().indexOf('.') !== -1 &&
                            qtyValue.toString().split('.')[1].length > 4)
                    ) {
                        layer.msg("入库数量必须是大于0的数", {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            time: 2000
                        });
                        return -1;
                    }
                    var item = {
                        Id: arr[i].Id,
@@ -683,7 +695,7 @@
                        Standard: arr[i].Standard,
                        LotNo: arr[i].LotNo,
                        LotText: arr[i].LotText,
                        Qty: parseInt(arr[i].Qty),
                        Qty: Number(qtyValue),////decimal
                        PackagNo: arr[i].PackagNo,
                        Price: arr[i].Price,
                        IsBale: arr[i].IsBale,
HTML/views/SOSetting/ExportNoticeAddFrom.html
@@ -39,7 +39,8 @@
                <div class="layui-inline">
                    <label class="layui-form-label">出库仓库</label>
                    <div class="layui-input-inline">
                        <select name="WarehouseId" id="WarehouseId" lay-filter="WarehouseId" lay-verify="required" lay-search>
                    <select name="WarehouseId" id="WarehouseId" lay-filter="WarehouseId" lay-verify="required"
                        lay-search>
                            <option value=""></option>
                        </select>
                    </div>
@@ -151,7 +152,7 @@
                    page: true,
                    limit: pageCnt,
                    limits: pageLimits,
                    cellMinWidth: 60, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                cellMinWidth: 60,
                    cols: [
                        [{
                            field: 'SkuNo',
@@ -178,14 +179,26 @@
                            title: '库存数量',  
                            align: 'center',
                            width:100,
                        // 格式化库存数量显示为4位小数
                        templet: function (d) {
                            return parseFloat(d.Qty).toFixed(4);
                        }
                        }, {
                            field: 'ExQty',
                            title: '出库数量',
                            align: 'center',
                            width:100,  
                            edit: 'number',
                        edit: 'text', // 改为text支持小数输入
                            event: 'dataNumber'
                        },
                    }, {
                        title: '操作',
                        align: 'center',
                        width: 90,
                        templet: '#table-content-list',
                        fixed: 'right',
                    }]
                ],
            };
                        // {
                        //     field:'IsBale', 
                        //     title:'是否裹包',
@@ -199,15 +212,6 @@
                        //     templet: '#checkboxTpl', 
                        //     unresize: true //是否禁用拖拽列宽
                        // }, 
                        {
                            title: '操作',
                            align: 'center',
                            width:90,
                            templet: '#table-content-list',
                            fixed: 'right',
                        }]
                    ],
                };
                // //监听裹包操作
                // form.on('switch(IsBaleDemo)', function(obj){
                //     if (obj.elem.checked) {
@@ -243,6 +247,7 @@
                //         }
                //     }
                // });
                //初始渲染
                refreshTable(null);
                var $ = layui.$;
@@ -352,66 +357,59 @@
                    }
                    var DataList = [];
                    
                // 只保留一个验证循环,移除重复代码
                    for (var i in infoOptions.data) {
                        console.log(infoOptions.data[i].ExQty);
                        if (infoOptions.data[i].ExQty == "") {
                            layer.msg("请输入出库数量!", {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                    const exqtyStr = (infoOptions.data[i].ExQty || '').trim();
                    const stockQty = parseFloat(infoOptions.data[i].Qty) || 0;
                    // 验证是否为空
                    if (exqtyStr === "") {
                        layer.msg("请输入出库数量!", { icon: 2, time: 2000 });
                            isrun = 0;
                            return;
                        }
                        
                        if(infoOptions.data[i].ExQty.indexOf('.')>=0){
                            layer.msg("出库数量必须是大于0的整数", {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                            isrun = 0;
                            return;
                        }
                        if(infoOptions.data[i].ExQty.indexOf('-')>=0){
                            layer.msg("出库数量必须是大于0的整数", {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                            isrun = 0;
                            return;
                        }
                        if(infoOptions.data[i].ExQty.charAt(0)=='0'){
                            layer.msg("出库数量必须是大于0的整数", {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                    // 验证数字格式(支持正数和最多4位小数)
                    const decimalRegex = /^(0|[1-9]\d*)(\.\d{1,4})?$/;
                    if (!decimalRegex.test(exqtyStr)) {
                        layer.msg("出库数量必须是大于0的数字,且最多保留4位小数!", { icon: 2, time: 2000 });
                            isrun = 0;
                            return;
                        }
                        
                        if (infoOptions.data[i].ExQty <= 0) {
                            layer.msg("出库数量必须大于0!", {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                    // 转换为浮点数并处理精度
                    const precision = 10000;
                    const exqty = Math.round(parseFloat(exqtyStr) * precision) / precision;
                    // 验证是否大于0
                    if (exqty < 0) {
                        layer.msg("出库数量必须大于0!", { icon: 2, time: 2000 });
                            isrun = 0;
                            return;
                        }
                        if (infoOptions.data[i].ExQty > infoOptions.data[i].Qty) {
                            layer.msg("出库数量不能大于库存数量!", {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                    // 验证不超过库存数量
                    if (exqty > stockQty) {
                        layer.msg("出库数量不能大于库存数量!", { icon: 2, time: 2000 });
                            isrun = 0;
                            return;
                        }
                    // 格式化出库数量为4位小数
                    const formattedExQty = exqty.toFixed(4);
                    infoOptions.data[i].ExQty = formattedExQty;
                    // 构建数据对象
                        var item = {
                            SkuNo: infoOptions.data[i].SkuNo,
                            LotNo: infoOptions.data[i].LotNo,
                            Qty: parseInt(infoOptions.data[i].ExQty),
                        Qty: parseFloat(infoOptions.data[i].Qty), // 保留4位小数精度
                            IsBale:infoOptions.data[i].IsBale,
                            IsBelt:infoOptions.data[i].IsBelt,
                        ExQty: parseFloat(formattedExQty),
                        };
                        DataList.push(item); //属性
                    DataList.push(item);
                    }
                    
                    var param = {
@@ -485,8 +483,7 @@
                            for (var i = 0; i < res.data.length; i++) {
                                var TypeNum = 0;
                                
                                switch($("#Type").val())
                                {
                            switch ($("#Type").val()) {
                                    case "0": //成品出库
                                        TypeNum = 0;
                                        console.log(TypeNum)
@@ -504,28 +501,22 @@
                                        break;
                                }
                                //判断单据类型
                                if (TypeNum == 0)
                                {
                                    if (res.data[i].Type == 0)
                                    {
                            if (TypeNum == 0) {
                                if (res.data[i].Type == 0) {
                                        $("#CustomerNamep").html("客户");
                                        $("#CustomerNo").append('<option value =' + res.data[i].CustomerNo + '>' +
                                        res.data[i].CustomerName + '</option>');
                                    }
                                }
                                else if (TypeNum == 1)
                                {
                                    if (res.data[i].Type == 1)
                                    {
                            else if (TypeNum == 1) {
                                if (res.data[i].Type == 1) {
                                        $("#CustomerNamep").html("供应商");
                                        $("#CustomerNo").append('<option value =' + res.data[i].CustomerNo + '>' +
                                        res.data[i].CustomerName + '</option>');
                                    }
                                }
                                else if (TypeNum == 2)
                                {
                                    if (res.data[i].Type == 2)
                                    {
                            else if (TypeNum == 2) {
                                if (res.data[i].Type == 2) {
                                        $("#CustomerNamep").html("货主");
                                        $("#CustomerNo").append('<option value =' + res.data[i].CustomerNo + '>' +
                                        res.data[i].CustomerName + '</option>');
@@ -563,4 +554,5 @@
            })
        </script>
    </body>
</html>
Pda/View/AsnSetting/productEnterQuantity.html
@@ -295,11 +295,25 @@
                        </div>
                        <div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>物料数量:</label>
                            <!-- <label class="layui-form-label" lang>物料数量:</label>
                            <div class="layui-input-block">
                                <input id="SkuQty" type="number" lay-verify="stock" lang langholder
                                    placeholder="请输入物料数量" autocomplete="off" class="layui-input"
                                    oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
                            </div> -->
                            <!-- <div class="layui-input-block">
                                <input id="SkuQty" type="number" lay-verify="stock" lay-affix="number" lang langholder
                                placeholder="请输入物料数量" step="0.0001"
                                autocomplete="off" class="layui-input"
                                oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
                            </div> -->
                            <label class="layui-form-label" lang>物料数量:</label>
                            <div class="layui-input-block">
                                <!-- 允许数字、小数点及最多4位小数 -->
                                <input id="SkuQty" type="number" lay-verify="stock" placeholder="请输入物料数量"
                                    autocomplete="off" class="layui-input"
                                    oninput="value=value.replace(/^(0+)(?=\d)|[^\d.]/g,'').replace(/(\.\d{4})\d+/g, '$1')">
                            </div>
                        </div>
@@ -981,12 +995,17 @@
                        });
                        return;
                    }
                    // 获取输入的值并处理
                    var skuQty = parseFloat($("#SkuQty").val()) || 0;
                    // 确保显示时保留4位小数
                    var formattedQty = skuQty.toFixed(4);
                    var param = {
                        AsnNo: $("#bar1").val(), //出库单据
                        PalletNo: $("#STOCKCODE1").val(), //托盘条码
                        AsnDetailId: parseInt($("#goodSelect1").val()), //入库单明细ID
                        LotNo: $("#goodSelect1").find("option:selected").text(),  //物料批次
                        SkuQty: parseInt($("#SkuQty").val()), //物料数量
                        SkuQty: Number(skuQty), //物料数量
                        Demo: $("#NoticeDemo").val(), //物料数量
                        Origin: "PDA",
                        TableType: xianshiyemian,
Pda/js/public.js
@@ -1,7 +1,8 @@
//  var IP = "http://47.104.149.73:1991";//接口IP
// var IP = "https://localhost:44368";
//var IP = "http://localhost:13243/api";
var IP = "http://localhost:50515/api";
//var IP = "http://localhost:50515/api";
var IP = "https://localhost:5001/api";
//var IP = "http://192.168.1.2:8017/";
// var IP = "http://192.168.10.112/WmsService/";
// var IP = "http://192.168.1.226:8086";
Wms/WMS.BLL/BllQualityServer/QualityInspectServer.cs
@@ -226,7 +226,7 @@
        /// <param name="model"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public string InsertQualitySap(SendQualityVm model)
        /*public string InsertQualitySap(SendQualityVm model)
        {
            try
            {
@@ -341,6 +341,124 @@
                //抛出异常
                throw new Exception("接收SAP下发库存调整单异常:", ex);
            }
        }*/
        public string InsertQualitySap(SendQualityVm model)
        {
            try
            {
                if (string.IsNullOrEmpty(model.orderNo) || model.adjustmentDList.Count <= 0)
                {
                    throw new Exception("参数错误");
                }
                //var asnInfo = Db.Queryable<BllArrivalNotice>().First(w => w.IsDel == "0" && w.OrderCode == model.orderNo);
                //if (asnInfo == null)
                //{
                //    throw new Exception($"未查询到{model.orderNo}对应的入库单信息");
                //}
                //开启事务
                Db.BeginTran();
                foreach (var item in model.adjustmentDList)
                {
                    //var asnDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.IsDel == "0" && w.ASNNo == asnInfo.ASNNo && w.OrderDetailCode == item.lineNo && w.SkuNo == item.skuNo && w.LotNo == item.lotNo);
                    //if (asnDetail == null)
                    //{
                    //    throw new Exception($"未查询到{item.lineNo}对应的入库单明细信息");
                    //}
                    //asnDetail.InspectStatus = item.IsQualified;
                    ////更新入库单明细质检状态
                    //Db.Updateable(asnDetail).ExecuteCommand();
                    //获取物料信息
                    var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == item.skuNo);
                    if (sku == null)
                    {
                        throw new Exception($"物料编码为{item.skuNo}的物料信息不存在,请核查!");
                    }
                    string toDayTime = DateTime.Now.ToString("yyyyMMdd");
                    var maxInspectNo = model.orderNo;
                    //var maxInspectNo = Db.Queryable<BllQualityInspect>().Where(m => m.IsDel == "0" && m.InspectNo.Contains("SAP")).Max(m => m.InspectNo);
                    //if (string.IsNullOrWhiteSpace(maxInspectNo))
                    //{
                    //    maxInspectNo = "SAP" + toDayTime + "0001";
                    //}
                    //else
                    //{
                    //    var lotStr = maxInspectNo.Substring(3, 8);
                    //    if (lotStr == toDayTime)
                    //    {
                    //        maxInspectNo = "SAP" + toDayTime + (int.Parse(maxInspectNo.Replace("SAP", "").Substring(8, 4)) + 1).ToString().PadLeft(4, '0');
                    //    }
                    //    else
                    //    {
                    //        maxInspectNo = "SAP" + toDayTime + "0001";
                    //    }
                    //}
                    var qualityModel = new BllQualityInspect
                    {
                        ASNNo = "",
                        InspectNo = maxInspectNo,
                        SkuNo = item.skuNo,
                        SkuName = item.skuName,
                        Standard = sku.Standard,
                        LotNo = item.lotNo,
                        IsQualified = item.IsQualified,
                        Origin = "SAP",
                        FailQty = 0,
                        PassQty = 0
                    };
                    //查找库存信息
                    var stockDetailList = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.SkuNo == item.skuNo && w.LotNo == item.lotNo).ToList();
                    foreach (var datailItem in stockDetailList)
                    {
                        List<DataBoxInfo> boxList = Db.Queryable<DataBoxInfo>().Where(a => a.IsDel == "0" && a.SkuNo == item.skuNo && a.LotNo == item.lotNo && a.PalletNo == datailItem.PalletNo).ToList();
                        foreach (var boxItem in boxList)
                        {
                            if (item.IsQualified == "0")//不合格
                            {
                                boxItem.InspectStatus = "2";
                            }
                            else//合格
                            {
                                boxItem.InspectStatus = "1";
                            }
                        }
                        //更新箱码明细质检状态
                        Db.Updateable(boxList).ExecuteCommand();
                        if (item.IsQualified == "0")//不合格
                        {
                            datailItem.InspectStatus = "2";
                            //不合格数量
                            qualityModel.FailQty += datailItem.Qty;
                        }
                        else//合格
                        {
                            datailItem.InspectStatus = "1";
                            //合格数量
                            qualityModel.PassQty += datailItem.Qty;
                        }
                        //更新库存明细质检状态
                        Db.Updateable(datailItem).ExecuteCommand();
                    }
                    //添加质检变更记录
                    Db.Insertable(qualityModel).ExecuteCommand();
                }
                //提交事务
                Db.CommitTran();
                return "0";
            }
            catch (Exception ex)
            {
                //回滚事务
                Db.RollbackTran();
                //抛出异常
                throw new Exception("接收SAP下发库存调整单异常:", ex);
            }
        }
        #endregion