| | |
| | | //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"; |
| | |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) B2025080501000035 tuopan T2500037 |
| | | }, function () { doing = true }); |
| | | } |
| | | }); |
| | |
| | | |
| | | } |
| | | |
| | | 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, |
| | |
| | | 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, |
| | |
| | | <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> |
| | |
| | | page: true, |
| | | limit: pageCnt, |
| | | limits: pageLimits, |
| | | cellMinWidth: 60, //全局定义常规单元格的最小宽度,layui 2.2.1 新增 |
| | | cellMinWidth: 60, |
| | | cols: [ |
| | | [{ |
| | | field: 'SkuNo', |
| | |
| | | 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:'是否裹包', |
| | |
| | | // 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) { |
| | |
| | | // } |
| | | // } |
| | | // }); |
| | | |
| | | //初始渲染 |
| | | refreshTable(null); |
| | | var $ = layui.$; |
| | |
| | | } |
| | | 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 = { |
| | |
| | | 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) |
| | |
| | | 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>'); |
| | |
| | | }) |
| | | </script> |
| | | </body> |
| | | |
| | | </html> |
| | |
| | | </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> |
| | | |
| | |
| | | }); |
| | | 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, |
| | |
| | | // 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"; |
| | |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public string InsertQualitySap(SendQualityVm model) |
| | | /*public string InsertQualitySap(SendQualityVm model) |
| | | { |
| | | try |
| | | { |
| | |
| | | //抛出异常 |
| | | 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 |
| | | |