Pda/View/AsnSetting/printLabels.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Model/ModelVm/BllAsnVm/BoxInfoVm.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Wms/Controllers/PdaAsnController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Pda/View/AsnSetting/printLabels.html
New file @@ -0,0 +1,312 @@ <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta name="viewport" content="user-scalable=0,width=device-width,initial-scale=1.0" /> <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665, minimum-scale=0.5, maximum-scale=2.0, user-scalable=no" /> --> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Boxline PDA</title> <link rel="stylesheet" href="/layui/css/layui.css" /> <link rel="stylesheet" href="/css/style.css" /> <script src="/js/adaptive.js"></script> <link rel="stylesheet" href="/css/my.css" /> <link rel="stylesheet" href="/css/adapter.css" /> <style type="text/css"> .layout-bill-info { height: 255px; } .layout-tbl-submit { margin-top: 10px; } </style> </head> <body> <div id="" class="main-content"> <div id="" class="layout-title"> <table border="" cellspacing="" cellpadding=""> <tr> <td class="img-back"><a href="../index.html"><img src="/assets/back.jpg" ></a></td> <td class="title-text">线边标签</td> <td class="title-menu-icon"><img id="menuImg" src="/assets/menu.jpg" ></td> </tr> </table> </div> <div id="" class="layout-sub-content"> <div id="menuList" class="menu"> <ul class="" style="text-align: center;"> <li><a href="../index.html">主页</a></li> <li><a href="../login.html">重新登录</a></li> </ul> </div> <div> <button id="click" class="layout-btn" type="button" style="background-color: #999; width: 100%;text-align: center; margin-top: 2px;">连接蓝牙</button> </div> <div id="zongDiv2" class="layout-bill-info" style="height: 255px;"> <form class="layui-form" id="form2" action=""> <div id="" class="layui-form-item layout-input"> <label class="layui-form-label" lang>物料编码:</label> <div class="layui-input-block"> <input id="skuNo" type="text" placeholder="" autocomplete="off" class="layui-input" > </div> </div> <div class="layui-form-item layout-input" style="margin-top: 10px;"> <label class="layui-form-label">物料名称:</label> <div class="layui-input-block"> <input id="skuName" type="text" placeholder="" autocomplete="off" class="layui-input" > </div> </div> <div class="layui-form-item layout-input" style="margin-top: 10px;"> <label class="layui-form-label">批次号:</label> <div class="layui-input-block"> <input id="lotNo" type="text" placeholder="" autocomplete="off" class="layui-input" > </div> </div> <div class="layui-form-item layout-input" style="margin-top: 10px;"> <label class="layui-form-label">生产日期:</label> <div class="layui-input-block"> <input id="timeFrom" type="date" placeholder="请选择日期" autocomplete="off" class="measureDate" style="padding-left: 0px;"> </div> </div> <div class="layui-form-item layout-input" style="margin-top: 10px;"> <label class="layui-form-label">有效期:</label> <div class="layui-input-block"> <input id="timeEnd" type="date" placeholder="请选择日期" autocomplete="off" class="measureDate" style="padding-left: 0px;"> </div> </div> <div class="layui-form-item layout-input" style="margin-top: 10px;"> <label class="layui-form-label">箱内数量:</label> <div class="layui-input-block"> <input id="skuNum" type="text" placeholder="" autocomplete="off" class="layui-input" > </div> </div> <table class="layout-tbl-submit" border="" cellspacing="" cellpadding=""> <tr> <td style="width: 23%;"></td> <td> <button id="click2" class="layout-btn layout-btn-red" lang type="button" lay-submit lay-filter="formBind">打印标签</button> </td> <td style="width: 33%;"></td> </tr> </table> </form> </div> <div id="" class="layout-bill-info"> </div> </div> </div> <script src="/js/jquery-3.5.1.min.js"></script> <script src="/layui/layui.js"></script> <script src="/js/public.js"></script> <script src="/js/jquery.cookie.js"></script> <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script> <script type="text/javascript"> let date = new Date(); let yyyy = date.getFullYear(); let MM = (date.getMonth() + 1) < 10 ? ("0" + (date.getMonth() + 1)) : (date.getMonth() + 1); let dd = date.getDate() < 10 ? ("0" + date.getDate()) : date.getDate(); // let HH = date.getHours() < 10 ? ("0" + date.getHours()) : date.getHours(); // let mm = date.getMinutes() < 10 ? ("0" + date.getMinutes()) : date.getMinutes(); let curDay = yyyy + '-' + MM + '-' + dd ;//+ 'T' + HH + ':' + mm; $('.measureDate').val(curDay); console.log(curDay); </script> <script> var dataLists; layui.use(['form', 'jquery'], function() { var form = layui.form // 链接蓝牙 $("#menuImg").click(function(e){ e.stopPropagation() if($("#menuList").is(":hidden")){ $("#menuList").show() }else{ $("#menuList").hide() } }) $('body').click(function(){ $("#menuList").hide() }) //物料编码失去焦点事件 $("#skuNo").on('blur',function (e) { if ($("#skuNo").val() == "") { layer.msg('请输入物料编码', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return } getSkuInfo(); }); //物料名称失去焦点事件 $("#skuName").on('blur',function (e) { if ($("#skuName").val() == "") { layer.msg('请输入物料编码名称', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return } getSkuInfo(); }); // 验证获取物料信息 function getSkuInfo(){ var param = { SkuNo:$("#skuNo").val(), SkuName:$("#skuName").val() } synData(IP + "/PdaAsn/getSkuInfo", param, 'post', function (res) { console.log(JSON.stringify(res)) if (res.code == 0 && res.data != null) { //成功 console.log(res.data); $("#skuNo").val(res.data.SkuNo); $("#skuName").val(res.data.SkuName); }else{ layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } }); } }) document.addEventListener("UniAppJSBridgeReady", function () { document.getElementById("click").addEventListener("click", function () { let data = { type: "search" }; console.log("给 uni-app 发送数据", data); uni.postMessage({ data: data, }); }); document.getElementById("click2").addEventListener("click", function () { // 验证必填项 if ($("#skuNo").val() == "") { layer.msg('物料编码不可为null', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if ($("#skuName").val() == "") { layer.msg('物料名称不可为null', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if ($("#lotNo").val() == "") { layer.msg('批次号不可为null', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if ($("#skuNum").val() == "") { layer.msg('箱内数量不可为null', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } // 参数 var param = { SkuNo:$("#skuNo").val(), SkuName:$("#skuName").val(), LotNo:$("#lotNo").val(), TimeFrom:$("#timeFrom").val(), TimeEnd:$("#timeEnd").val(), SkuNum:$("#skuNum").val() } // 存储新标签 synData(IP + "/PdaAsn/AddLabels", param, 'post', function (res) { console.log(JSON.stringify(res)) if (res.code == 0 && res.data != null) { //成功 console.log(res.data); dataLists = res.data; }else{ layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } }); let data = { type: "print", listData:dataLists // { // SkuNo:'541100554848', // SkuName:'葡萄糖葡萄糖葡萄糖葡萄糖葡萄糖', // LotNo:'120326', // Date1:'2025-04-10', // Date2:'2026-04-10', // BoxNo:['T2300001','T2300002','T2300003'], // } // lstData: { // name: "Iuhuy", // avatar: // "http://thirdwx.qlogo.cn/mmopen/vi_32/EURpungADj4vP3UczBVvD1DcEUt9q7WFqc6mZlSZoXoS9PyaPicnX8pjmic0rLbmwYCSa247gibINd1dWr0ic1QTvw/132", // }, }; console.log("给 uni-app 发送数据", data); uni.postMessage({ data: data, }); }); }); </script> <script type="text/javascript"> // window.jsfunction = function (data) { // let canshutype = typeof data; // let mes = typeof data == "object" ? JSON.stringify(data) : data; // alert("收到参数" + canshutype); // document.getElementById("messageText").innerHTML = // "恭喜你,接收到你的参数\n,参数是" + canshutype + "参数如下:\n" + mes; // console.log("data", data); // }; </script> </body> </html> Wms/Model/ModelVm/BllAsnVm/BoxInfoVm.cs
@@ -222,4 +222,18 @@ } /// <summary> /// 线边库物料标签 /// </summary> public class LabelsVm { public string SkuNo { get; set; } public string SkuName { get; set; } public string LotNo { get; set; } public string TimeFrom { get; set; } public string TimeEnd { get; set; } public string SkuNum { get; set; } public int? userId { get; set; } } } Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -25,6 +25,10 @@ using System.Security.Policy; using Newtonsoft.Json; using Utility.Tools; using Model.ModelDto.SysDto; using Model.ModelVm.SysVm; using System.Security.Cryptography.X509Certificates; using AutoMapper.Configuration.Annotations; namespace WMS.BLL.BllPdaServer { @@ -2868,13 +2872,6 @@ } #endregion // 获取单据列表 public List<ArrivalNoticeDto> GetArrivalNotices(ArrivalNoticeVm model) { @@ -2909,11 +2906,6 @@ throw ex; } } // 根据箱码或托盘号获取箱支信息 liudl public List<BoxInfoDto> GetBoxInfos(BoxInfoVm model) @@ -6812,5 +6804,359 @@ #endregion #region 线边标签 /// <summary> /// 根据物料编码、名称获取物料信息 /// </summary> /// <param name="model">编码 名称</param> /// <returns>物料详细信息</returns> public MaterialsDto GetSkuInfo(GetMaterialsVm model) { try { if (string.IsNullOrEmpty(model.SkuNo) && string.IsNullOrEmpty(model.SkuName)) { throw new Exception("请输入物料编码或物料名称!"); } var skuModels = Db.Queryable<SysMaterials>().Where(m => (m.SkuNo == model.SkuNo || m.SkuName == model.SkuName) && m.IsDel == "0").Select< MaterialsDto>().ToList(); if (skuModels.Count <= 0) { throw new Exception("物料不存在!"); } return skuModels.First(); } catch (Exception ex) { throw ex; } } /// <summary> /// 生成条码标签 /// </summary> /// <param name="model"></param> /// <returns></returns> /// <exception cref="Exception"></exception> public List<BllBoxInfo> AddLabels(LabelsVm model) { try { if (decimal.TryParse(model.SkuNum, out decimal skuQty)) { if (skuQty <= 0) { throw new Exception("箱内数量不能小于等于0"); } } else { throw new Exception("箱内数量请输入数字!"); } // 验证物料信息是否存在 var skuModels = Db.Queryable<SysMaterials>().Where(m => (m.SkuNo == model.SkuNo || m.SkuName == model.SkuName) && m.IsDel == "0").Select<MaterialsDto>().ToList(); if (skuModels.Count <= 0) { throw new Exception("物料不存在!"); } #region var skuModel = skuModels.First(); var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuModel.PackagNo); if (pack == null) { throw new Exception("未查询到当前物料的包装信息"); } var packStr = ""; if (!string.IsNullOrWhiteSpace(pack.L1Name)) { packStr += pack.L1Num + "/" + pack.L1Name; } if (!string.IsNullOrWhiteSpace(pack.L2Name)) { packStr += "-" + pack.L2Num + "/" + pack.L2Name; } if (!string.IsNullOrWhiteSpace(pack.L3Name)) { packStr += "-" + pack.L3Num + "/" + pack.L3Name; } if (!string.IsNullOrWhiteSpace(pack.L4Name)) { packStr += "-" + pack.L4Num + "/" + pack.L4Name; } if (!string.IsNullOrWhiteSpace(pack.L5Name)) { packStr += "-" + pack.L5Num + "/" + pack.L5Name; } #endregion #region 包装查询 var bNum = 0;//箱物品数量 var zNum = 0;//支物品数量 var packLevel = 0; if (pack.L2Num.HasValue) { if (pack.L2Name != "托") { packLevel = 1;//JC34项目只有一级标签 bNum = Convert.ToInt32(pack.L2Num); } } if (pack.L1Num.HasValue) { if (packLevel == 0) { packLevel = 1; bNum = Convert.ToInt32(pack.L1Num); } zNum = Convert.ToInt32(pack.L1Num); } if (packLevel < 1)//包装等级小于1,按照1级标签打印 { throw new Exception("包装信息有误,小于一级"); } if (skuQty > bNum * 5) { throw new Exception("箱内数量大于包装5倍,不可打印"); } #endregion var modelList = new List<BllBoxInfo>(); var label = Db.Queryable<BllBoxInfo>().Where(m => m.LotNo == model.LotNo && m.SkuNo == model.SkuNo && m.IsDel == "0").ToList(); Db.BeginTran(); if (packLevel == 1) { #region 一级包装 int labelNum = 1; labelNum = int.Parse(Math.Ceiling(skuQty / bNum).ToString());//标签数量 #region 获取/生成批次号 string maxLotNoStr = ""; //批次号 string maxBoxCode = ""; //箱码号 maxLotNoStr = model.LotNo; maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo); #endregion for (int i = 1; i <= labelNum; i++) { decimal boxQty = 0; if (i == labelNum) { // 最后一个条码 var s = bNum * (i - 1); if (bNum > skuQty - s) { boxQty = skuQty - s;// 数量 } else { boxQty = bNum;// 数量 } } else { boxQty = bNum; // 数量 } //获取箱码 if (string.IsNullOrWhiteSpace(maxBoxCode)) { var str = "B" + maxLotNoStr + "000001"; //批号+ 流水 B 230201 0001 000001 maxBoxCode = str; } else { maxBoxCode = maxBoxCode.Substring(0, maxBoxCode.Length - 6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0'); } // 将条码保存到原料条码表 var labelModel = new BllBoxInfo() { BoxNo = maxBoxCode, Qty = boxQty, FullQty = bNum, Status = "0", SkuNo = model.SkuNo, SkuName = model.SkuName, LotNo = maxLotNoStr, Standard = skuModel.Standard, PackageStandard = packStr, InspectMark = "0", BitBoxMark = bNum > boxQty ? "1" : "0", InspectStatus = "0", ProductionTime = DateTime.Parse(model.TimeFrom), StoreTime = DateTime.Parse(model.TimeEnd), ExpirationTime = DateTime.Parse(model.TimeEnd), Origin = "WMS生成", CreateUser = (int)model.userId, CreateTime = DateTime.Now, }; Db.Insertable(labelModel).ExecuteCommand(); modelList.Add(labelModel); } #endregion } else //(packLevel == 2) { #region 二级包装 if (skuQty > bNum * 5) { throw new Exception("箱内数量大于包装5倍,不可打印"); } var qty2 = skuQty; int labelNum2 = 1; //生产箱条码数量 labelNum2 = int.Parse(Math.Ceiling(qty2 / bNum).ToString()); var ss = bNum / zNum; //每箱支标签数量 var labelNumZ2 = Math.Ceiling((decimal)ss); #region 获取/生成批次号 string maxCodestr2 = ""; //批次 string maxboxcode2 = ""; //箱码 string maxboxcode3 = ""; //支码 maxCodestr2 = model.LotNo; maxboxcode2 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo); maxboxcode3 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo3);//支号 #endregion for (int i = 1; i <= labelNum2; i++)//箱码标签 { //箱内数量 decimal boxQty = 0; if (i == labelNum2) { // 最后一个条码 var s = bNum * (i - 1); if (bNum > qty2 - s) { boxQty = qty2 - s;// 数量 } else { boxQty = bNum;// 数量 } } else { boxQty = bNum; // 数量 } //获取箱码 if (string.IsNullOrWhiteSpace(maxboxcode2)) { maxboxcode2 = "B" + maxCodestr2 + "000001"; // 箱号 批号+第几箱 } else { maxboxcode2 = maxboxcode2.Substring(0, 11) + (int.Parse(maxboxcode2.Substring(11, 6)) + 1).ToString().PadLeft(6, '0'); } //获取箱内支标签数量 if (i == labelNum2) { var isGo2 = false; var sl = 0; for (int j = 1; j <= labelNumZ2; j++) { if (isGo2) { break; } var s = bNum * (i - 1); var s2 = zNum * (j - 1); if (zNum >= qty2 - s - s2) { isGo2 = true; } sl++; } labelNumZ2 = sl; } for (int j = 1; j <= labelNumZ2; j++)//最小单位标签 { decimal d = zNum; if (i == labelNum2) { var s = bNum * (i - 1); var s2 = zNum * (j - 1); if (zNum >= qty2 - s - s2) { d = qty2 - s - s2; // 数量 } } if (string.IsNullOrWhiteSpace(maxboxcode3)) { maxboxcode3 = "Z" + maxCodestr2 + "0001"; // 支号 批号+第几箱 } else { maxboxcode3 = maxboxcode3.Substring(0, 11) + (int.Parse(maxboxcode3.Substring(11, 4)) + 1).ToString().PadLeft(4, '0'); } // 将条码保存到原料条码表 var labelModel = new BllBoxInfo() { BoxNo = maxboxcode2, BoxNo3 = maxboxcode3, Qty = d, FullQty = bNum, Status = "0", SkuNo = model.SkuNo, SkuName = skuModel.SkuName, LotNo = maxCodestr2, Standard = skuModel.Standard, PackageStandard = packStr, InspectMark = "0", BitBoxMark = bNum > boxQty ? "1" : "0", InspectStatus = "0", ProductionTime = DateTime.Parse(model.TimeFrom), StoreTime = DateTime.Parse(model.TimeEnd), ExpirationTime = DateTime.Parse(model.TimeEnd), Origin = "WMS生成", CreateUser = (int)model.userId, CreateTime = DateTime.Now, }; Db.Insertable(labelModel).ExecuteCommand(); modelList.Add(labelModel); } } #endregion } Db.CommitTran(); return modelList; } catch (Exception ex) { Db.RollbackTran(); throw new Exception(ex.Message); } } #endregion } } Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs
@@ -7,6 +7,8 @@ using Model.ModelDto.PdaDto; using WMS.Entity.BllAsnEntity; using Model.ModelDto.DataDto; using Model.ModelDto.SysDto; using Model.ModelVm.SysVm; namespace WMS.IBLL.IPdaServer { @@ -38,6 +40,12 @@ #endregion // 根据物料编码、名称获取物料信息。 MaterialsDto GetSkuInfo(GetMaterialsVm model); // 生成线边库箱码,返回箱码信息。 List<BllBoxInfo> AddLabels(LabelsVm model); // 获取单据列表 List<ArrivalNoticeDto> GetArrivalNotices(ArrivalNoticeVm model); Wms/Wms/Controllers/PdaAsnController.cs
@@ -8,6 +8,7 @@ using Model.ModelVm; using Model.ModelVm.BllAsnVm; using Model.ModelVm.PdaVm; using Model.ModelVm.SysVm; using Newtonsoft.Json; using System; using System.Security.Claims; @@ -323,8 +324,6 @@ #endregion #region 公用方法 /// <summary> @@ -758,7 +757,6 @@ #endregion #region 平库入库 /// <summary> /// 平库确认入库 @@ -876,5 +874,58 @@ #endregion #region 线编标签 /// <summary> /// 平库确认入库 /// </summary> /// <param name="model">物料编码;物料名称</param> /// <returns></returns> [HttpPost] public IActionResult GetSkuInfo(GetMaterialsVm model) { try { var models = _PdaAsnSvc.GetSkuInfo(model); return Ok(new { code = 0, msg = "获取物料信息成功!", data = models }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// <summary> /// 生成新标签 并返回打印数据 /// </summary> /// <param name="model">标签信息</param> /// <returns>打印数据</returns> [HttpPost] public IActionResult AddLabels(LabelsVm 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("未获取到用户信息"); } model.userId = int.Parse(UserId); var models = _PdaAsnSvc.AddLabels(model); return Ok(new { code = 0, msg = "箱码生成成功!", data = models }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion } }