Pda/View/AsnSetting/WorkshopIn.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Pda/View/SoSetting/ExNoticeOut.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Model/ModelVm/PdaVm/PdaAsnVm.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/HttpServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.Entity/BllAsnEntity/BllPalletBind.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Wms/Controllers/PdaAsnController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Wms/Controllers/PdaSoController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Wms/Controllers/UpApiController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Pda/View/AsnSetting/WorkshopIn.html
@@ -0,0 +1,571 @@ <!DOCTYPE html> <html> <head> <meta name="viewport" content="user-scalable=0,width=device-width,initial-scale=1.0" /> <meta charset="UTF-8" /> <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665, minimum-scale=0.5, maximum-scale=1, user-scalable=no" /> --> <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665" /> --> <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" /> <style type="text/css"> td { word-break: break-all; word-wrap: break-word; } .layui-form-switch { margin-top: 0; } /* 标签样式 */ .tableyang-this a { margin: 10px 10px 0px 0px; line-height: 30px; width: 100px; color: #999; text-align: center; float: left; background: #f7f7f7; user-select: none; position: relative; z-index: 1; cursor: pointer; border-radius: 5px; border: 1px solid #ccc; transition: all 0.3s ease; } .tableyang-this a.hover { color: #5298ff; background-color: #eff2ff; border: 1px solid #5298ff; } /* 内容居中 */ .tableyang-tab { display: flex; /* justify-content: center; */ /* align-items: center; */ flex-direction: column; height: 90vh; } /* 必用样式 */ .tableyang-2, .tableyang-3 { display: none; } ul { list-style-type: none; padding: 0; } li { cursor: pointer; background-color: lightgray; padding: 10px; margin-bottom: 5px; } </style> <link rel="stylesheet" href="/css/adapter.css" /> <script src="../../js/jquery.js"></script> <script src="../../js/jquery-3.5.1.min.js"></script> </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" lang>车间入库</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" lang>主页</a></li> <!-- <li><a href="productEnterConfirm.html">入库信息确认</a></li> --> <li><a href="../login.html" lang>重新登录</a></li> </ul> </div> <button id="option1" class="layout-btn" type="button">标签</button> <button id="option2" class="layout-btn" type="button">数量</button> <br /><br /> <!-- 有码 --> <div id="content1"> <div id="zongDiv" class="layout-bill-info" style="height: 285px;"> <form class="layui-form" action=""> <div id="" class="layui-form-item layout-input"> <label class="layui-form-label" lang>托盘条码:</label> <div class="layui-input-block"> <input id="PalletNo" type="text" lay-verify="stock" lang langholder placeholder="请扫描托盘条码" autocomplete="off" class="layui-input"> </div> </div> <div id="BOX" class="layui-form-item layout-input"> <label class="layui-form-label" lang>外箱条码:</label> <div class="layui-input-block"> <input id="BoxCode" type="text" lay-verify="required" lang langholder placeholder="请扫描外箱条码" autocomplete="off" class="layui-input"> </div> </div> <div id="" class="layui-form-item layout-input"> <label class="layui-form-label" lang>数量:</label> <div class="layui-input-block"> <input id="BoxNum" type="number" lay-verify="required" lang langholder placeholder="请输入数量" autocomplete="off" class="layui-input" oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"> </div> </div> <div id="" class="layui-form-item layout-dropdownlist"> <label class="layui-form-label" lang>车间:</label> <div class="layui-input-block" id="selectAreaDiv"> <select id="area" lay-filter="getarea" lay-search> <option value="B06">1002</option> <option value="B09">1003一楼</option> <option value="B07">1003二楼</option> </select> <img src="/assets/down_arraw.png"> </div> </div> <table class="layout-tbl-input" border="" cellspacing="" cellpadding=""> <tr> <td> <div id="" class="layui-form-item layout-boxinfo"> <label class="layui-form-label" lang>批次:</label> <div class="layui-input-block"> <input id="LotNo" type="text" disabled placeholder="" autocomplete="off" class="layui-input"> </div> </div> </td> <td> <div id="" class="layui-form-item layout-boxinfo"> <label class="layui-form-label" lang>物料名称:</label> <div class="layui-input-block"> <input id="SkuName" type="text" disabled placeholder="" autocomplete="off" class="layui-input"> </div> </div> </td> </tr> </table> <table class="layout-tbl-submit" border="" cellspacing="" cellpadding=""> <tr> <td style="width: 23%;"></td> <td> <button 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> <!-- 无码 --> <div id="content2"> <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" lay-verify="stock" lang langholder placeholder="请输入物料编码" autocomplete="off" class="layui-input"> </div> </div><div id="" class="layui-form-item layout-input"> <label class="layui-form-label" lang>批次号:</label> <div class="layui-input-block"> <input id="LotNo2" type="text" lay-verify="stock" lang langholder placeholder="请输入批次" autocomplete="off" class="layui-input"> </div> </div> <div id="" class="layui-form-item layout-input"> <label class="layui-form-label" lang>托盘条码:</label> <div class="layui-input-block"> <input id="PalletNo2" type="text" lay-verify="stock" lang langholder placeholder="请扫描托盘条码" autocomplete="off" class="layui-input"> </div> </div> <div id="" class="layui-form-item layout-input"> <label class="layui-form-label" lang>物料数量:</label> <div class="layui-input-block"> <input id="SkuQty2" type="number" lay-verify="stock" lang langholder placeholder="请输入物料数量" autocomplete="off" class="layui-input" oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"> </div> </div> <div id="" class="layui-form-item layout-dropdownlist"> <label class="layui-form-label" lang>车间:</label> <div class="layui-input-block" id="selectAreaDiv2"> <select id="area2" lay-filter="getarea2" lay-search> <option value="B06">1002</option> <option value="B09">1003一楼</option> <option value="B07">1003二楼</option> </select> <img src="/assets/down_arraw.png"> </div> </div> <table class="layout-tbl-submit" border="" cellspacing="" cellpadding=""> <tr> <td style="width: 23%;"></td> <td> <button 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> <br> <br> <div id="demodiv1"> <br><br><br><br><br><br><br> </div> <!-- <div id="" class="cut-line"> <img src="/assets/fengexian.png"> </div> --> <!-- <div class="layout-tbl-paging" id=""> <table id="tableBoxList1" class="tbl-box-list" border="" cellspacing="" cellpadding=""> <tr> <th lang style="width: 15%;">物料编码</th> <th lang style="width: 35%;">物料名称</th> <th lang style="width: 25%;">批次</th> <th lang style="width: 15%;">物料数量</th> <th lang style="width: 10%;">操作</th> </tr> <tr id="boxCell" style="display: none;"> <td name="code">AG000001</td> <td name="name">疫苗名称名称名称</td> <td name="lotNo">批次号</td> <td name="num">30</td> <td name="del"> <div id="" class="tbl-btn-del" lang> 删除 </div> </td> </tr> </table> <table id="tableBoxPages1" class="tbl-box-pages" border="" cellspacing="" cellpadding=""> <tr> <td class="page-prev">上一页</td> <td class="page-num page-num-select">1</td> <td class="page-num">2</td> <td class="page-num">3</td> <td class="page-num">4</td> <td class="page-num">5</td> <td class="page-next">下一页</td> </tr> </table> </div> --> </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/language.js"></script> <script src="/js/jquery.cookie.js"></script> <script> layui.use(['form', 'jquery'], function () { var form = layui.form /* 标签切换代码 */ $('#demodiv').hide(); $('#demodiv1').hide(); var xianshiyemian = 0; $('#option1').attr("style", "background-color: red;width: 50%;float: left;text-align: center;"); //选中后颜色 $('#option2').attr("style", "background-color: #999;width: 50%;float: right;text-align: center;"); //默认颜色 $('#content2').hide(); $(document).ready(function () { $('#option1').click(function () { // qingkong(); xianshiyemian = 0; $('#content1').show(); $('#option1').attr("style", "background-color: red;width: 50%;float: left;text-align: center;"); //选中后颜色 $('#content2').hide(); $('#option2').attr("style", "background-color: #999;width: 50%;float: right;text-align: center;"); //默认颜色 }); $('#option2').click(function () { // qingkong(); xianshiyemian = 1; $('#content1').hide(); $('#option1').attr("style", "background-color: #999;width: 50%;float: left;text-align: center;"); //默认颜色 $('#content2').show(); $('#option2').attr("style", "background-color: red;width: 50%;float: right;text-align: center;"); //选中后颜色 }); }); /*——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————*/ initLanguage() setLanguage() //是否连续组托 isContinue = "0"; // 托盘码文本改变时触发 $("#PalletNo").on('input', function () { if ($("#PalletNo").val() == "" || $("#PalletNo").val().length < 8) { return; } if ($("#PalletNo").val().length >= 8) { $("#PalletNo").val($("#PalletNo").val().substr(-8)) } checkPalletStat() }) // 托盘码文本改变时触发-数量 $("#PalletNo1").on('input', function () { if ($("#PalletNo1").val() == "" || $("#PalletNo1").val().length < 8) { return; } if ($("#PalletNo1").val().length >= 8) { $("#PalletNo1").val($("#PalletNo1").val().substr(-8)) } checkPalletStat() }) // 判断托盘码是否可用 function checkPalletStat() { if (xianshiyemian == 0) { var param = { "PalletNo": $("#PalletNo").val() } sendData(IP + "/PdaAsn/IsEnablePalletNo", param, 'post', function (res) { if (res.code == 0) { $("#BoxCode").focus(); } else { layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { }); } }); } else if (xianshiyemian == 1) { var param = { "PalletNo": $("#PalletNo1").val() } sendData(IP + "/PdaAsn/IsEnablePalletNo", param, 'post', function (res) { if (res.code == 0) { $("#SkuQty").focus(); } else { layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { }); } }); } } //箱码回车事件 $("#BoxCode").keydown(function (e) { if (e.keyCode === 13) { if ($("#BoxCode").val() == "") { layer.msg('请先扫描箱码', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return } checkBoxInfo() } }); //箱回车事件 function checkBoxInfo() { var param = { "BoxNo": $("#BoxCode").val(), } sendData(IP + "/PdaAsn/GetWmsBoxInfos", param, 'post', function (res) { if (res.code == 0) { //成功 $("#BoxNum").val(res.data[0].Qty); $("#SkuName").val(res.data[0].SkuName); $("#LotNo").val(res.data[0].LotNo); } else { //不成功 layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); } }); } //绑定到托盘事件 form.on('submit(formBind)', function (data) { if (xianshiyemian == 0) { if ($("#PalletNo").val() == "") { layer.msg('请扫描托盘条码', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if ($("#BoxCode").val() == "") { layer.msg('请扫描外箱条码', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } var param = { PalletNo: $("#PalletNo").val(), BoxNo: $("#BoxCode").val(), SkuQty: parseFloat($("#BoxNum").val()), //物料数量 AreaNo:$("#area").val(), TableType: xianshiyemian, } console.log(param) //组盘 sendData(IP + "/PdaAsn/ChejianIn", param, 'post', function (res) { if (res.code == 0) { //成功 layer.msg(res.msg, { icon: 1, time: 1000 //2秒关闭(如果不配置,默认是3秒) }, function () { $("#BoxCode").val(""); $("#BoxNum").val(""); $("#SkuName").val(""); $("#LotNo").val(""); }); } else { //不成功 layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { //回调 }); } }); } else if (xianshiyemian == 1) { if ($("#bar1").val() == "") { layer.msg('请选择入库单', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if ($("#SkuNo").val() == "") { layer.msg('请输入物料', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if ($("#PalletNo2").val() == "") { layer.msg('请扫描托盘条码', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } var param = { PalletNo: $("#PalletNo2").val(), SkuNo: $("#SkuNo").val(), LotNo: $("#LotNo2").val(), SkuQty: parseFloat($("#SkuQty2").val()), //物料数量 AreaNo:$("#area").val(), TableType: xianshiyemian, } console.log(param) //组盘 sendData(IP + "/PdaAsn/ChejianIn", param, 'post', function (res) { if (res.code == 0) { //成功 layer.msg(res.msg, { icon: 1, time: 1000 //2秒关闭(如果不配置,默认是3秒) }, function () { $("#PalletNo2").val(""); $("#SkuNo").val(""); $("#SkuQty2").val(""); $("#LotNo2").val(""); }); } else { //不成功 layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { //回调 }); } }); } return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 }); /*——————————————————————————————————————————————————————————*/ $("#menuImg").click(function (e) { e.stopPropagation() if ($("#menuList").is(":hidden")) { $("#menuList").show() } else { $("#menuList").hide() } }) $('body').click(function () { $("#menuList").hide() }) }) </script> </body> </html> Pda/View/SoSetting/ExNoticeOut.html
@@ -147,13 +147,22 @@ //选中单据事件 form.on('select(getbar)', function (data) { $("#PalletNo").empty() $("#PalletNo").append('<option value =>' + '</option>'); form.render('select'); if (data.value == "") { return; } updateGoodList(); }); //选中单据明细事件 form.on('select(goodSelect)', function (data) { $("#PalletNo").empty() $("#PalletNo").append('<option value =>' + '</option>'); form.render('select'); }); $("#selectDiv").click(function () { var input = $('select[id="bar"]').next().find('.layui-select-title input') var val = input.val() @@ -163,6 +172,17 @@ $('select[id="bar"]').next().find('.layui-select-title input').val(val) }) }) $("#selectPalletNo").click(function () { var input = $('select[id="PalletNo"]').next().find('.layui-select-title input') var val = input.val() //先更新一下出库单 updatePalletNoList(function (data) { $('select[id="PalletNo"]').next().addClass('layui-form-selected') $('select[id="PalletNo"]').next().find('.layui-select-title input').val(val) }) }) //初始化渲染 出库单 function updateBillList(callback) { var input = $('select[id="bar"]').next().find('.layui-select-title input') @@ -271,9 +291,10 @@ form.render('select'); var param = { soNo:$("#bar").val() SoNo:$("#bar").val(), SoDetailId:$("#goodSelect").val(), }; sendData(IP + "/PdaCr/GetPalletNoListBySoNo", param, 'get', function (res) { sendData(IP + "/PdaSo/GetPalletListBySo", param, 'post', function (res) { if (res.code == 0) { //成功 for (var i = 0; i < res.data.length; i++) { $("#PalletNo").append('<option value =' + res.data[i] + '>' + res.data[i]+ Wms/Model/ModelVm/PdaVm/PdaAsnVm.cs
@@ -24,7 +24,8 @@ /// Desc:外箱条码 /// </summary> public string BoxNo { get; set; } public string SkuNo { get; set; } /// <summary> /// Desc:是否连续组托 /// </summary> @@ -100,6 +101,11 @@ /// </summary> public string BoxLevel { get; set; } /// <summary> /// 车间区域 1002 1003一楼 1003二楼 /// </summary> public string AreaNo { get; set; } } } Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -2409,6 +2409,458 @@ } } /// <summary> /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息) /// </summary> /// <param name="model"></param> /// <returns></returns> public List<BoxInfoDto> GetWmsBoxInfos(string boxNo) { try { if (string.IsNullOrEmpty(boxNo)) { throw new Exception("请扫描外箱条码!"); } string sqlString = $@"SELECT BoxNo, SkuNo, SkuName, LotNo, BitBoxMark, SUM(Qty) as Qty FROM BllBoxInfo WHERE IsDel = '0' and Status='0' and BoxNo = '{boxNo}' GROUP BY BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); if (models.Count != 0) { return models; } else { throw new Exception("没有查询到箱码信息"); } } catch (Exception ex) { throw ex; } } public void ChejianIn(string palletNo,string boxNo,decimal qty,string areaNo,int userId) { try { #region MyRegion if (string.IsNullOrWhiteSpace(palletNo)) { throw new Exception("托盘号不能为空"); } if (string.IsNullOrWhiteSpace(boxNo)) { throw new Exception("箱号不能为空"); } if (qty<=0) { throw new Exception("数量不能小等0"); } var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo).ToList(); if (boxInfo.Count == 0) { throw new Exception("未查询到当前箱号信息"); } var boxInfoOne = boxInfo.First(); var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); if (pall == null) { throw new Exception("未查询到当前托盘信息"); } #endregion //开启事务 Db.BeginTran(); //当前时间 var comTime = DateTime.Now; #region 包装 var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == boxInfoOne.SkuNo); var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo); var pNum = 0;//托盘物品数量 var bNum = 0;//箱码物品数量 //公共方法获取包装数量 new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum); #endregion var msgStr = $"箱号为{boxNo}"; var boxInfoList = new List<BllBoxInfo>(); boxInfoList.AddRange(boxInfo); #region 库存明细 var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo); if (area == null) { throw new Exception("入库区域不能为空"); } var tags = "0"; // 判断库存明细是否已有此托盘信息 var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo== boxInfoOne.SkuNo && m.LotNo == boxInfoOne.LotNo && m.PalletNo == palletNo); var sdId1 = 0; if (sd1 != null) { if (sd1.AreaNo!= areaNo) { throw new Exception("选择的区域与库存不同"); } sdId1 = sd1.Id; // 库存已存在 更新数据 sd1.Qty += qty; sd1.CompleteTime = comTime; sd1.UpdateUser = userId; sd1.UpdateTime = comTime; Db.Updateable(sd1).ExecuteCommand(); } else { // 库存不存在 插入数据 sd1 = new DataStockDetail() { LotNo = boxInfoOne.LotNo, LotText = boxInfoOne.LotText, SupplierLot = boxInfoOne.SupplierLot, SkuNo = sku.SkuNo, SkuName = sku.SkuName, Standard = sku.Standard, Qty = qty, LockQty = 0, FrozenQty = 0, InspectQty = 0, WareHouseNo = area.WareHouseNo,//所属仓库 RoadwayNo = "",//所属巷道 AreaNo = area.AreaNo,//所属区域 LocatNo = "",//储位地址 PalletNo = palletNo, PalletTags = tags, CompleteTime = comTime, ProductionTime = boxInfoOne.ProductionTime, ExpirationTime = boxInfoOne.ExpirationTime, Status = "0", InspectMark = boxInfoOne.InspectMark, InspectStatus = sku.IsInspect, BitPalletMark = "1", PackagNo = sku.PackagNo, IsDel = "0", CreateUser = 0, CreateTime = comTime }; //添加库存明细 sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity(); } #endregion // 更改箱支关系表 decimal factQty = 0.00m;//托盘总数量 //标签组托 var boxGroup = boxInfo.GroupBy(m => m.BoxNo).ToList(); foreach (var g in boxGroup) { decimal boxFullQty = 0;//箱内总数量 foreach (var box in g) { if (box.BindNo != null && box.BindNo != 0) { continue; } box.PalletNo = palletNo; box.Status = "2"; box.CompleteTime = comTime; box.UpdateTime = comTime; box.UpdateUser = userId; //box.Qty = box.Qty; //box.BitBoxMark = box.Qty == box.FullQty ? "0" : "1"; factQty += box.Qty; boxFullQty += box.Qty; #region 库存箱码明细 var box2 = new DataBoxInfo() { StockDetailId = sdId1, BoxNo = box.BoxNo, BoxNo2 = box.BoxNo2, BoxNo3 = box.BoxNo3, PalletNo = box.PalletNo, PalletNo2 = box.PalletNo2, PalletNo3 = box.PalletNo3, Qty = box.Qty, FullQty = box.FullQty, Status = "2",//0:未组托 1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货 LotNo = box.LotNo, LotText = box.LotText, SkuNo = box.SkuNo, SkuName = box.SkuName, Standard = sku.Standard, ProductionTime = box.ProductionTime, SupplierLot = box.SupplierLot, InspectStatus = sku.IsInspect, InspectMark = box.InspectMark, BitBoxMark = box.BitBoxMark, ExpirationTime = box.ExpirationTime, CreateUser = 0, CreateTime = comTime }; //添加库存箱码明细 Db.Insertable(box2).ExecuteCommand(); #endregion } if (boxFullQty > bNum) { throw new Exception($"绑定失败,{g.Key}箱码绑定数量大于该物品包装数量!"); } } //更改箱支关系表信息 Db.Updateable(boxInfoList).ExecuteCommand(); #region 库存 var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == boxInfoOne.LotNo); if (dataStock != null) { dataStock.Qty += factQty; Db.Updateable(dataStock).ExecuteCommand(); } else { var stock = new DataStock() { SkuNo = sku.SkuNo, SkuName = sku.SkuName, Standard = sku.Standard, LotNo = boxInfoOne.LotNo, LotText = boxInfoOne.LotText, Qty = qty, LockQty = 0, FrozenQty = 0, IsSampling = "0", IsDel = "0", CreateUser = userId, CreateTime = comTime }; Db.Insertable(stock).ExecuteCommand(); } #endregion // 更改托盘使用状态 var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';"; ////添加托盘记录表数据 //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','组盘','0',getDate(),{userId},NULL,NULL);"; //Db.Ado.ExecuteCommand(sqlStr); new OperationASNServer().AddLogOperationAsn("PDA模块", "车间入库", boxNo, "添加", $"添加了托盘码为:{palletNo}、{msgStr}的入库信息", userId); //提交事务 Db.CommitTran(); } catch (Exception e) { Db.RollbackTran(); throw new Exception(e.Message); } } /// <summary> /// 车间绑定托盘 不贴标物料 /// </summary> /// <param name="model"></param> /// <param name="userId"></param> /// <exception cref="Exception"></exception> public void ChejianQtyIn(string palletNo, string skuNo, string lotNo, decimal qty, string areaNo, int userId) { try { #region MyRegion if (string.IsNullOrWhiteSpace(palletNo)) { throw new Exception("托盘号不能为空"); } if (string.IsNullOrWhiteSpace(skuNo)) { throw new Exception("物料不能为空"); } if (qty <= 0) { throw new Exception("数量不能小等0"); } var skuInfo = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == skuNo); if (skuInfo == null) { throw new Exception("未查询到物料信息"); } var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); if (pall == null) { throw new Exception("未查询到当前托盘信息"); } #endregion //开启事务 Db.BeginTran(); //当前时间 var comTime = DateTime.Now; #region 包装 var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo); var pNum = 0;//托盘物品数量 var bNum = 0;//箱码物品数量 //公共方法获取包装数量 new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum); #endregion #region 库存明细 var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo); if (area == null) { throw new Exception("入库区域不能为空"); } var tags = "0"; // 判断库存明细是否已有此托盘信息 var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo == skuNo && m.LotNo == lotNo && m.PalletNo == palletNo); var sdId1 = 0; if (sd1 != null) { if (sd1.AreaNo != areaNo) { throw new Exception("选择的区域与库存不同"); } sdId1 = sd1.Id; // 库存已存在 更新数据 sd1.Qty += qty; sd1.CompleteTime = comTime; sd1.UpdateUser = userId; sd1.UpdateTime = comTime; if (sd1.Qty >= pNum) { sd1.BitPalletMark = "0"; } Db.Updateable(sd1).ExecuteCommand(); } else { // 库存不存在 插入数据 sd1 = new DataStockDetail() { LotNo = lotNo, SupplierLot = "", SkuNo = skuInfo.SkuNo, SkuName = skuInfo.SkuName, Standard = skuInfo.Standard, Qty = qty, LockQty = 0, FrozenQty = 0, InspectQty = 0, WareHouseNo = area.WareHouseNo,//所属仓库 RoadwayNo = "",//所属巷道 AreaNo = area.AreaNo,//所属区域 LocatNo = "",//储位地址 PalletNo = palletNo, PalletTags = tags, CompleteTime = comTime, //ProductionTime = boxInfoOne.ProductionTime, //ExpirationTime = boxInfoOne.ExpirationTime, Status = "0", InspectMark = "0", InspectStatus = "1", BitPalletMark = qty >= pNum ?"0" :"1", PackagNo = skuInfo.PackagNo, IsDel = "0", CreateUser = 0, CreateTime = comTime }; //添加库存明细 sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity(); } #endregion // 更改箱支关系表 decimal factQty = 0.00m;//托盘总数量 #region 库存 var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == skuInfo.SkuNo && m.LotNo == lotNo); if (dataStock != null) { dataStock.Qty += factQty; Db.Updateable(dataStock).ExecuteCommand(); } else { var stock = new DataStock() { SkuNo = skuInfo.SkuNo, SkuName = skuInfo.SkuName, Standard = skuInfo.Standard, LotNo = lotNo, LotText = "", Qty = qty, LockQty = 0, FrozenQty = 0, IsSampling = "0", IsDel = "0", CreateUser = userId, CreateTime = comTime }; Db.Insertable(stock).ExecuteCommand(); } #endregion // 更改托盘使用状态 var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';"; ////添加托盘记录表数据 //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','组盘','0',getDate(),{userId},NULL,NULL);"; Db.Ado.ExecuteCommand(sqlStr); new OperationASNServer().AddLogOperationAsn("PDA模块", "车间入库", skuNo, "添加", $"添加了托盘码为:{palletNo}的入库信息", userId); //提交事务 Db.CommitTran(); } catch (Exception e) { Db.RollbackTran(); throw new Exception(e.Message); } } #endregion Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -124,7 +124,7 @@ if (pinStockDetail != null) { if (palletNo != palletNoNew)//非整托拣货 if (palletNo != palletNoNew)//非整托拣货 { var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id!= pinStockDetail.Id).ToList(); if (pinStockDetails.Count(m=>m.SONo != notice.SONo) > 0) @@ -142,15 +142,19 @@ var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); if (newPalletInfo == null) { var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList(); var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew &&(m.SkuNo != stockDetail.SkuNo || m.LotNo != stockDetail.LotNo)).ToList(); if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) { throw Oops.Bah("新托盘信息不存在或已被使用!"); } } } //修改新托盘状态 newPalletInfo.Status = "1"; await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); else { //修改新托盘状态 newPalletInfo.Status = "1"; await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); } } var sd = new DataStockDetail(); @@ -458,9 +462,10 @@ if (isNew) { sd.Qty = pickQty; sd.LockQty = pickQty; await Db.Updateable(sd).ExecuteCommandAsync(); var sdnew = Db.Queryable<DataStockDetail>().First(m => m.Id == sdId); sdnew.Qty = pickQty; sdnew.LockQty = pickQty; await Db.Updateable(sdnew).ExecuteCommandAsync(); } else { @@ -588,15 +593,18 @@ var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); if (newPalletInfo == null) { var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList(); var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && (m.SkuNo != stockDetail.SkuNo && m.LotNo != stockDetail.LotNo)).ToList(); if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) { throw Oops.Bah("新托盘信息不存在或已被使用!"); } } //修改新托盘状态 newPalletInfo.Status = "1"; await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); else { //修改新托盘状态 newPalletInfo.Status = "1"; await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); } } if (isNew) @@ -1522,6 +1530,27 @@ return allotList2; } //获取托盘中含有的执行中的单据 public async Task<List<string>> GetPalletListBySo(string soNo, string soDetailId) { if (string.IsNullOrWhiteSpace(soNo))//判断托盘是否为空 { throw Oops.Bah("出库单为空,请选择出库单"); } if (string.IsNullOrWhiteSpace(soDetailId)) { throw Oops.Bah("出库明细为空,请选择物料-批次"); } var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "0" && m.SONo == soNo && m.SODetailNo == int.Parse(soDetailId)).Select(m => m.PalletNo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); return allotList; } //获取托盘中含有的执行中的单据 public async Task<List<string>> GetRunNoticeList(string type) { Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -1014,7 +1014,7 @@ skuList = skuList.Where(m => m.SkuNo == "100088").ToList(); } skuStrList = skuList.Select(m => m.SkuNo).ToList(); var areaStr = new List<string>() { "B02", "B05", "B08" }; var areaStr = new List<string>() { "B06", "B07", "B09" }; var stockRst = new StockServer(); var stockDetailRst = new StockDetailServer(); Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() Wms/WMS.BLL/HttpServer.cs
@@ -1378,7 +1378,7 @@ throw new Exception("选择的出库单明细参数错误"); } //所有要出库的出库分配信息(未下发的信息和待拣货的信息) var item = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == soNo && a.SODetailNo == intDetailId && a.Status == "0" ); var item = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == soNo && a.SODetailNo == intDetailId && a.PalletNo == palletNo && a.Status == "0" ); if (item == null) //判断是否有需要下发的出库流水 { throw new Exception("当前出库单据无需要下发的托盘"); @@ -1418,8 +1418,7 @@ var imBl = com.GetImTask(item.PalletNo); if (imBl != null) { str = "要出库的托盘正在入库"; return outDto1; throw new Exception("要出库的托盘正在入库"); } //判断是否是已经出过库又回库 if (item.Status == "0") @@ -1445,40 +1444,34 @@ Db.Updateable(notice).ExecuteCommand(); } } str = "要出库的托盘已在库外"; Db.CommitTran(); str = "托盘已在库外"; return outDto1; } str = "要出库的托盘正在入库"; return outDto1; } var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//当前出库的储位信息 if (locate == null) { str = "出库的托盘储位信息错误(在储位表中未查询到)"; return outDto1; throw new Exception("出库的托盘储位信息错误(在储位表中未查询到)"); } //判断储位标志是否为损坏 if (locate.Flag == "2") { str = "储位损坏不能出库"; return outDto1; throw new Exception("储位损坏不能出库"); } if (locate.WareHouseNo != "W02") { str = "托盘不在货架库上"; return outDto1; throw new Exception("托盘不在货架库上"); } var locateEnd = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == outModeLocate && m.IsDel == "0");//当前出库的目标储位信息 if (locateEnd == null) { str = "出库的托盘储位信息错误(在储位表中未查询到)"; return outDto1; throw new Exception("出库的托盘储位信息错误(在储位表中未查询到)"); } else if (locateEnd.Status != "0") { str = "目标储位状态不是空储位"; return outDto1; throw new Exception("目标储位状态不是空储位"); } #endregion @@ -1606,8 +1599,7 @@ } else if (locate.Status == "5") //移出中 { str = "当前要出库的储位正在移出"; return outDto1; throw new Exception("当前要出库的储位正在移出"); } Wms/WMS.Entity/BllAsnEntity/BllPalletBind.cs
@@ -87,7 +87,7 @@ public decimal? FullQty {get;set;} /// <summary> /// Desc:状态 /// Desc:状态 2入库完成 3上架完成 /// Default: /// Nullable:True /// </summary> Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs
@@ -29,6 +29,12 @@ /// <param name="userId"></param> void SaveAppointLocate(string palletNo, string locateNo, int userId); List<BoxInfoDto> GetWmsBoxInfos(string boxNo); void ChejianIn(string palletNo, string boxNo, decimal qty,string areaNo, int userId); void ChejianQtyIn(string palletNo, string skuNo, string lotNo, decimal qty, string areaNo, int userId); #endregion Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
@@ -62,6 +62,14 @@ Task<List<string>> GetRunNoticeList(string type); /// <summary> /// 获取出库单未下发出库的托盘 /// </summary> /// <param name="soNo"></param> /// <param name="soDetailId"></param> /// <returns></returns> Task<List<string>> GetPalletListBySo(string soNo, string soDetailId); /// <summary> /// 获取出库托盘上的物料批次(根据托盘码) /// </summary> /// <param name="palletNo">托盘码</param> Wms/Wms/Controllers/PdaAsnController.cs
@@ -193,6 +193,26 @@ } /// <summary> /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息) /// </summary> /// <param name="boxNo">BoxNo:箱号</param> /// <returns></returns> [HttpPost] public IActionResult GetWmsBoxInfos(string boxNo) { try { var models = _PdaAsnSvc.GetWmsBoxInfos(boxNo); return Ok(new { code = 0, msg = "标签箱码信息", data = models }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// <summary> /// 判断托盘是否可用 公用方法 /// </summary> /// <param name="model">PalletNo:托盘条码</param> @@ -243,6 +263,40 @@ } /// <summary> /// 绑定托盘 /// </summary> /// <param name="model"></param> /// <returns></returns> [HttpPost] public IActionResult ChejianIn(PdaPalletBindVm model) { try { if (_userManager.UserId ==0) { throw new Exception("未获取到用户信息"); } if (model.TableType == 0) { _PdaAsnSvc.ChejianIn(model.PalletNo,model.BoxNo,model.SkuQty,model.AreaNo, _userManager.UserId); } else if (model.TableType == 1) { _PdaAsnSvc.ChejianQtyIn(model.PalletNo,model.SkuNo,model.LotNo,model.SkuQty,model.AreaNo, _userManager.UserId); } return Ok(new { code = 0, msg = "绑定成功!" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } //---------------------------------------------申请入库页面---------------------------------------------------------------------- Wms/Wms/Controllers/PdaSoController.cs
@@ -81,6 +81,19 @@ return await _pdaSoSvc.GetSoSkuLotNoListBySo(model.SoNo); } /// <summary> /// 获取物料-批次信息 /// </summary> /// <param name="model">PalletNo:托盘码、SoNo:单据号</param> /// <returns></returns> [HttpPost] public async Task<List<string>> GetPalletListBySo(PdaSoVm model) { return await _pdaSoSvc.GetPalletListBySo(model.SoNo,model.SoDetailId); } /// <summary> /// 获取物料-批次信息 /// </summary> Wms/Wms/Controllers/UpApiController.cs
@@ -242,7 +242,7 @@ await _stockCheckSvc.StockAdjustAuto(model.Id); } //系统对接后放开 //var bl =_stockCheckSvc.FinishCr(model.Id,_config.ErpHost + _config.DataChangeUrl, int.Parse(userId)); var bl =_stockCheckSvc.FinishCr(model.Id,_config.ErpHost + _config.DataChangeUrl, int.Parse(userId)); //if (bl) //{ return Ok(new { code = 0, count = 0, msg = "盘点单调整上传成功" });