HTML/views/SOSetting/ExportNotice.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HTML/views/SOSetting/ExportNoticeAddFrom.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Model/ModelDto/BllSoDto/ExportNoticeDto.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.Entity/BllSoEntity/BLLExportNotice.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.Entity/BllSoEntity/BllExportAllot.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Wms/Controllers/BllSoController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
HTML/views/SOSetting/ExportNotice.html
@@ -57,11 +57,20 @@ <div class="layui-input-inline"> <select name="Type" id="Type" lay-filter="Type" lay-search> <option value=""></option> <!-- 24 --> <option value="0">成品出库</option> <option value="1">领料出库</option> <option value="2">抽检出库</option> <option value="3">物料取样出库</option> <option value="4">不合格品出库</option> <option value="5">中间品出库</option> <option value="6">代储出库</option> <option value="7">其他出库</option> <!-- 09 --> <option value="0">标准销售出库</option> <!-- <option value="0">标准销售出库</option> <option value="1">非标销售出库</option> <option value="2">标准调拨出库</option> <option value="3">非标调拨出库</option> <option value="3">非标调拨出库</option> --> <!-- 08 --> <!-- <option value="0">成品出库</option> <option value="1">原辅料出库</option> @@ -81,6 +90,7 @@ <option value="3">正在执行</option> <option value="4">执行完毕</option> <option value="5">订单关闭</option> <option value="6">已复核</option> </select> </div> </div> @@ -119,9 +129,38 @@ </select> </div> </div> <div class="layui-inline"> <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit lay-filter="LAY-app-contlist-search"> <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索 </button> </div> <!-- 确认出库口弹窗 --> <div class="layui-inline" id="divPickingArea" style="display: none; padding-top: 10px;"> <div class="layui-inline"> <label class="layui-form-label">拆垛方式</label> <div class="layui-input-inline" style="width: 220px;"> <select name="UnstackWay" id="UnstackWay" lay-filter="UnstackWay" lay-search> <option value="0" selected>机器人拆垛</option> <option value="1">人工拆垛</option> </select> </div> </div> <div class="layui-inline DivLoadingArea" style="margin-top: 10px;"> <label class="layui-form-label">装车口</label> <div class="layui-input-inline" style="width: 220px;"> <select name="LoadingArea" id="LoadingArea" lay-search> <option value=""></option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </div> </div> <div class="layui-inline DivPickingArea2" style="margin-top: 10px;"> <label class="layui-form-label">出库口</label> <div class="layui-input-inline"> <div class="layui-input-inline" style="width: 220px;"> <select name="PickingArea" id="PickingArea" lay-search> <option value=""></option> <option value="1">1</option> @@ -131,13 +170,7 @@ </select> </div> </div> <div class="layui-inline"> <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit lay-filter="LAY-app-contlist-search"> <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索 </button> </div> <!-- 维护备注弹框 --> <div class="layui-inline" id="divEditDemo" style="display: none; padding-top: 10px;"> <label class="layui-form-label">备注</label> @@ -164,13 +197,21 @@ {{# function GetBtn3(d){ switch (d.Type) { case "0": return "标准销售出库"; return "成品出库"; case "1": return "非标准销售出库"; return "领料出库"; case "2": return "标准调拨出库"; return "抽检出库"; case "3": return "非标准调拨出库"; return "物料取样出库"; case "4": return "不合格品出库"; case "5": return "中间品出库"; case "6": return "代储出库"; case "7": return "其他出库"; default: return ""; } @@ -193,6 +234,8 @@ case "4": return `<button class="layui-btn layui-btn-radius layui-btn-normal layui-btn-xs">执行完毕</button>`; case "5": return `<button class="layui-btn layui-btn-radius layui-btn-normal layui-btn-xs">订单关闭</button>`; case "6": return `<button class="layui-btn layui-btn-radius layui-btn-normal layui-btn-xs">上传完毕</button>`; default: return ""; @@ -231,6 +274,14 @@ } }} {{ GetBtn7(d) }} </script> <script type="text/html" id="templetCheckTime"> {{# function GetBtn8(d){ return formatDate(d.CheckTime); } }} {{ GetBtn8(d) }} </script> <!-- #endregion --> </div> @@ -310,9 +361,12 @@ <i class="layui-icon layui-icon-ok"></i>关单 </a>`; } if( d.Status == '5'){ html += `<a class="layui-btn layui-btn-normal layui-btn-xs shangClass" lay-event="xml"> <i class="layui-icon layui-icon-ok"></i>XML <i class="layui-icon layui-icon-ok"></i>复核 </a>`; } html += `<a class="layui-btn layui-btn-normal layui-btn-xs editDemoClass" lay-event="editDemo"> <i class="layui-icon layui-icon-edit"></i>备注</a>`; return html; @@ -428,6 +482,8 @@ {field: 'CreateTime',title: '创建时间',align: 'center',templet: '#templetCreateTime'}, {field: 'UpdateUserName',title: '修改人',align: 'center'}, {field: 'UpdateTime',title: '修改时间',align: 'center',templet: '#templetUpdateTime'}, {field: 'CheckUserName',title: '复核人',align: 'center',width: 110}, {field: 'CheckTime',title: '复核时间',align: 'center',templet: '#templetCheckTime'}, {field: 'caozuo',title: '操作',fixed: 'right',align: 'center',width: 200,toolbar: '#table-content-list', "disabled": true} ]]; var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码 @@ -950,6 +1006,7 @@ $(".qufenClass").hide(); //取消分配 $(".outClass").hide(); //出库 $(".editDemoClass").hide();//备注 $(".checkClass").hide(); //复核 }); sendData(IP + "/Basis/GetRoleRightList", {}, 'get', function(res) { if (res.code == 0) { //成功 @@ -1006,6 +1063,11 @@ $(".editDemoClass").show(); }); } if (res.data[k].MenuName == "复核出库单") { $(function() { $(".checkClass").show(); }); } } } } else { //不成功 @@ -1039,6 +1101,7 @@ }); } }); var isNeedUnpack='0'//是否需要拆箱,0:否 1:是 //监听数据操作 table.on('tool(LAY-app-content-list)', function(obj) { var data = obj.data; @@ -1157,12 +1220,36 @@ area: ['1200px', '90%'], }); }else if(obj.event === 'outKu'){ var param = { soNo: SoNo }; sendData(IP + "/BllSo/IsNeedUnpack", param, 'get', function(res) { if (res.code == 0) { //成功 if(res.data=="1"){ isNeedUnpack='1' $('.DivPickingArea2').attr("style", "display:block") }else{ isNeedUnpack='0' $('.DivPickingArea2').attr("style", "display:none") } if($('#UnstackWay').val()=='1'){ $('.DivPickingArea2').attr("style", "display:block") } } else { //不成功 layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function() { return; }); } }); layer.open({ type: 1, title: '确认出库口', content: $('#divPickingArea'), maxmin: true, area: ['300px','265px'], area: ['350px','285px'], btn: ['确定', '取消'], yes: function(index, layero) { var pa = $('#PickingArea').val(); @@ -1376,6 +1463,21 @@ downloadA.click(); document.body.removeChild(downloadA); } //拆垛方式切换 form.on('select(UnstackWay)',function(data){ var value = data.value; if(value==0){ $('.DivLoadingArea').attr("style", "display:block") if(isNeedUnpack=='0'){ $('.DivPickingArea2').attr("style", "display:none") }else{ $('.DivPickingArea2').attr("style", "display:block") } }else{ $('.DivLoadingArea').attr("style", "display:none") $('.DivPickingArea2').attr("style", "display:block") } }); //#region 自定义表头 //自定义表头 HTML/views/SOSetting/ExportNoticeAddFrom.html
@@ -33,11 +33,20 @@ <div class="layui-input-inline"> <select name="Type" id="Type" lay-filter="Type" lay-verify="required" lay-search> <option value=""></option> <!-- 24 --> <option value="0">成品出库</option> <option value="1">领料出库</option> <option value="2">抽检出库</option> <option value="3">物料取样出库</option> <option value="4">不合格品出库</option> <option value="5">中间品出库</option> <option value="6">代储出库</option> <option value="7">其他出库</option> <!-- 09 --> <option value="0">标准销售出库</option> <!-- <option value="0">标准销售出库</option> <option value="1">非标销售出库</option> <option value="2">标准调拨出库</option> <option value="3">非标调拨出库</option> <option value="3">非标调拨出库</option> --> <!-- 08 --> <!-- <option value="0">成品出库</option> <option value="1">原辅料出库</option> Wms/Model/ModelDto/BllSoDto/ExportNoticeDto.cs
@@ -103,6 +103,16 @@ /// 更新人 /// </summary> public string UpdateUserName { get; set; } /// <summary> /// 复核人 /// </summary> public string CheckUserName { get; set; } /// <summary> /// 复核时间 /// </summary> public DateTime? CheckTime { get; set; } } public class ExStockInfoDto Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -278,7 +278,8 @@ .LeftJoin<SysLogisticsInfo>((a, b) => a.LogisticsId == b.Id) .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id) .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id) .Select((a, b, c, d) => new ExportNoticeDto() .LeftJoin<SysUserInfor>((a, b, c, d,e) => a.CheckUser == e.Id) .Select((a, b, c, d,e) => new ExportNoticeDto() { Id = a.Id, SONo = a.SONo, @@ -300,7 +301,10 @@ CreateUserName = c.RealName, UpdateUserName = c.RealName, CreateTime = a.CreateTime, UpdateTime = a.UpdateTime UpdateTime = a.UpdateTime, CheckUserName=e.RealName, CheckTime=a.CheckTime }) .OrderByDescending(a => a.CreateTime) .ToOffsetPage(page, limit, ref total); @@ -1043,6 +1047,10 @@ { throw new Exception("参数异常,请检查状态是否为执行完成或订单关闭/已上传"); } if (userId == notice.UpdateUser) { throw new Exception("复核失败,复核人员和关闭订单人员不能相同!"); } //出库单明细 var comDetail = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.SONo == notice.SONo).Select(m => m.BoxNo3).ToList(); Db.BeginTran();//开启事务 @@ -1057,8 +1065,13 @@ //} var dom = HttpHelper.EncodeParsToFuMa(comDetail, "ceshi", "ExInfoXml"); notice.Status = "6";//状态:已上传 notice.CheckTime = DateTime.Now;//复核时间 notice.CheckUser = userId;//复核人 Db.Updateable(notice).ExecuteCommand(); ////添加操作日志记录 //var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", notice.SONo, "关单", $"关闭了单据号为{notice.SONo}的单据信息", userId); var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", notice.SONo, "复核", $"复核了单据号为{notice.SONo}的单据信息", userId); Db.CommitTran(); return dom; @@ -2711,5 +2724,58 @@ #endregion /// <summary> /// 判断出库是否需要拆箱 /// </summary> /// <param name="soNo"></param> /// <returns></returns> public string IsNeedUnpack(string soNo) { string result = "0";//是否需要拆箱,0:否 1:是 if (string.IsNullOrEmpty(soNo)) { throw new Exception("未找到对应出库单!"); } try { var notice = Db.Queryable<BllExportNotice>().First(w => w.IsDel == "0" && w.SONo == soNo); if (notice == null) { throw new Exception("未找到对应出库单!"); } //物料编码表 var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0"); //包装表 var packagList= Db.Queryable<SysPackag>().Where(w => w.IsDel == "0"); //出库分配信息 var allotList = Db.Queryable<BllExportAllot>().Where(w => w.IsDel == "0" && w.SONo == soNo).ToList(); foreach (var item in allotList) { var skuInfo = skuList.First(w => w.SkuNo == item.SkuNo); if (skuInfo == null) { throw new Exception("物料信息不存在!"); } var packagInfo = packagList.First(w => w.PackagNo == skuInfo.PackagNo); if (packagInfo == null) { throw new Exception("包装信息不存在!"); } if (packagInfo.L2Name == "箱") { if (item.Qty % (decimal)packagInfo.L2Num != 0)//能整除说明不用拆箱,不能整除说明需要拆箱 { result = "1";//需要拆箱 break; } } } return result; } catch (Exception ex) { throw new Exception(ex.Message); } } } } Wms/WMS.Entity/BllSoEntity/BLLExportNotice.cs
@@ -121,5 +121,14 @@ /// </summary> public string OrderCode { get; set; } /// <summary> /// 复核人 /// </summary> public int CheckUser { get; set; } /// <summary> /// 复核时间 /// </summary> public DateTime? CheckTime { get; set; } } } Wms/WMS.Entity/BllSoEntity/BllExportAllot.cs
@@ -153,16 +153,6 @@ /// </summary> public string OutMode { get; set; } /// <summary> /// 复核人 /// </summary> public int CheckUser { get; set; } /// <summary> /// 复核时间 /// </summary> public DateTime? CheckTime { get; set; } [Navigate(NavigateType.OneToOne, nameof(LogisticsId))] public SysLogisticsInfo LogisticsInfoInfo { get; set; } Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs
@@ -202,5 +202,11 @@ /// <param name="userId"></param> void AddHandOutAllot(AddHandOutVm model, int userId); /// <summary> /// 判断出库是否需要拆箱 /// </summary> /// <param name="soNo"></param> /// <returns></returns> string IsNeedUnpack(string soNo); } } Wms/Wms/Controllers/BllSoController.cs
@@ -213,18 +213,18 @@ { 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 = "未获取到当前操作人信息" }); //} var bolls = _exNoticeSvc.AddExXmlStr(model.Id, 1);//int.Parse(userId) //获取当前登录的用户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 = "未获取到当前操作人信息" }); } var bolls = _exNoticeSvc.AddExXmlStr(model.Id, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "生成出库单Xml", data= bolls.InnerXml.ToString() }); @@ -767,5 +767,26 @@ } #endregion /// <summary> /// 判断出库是否需要拆箱 /// </summary> /// <param name="soNo"></param> /// <returns></returns> [HttpGet] public IActionResult IsNeedUnpack(string soNo) { try { string result = _exNoticeSvc.IsNeedUnpack(soNo); return Ok(new { code = 0, data = result, msg = "成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } } }