From 02abdb2a7821e1eacc2b8ddc91e398cd9906c8cf Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期四, 13 三月 2025 18:36:54 +0800 Subject: [PATCH] 修改问题 --- Wms/Model/ModelDto/BllSoDto/ExportNoticeDto.cs | 6 Wms/WMS.BLL/Logic/AllotSku.cs | 111 ++- Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs | 2 Wms/WMS.BLL/BllSoServer/WaveMageServer.cs | 7 HTML/views/StatisticalReport/BoxInfor.html | 44 HTML/views/ASNSetting/ArrivalLogTask.html | 2 HTML/views/SOSetting/ExportNoticeEditFrom.html | 66 + HTML/views/ASNSetting/RequestLocation.html | 2 HTML/views/SOSetting/ExportNoticeAddFrom.html | 86 +- Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | 1600 ++++++++++++++++++++++++---------------------- HTML/views/SOSetting/ExportSelectSkuFrom.html | 1 Wms/Wms/Controllers/BllSoController.cs | 2 HTML/views/SOSetting/ExportNotice.html | 39 Wms/Model/ModelVm/BllSoVm/ExportNoticeVm.cs | 4 Wms/WMS.Entity/BllSoEntity/BLLExportNotice.cs | 9 15 files changed, 1,069 insertions(+), 912 deletions(-) diff --git a/HTML/views/ASNSetting/ArrivalLogTask.html b/HTML/views/ASNSetting/ArrivalLogTask.html index 4584c60..3c8a8a2 100644 --- a/HTML/views/ASNSetting/ArrivalLogTask.html +++ b/HTML/views/ASNSetting/ArrivalLogTask.html @@ -556,7 +556,7 @@ var field = data.field; //鑾峰彇鎻愪氦鐨勫瓧娈� //鎻愪氦 Ajax 鎴愬姛鍚庯紝闈欐�佹洿鏂拌〃鏍间腑鐨勬暟鎹� var param = { - PalletNo: field.PalletNo + "A", //鎵樼洏鍙� + PalletNo: field.PalletNo, //鎵樼洏鍙� HouseNo: field.HouseNo, //鎵�灞炰粨搴� RoadwayNo: field.RoadwayNo, //鎵�灞炲贩閬� }; diff --git a/HTML/views/ASNSetting/RequestLocation.html b/HTML/views/ASNSetting/RequestLocation.html index 7e1c94f..252653e 100644 --- a/HTML/views/ASNSetting/RequestLocation.html +++ b/HTML/views/ASNSetting/RequestLocation.html @@ -21,7 +21,7 @@ <div class="layui-input-block"> <select name="HouseNo" id="HouseNo" lay-filter="HouseNo" lay-verify="required" lay-search> <option value=""></option> - <option value="W01">绔嬪簱</option> + <option value="W02">绔嬪簱</option> <!-- <option value="W02">闆剁搴�</option> --> </select> </div> diff --git a/HTML/views/SOSetting/ExportNotice.html b/HTML/views/SOSetting/ExportNotice.html index ffa8410..e10b7b3 100644 --- a/HTML/views/SOSetting/ExportNotice.html +++ b/HTML/views/SOSetting/ExportNotice.html @@ -62,14 +62,13 @@ <div class="layui-input-inline"> <select name="Type" id="Type" lay-filter="Type" lay-search> <option value=""></option> - <!--JC26--> + <!--JC34 鐢熶骇棰嗘枡銆佸叾浠栭鏂欍�侀攢鍞�佷笉鍚堟牸鎶ュ簾銆佹娊妫�銆佸叾浠�--> <option value="0">鎴愬搧鍑哄簱</option> <option value="1">棰嗘枡鍑哄簱</option> <option value="2">鎶芥鍑哄簱</option> <option value="4">涓嶅悎鏍煎搧鍑哄簱</option> - <option value="5">涓棿鍝佸嚭搴�</option> - <!-- <option value="7">鍏朵粬鍑哄簱</option> --> - <option value="9">閲囪喘閫�璐у嚭搴�</option> + <option value="7">鍏朵粬鍑哄簱</option> + <option value="9">鐢熶骇棰嗘枡鍑哄簱</option> </select> </div> </div> @@ -210,7 +209,7 @@ case "8": return "瀵勫瓨鍑哄簱"; case "9": - return "閲囪喘閫�璐у嚭搴�"; + return "鐢熶骇棰嗘枡鍑哄簱"; default: return ""; } @@ -491,23 +490,27 @@ var TotalColsArr = [[ { field: '', title: '搴忓彿', type: 'numbers', width: 50, align: 'center', fixed: 'left', "disabled": true }, { field: 'SONo', title: '鍑哄簱鍗曞彿', align: 'center', fixed: 'left', width: 165, "disabled": true }, - { field: 'Type', title: '鍗曟嵁绫诲瀷', align: 'center', templet: '#templetType' }, - { field: 'Status', title: '鎵ц鐘舵��', align: 'center', templet: '#templetStatus' }, - { field: 'LogisticsName', title: '鎵胯繍鍟�', align: 'center' }, - { field: 'CustomerName', title: '瀹㈡埛鍚嶇О', align: 'center' }, + { field: 'Type', title: '鍗曟嵁绫诲瀷', align: 'center', templet: '#templetType' , width: 120,}, + { field: 'Status', title: '鎵ц鐘舵��', align: 'center', templet: '#templetStatus', width: 90, }, + { field: 'LogisticsName', title: '鎵胯繍鍟�', align: 'center', width: 120, }, + { field: 'CustomerName', title: '瀹㈡埛鍚嶇О', align: 'center', width: 120, }, + { field: 'WareHouseName', title: '浠撳簱', align: 'center', width: 90, }, + { field: 'Origin', title: '鏉ユ簮', align: 'center', width: 90, }, + { field: 'Demo', title: '澶囨敞', align: 'center', width: 180 }, + { field: 'CreateUserName', title: '鍒涘缓浜�', align: 'center' , width: 110}, + { field: 'CreateTime', title: '鍒涘缓鏃堕棿', align: 'center', width: 160, templet: '#templetCreateTime' }, + { field: 'UpdateUserName', title: '淇敼浜�', align: 'center', width: 110 }, + { field: 'UpdateTime', title: '淇敼鏃堕棿', align: 'center', width: 160, templet: '#templetUpdateTime' }, + { field: 'CheckUserName', title: '澶嶆牳浜�', align: 'center', width: 110 }, + { field: 'CheckTime', title: '澶嶆牳鏃堕棿', align: 'center', width: 160, templet: '#templetCheckTime' }, + + { field: 'LotNo', title: '鎵规鍙�', align: 'center' }, { field: 'LotNoText', title: '鎵规鎻忚堪', align: 'center' }, { field: 'IsDespatch', title: '鏄惁鍙戣繍', align: 'center', templet: '#templetIsDespatch' }, { field: 'SupplierLot', title: '渚涜揣鎵规', align: 'center' }, - { field: 'Origin', title: '鏉ユ簮', align: 'center' }, - { field: 'Demo', title: '澶囨敞', align: 'center', width: 180 }, - { field: 'CreateUserName', title: '鍒涘缓浜�', align: 'center' }, - { 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": false } + + { field: 'caozuo', title: '鎿嶄綔', fixed: 'right', align: 'center', width: 360, toolbar: '#table-content-list', "disabled": false } ]]; var TotalColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//灏嗚〃澶存暟鎹繘琛寀rl缂栫爜 //#endregion diff --git a/HTML/views/SOSetting/ExportNoticeAddFrom.html b/HTML/views/SOSetting/ExportNoticeAddFrom.html index 95df954..a77c389 100644 --- a/HTML/views/SOSetting/ExportNoticeAddFrom.html +++ b/HTML/views/SOSetting/ExportNoticeAddFrom.html @@ -20,14 +20,7 @@ <body> <div class="layui-form" lay-filter="layuiadmin-app-form-list" style="padding: 20px 0 0 0;"> <div class="layui-form-item" style="margin-bottom: 0px;"> - <!-- <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> - <option value=""></option> - </select> - </div> - </div> --> + <div class="layui-inline"> <label class="layui-form-label">鍗曟嵁绫诲瀷</label> <div class="layui-input-inline"> @@ -38,9 +31,16 @@ <option value="1">棰嗘枡鍑哄簱</option> <option value="2">鎶芥鍑哄簱</option> <option value="4">涓嶅悎鏍煎搧鍑哄簱</option> - <option value="5">涓棿鍝佸嚭搴�</option> - <!-- <option value="7">鍏朵粬鍑哄簱</option> --> - <option value="9">閲囪喘閫�璐у嚭搴�</option> + <option value="7">鍏朵粬鍑哄簱</option> + <option value="9">鐢熶骇棰嗘枡鍑哄簱</option> + </select> + </div> + </div> + <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> + <option value=""></option> </select> </div> </div> @@ -104,7 +104,7 @@ table = layui.table, layer = layui.layer; - // getWareHouseList(); + getWareHouseList(); getCustomerList(); getLogisticsInfoList(); @@ -248,13 +248,13 @@ var $ = layui.$; var active = { add: function() { - // if ($("#WarehouseId").val()== "") { - // layer.msg("璇烽�夋嫨浠撳簱锛�", { - // icon: 2, - // time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級 - // },function() {}); - // return; - // } + if ($("#WarehouseId").val()== "") { + layer.msg("璇烽�夋嫨浠撳簱锛�", { + icon: 2, + time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級 + },function() {}); + return; + } if ($("#Type").val()== "") { layer.msg("璇烽�夋嫨鍗曟嵁绫诲瀷锛�", { icon: 2, @@ -273,10 +273,12 @@ return; } } + console.log($("#WarehouseId").val()); + layer.open({ type: 2, title: '閫夋嫨鐗╁搧淇℃伅', - content: 'ExportSelectSkuFrom.html?Type='+$("#Type").val()+'&OwnerNo='+$("#CustomerNo").val(), + content: 'ExportSelectSkuFrom.html?houseId='+$("#WarehouseId").val()+'&Type='+$("#Type").val()+'&OwnerNo='+$("#CustomerNo").val(), maxmin: true, area: ['950px', '90%'], fixed: false, @@ -349,7 +351,7 @@ } } var DataList = []; - console.log(infoOptions.data); + for (var i in infoOptions.data) { console.log(infoOptions.data[i].ExQty); if (infoOptions.data[i].ExQty == "") { @@ -415,7 +417,7 @@ var param = { Type: data.field.Type, CustomerNo: data.field.CustomerNo, - + WareHouseNo:data.field.WarehouseId, LogisticsId: parseInt(data.field.LogisticsId), Detail: DataList } @@ -453,27 +455,27 @@ TypeValue=value; } }); - //鑾峰彇浠撳簱涓嬫媺妗嗕俊鎭� - // function getWareHouseList(){ - // sendData(IP + "/Sys/GetWarehouseDic", {}, 'get', function(res) { + //鑾峰彇浠撳簱淇℃伅 + function getWareHouseList(){ + sendData(IP + "/Sys/GetWarehouseDic", {}, 'get', function(res) { - // if (res.code == 0) { //鎴愬姛 - // $("#WarehouseId").empty(); - // // $("#WarehouseId").append('<option value =""></option>'); - // for (var i = 0; i < res.data.length; i++) { - // $("#WarehouseId").append('<option value =' + res.data[i].WareHouseNo + '>' + - // res.data[i].WareHouseName + '</option>'); - // } - // $("#WarehouseId option[value='W01']").attr("selected", "selected") - // form.render('select'); - // } else { //涓嶆垚鍔� - // layer.msg(res.msg, { - // icon: 2, - // time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級 - // }, function() {}); - // } - // }); - // } + if (res.code == 0) { //鎴愬姛 + $("#WarehouseId").empty(); + $("#WarehouseId").append('<option value =""></option>'); + for (var i = 0; i < res.data.length; i++) { + $("#WarehouseId").append('<option value =' + res.data[i].WareHouseNo + '>' + + res.data[i].WareHouseName + '</option>'); + } + //$("#WarehouseId option[value='W01']").attr("selected", "selected") + form.render('select'); + } else { //涓嶆垚鍔� + layer.msg(res.msg, { + icon: 2, + time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級 + }, function() {}); + } + }); + } //鑾峰彇瀹㈡埛涓嬫媺妗嗕俊鎭� function getCustomerList() { sendData(IP + "/Basis/GetCustomerSelect", {}, 'get', function(res) { diff --git a/HTML/views/SOSetting/ExportNoticeEditFrom.html b/HTML/views/SOSetting/ExportNoticeEditFrom.html index 73e2f4d..1182401 100644 --- a/HTML/views/SOSetting/ExportNoticeEditFrom.html +++ b/HTML/views/SOSetting/ExportNoticeEditFrom.html @@ -13,14 +13,7 @@ <div class="layui-form" style="padding: 20px 0 0 0;"> <div class="layui-form-item" style="margin-bottom: 0px;"> - <!-- <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> - <option value=""></option> - </select> - </div> - </div> --> + <div class="layui-inline"> <label class="layui-form-label">鍗曟嵁绫诲瀷</label> <div class="layui-input-inline"> @@ -31,9 +24,16 @@ <option value="1">棰嗘枡鍑哄簱</option> <option value="2">鎶芥鍑哄簱</option> <option value="4">涓嶅悎鏍煎搧鍑哄簱</option> - <option value="5">涓棿鍝佸嚭搴�</option> - <!-- <option value="7">鍏朵粬鍑哄簱</option> --> - <option value="9">閲囪喘閫�璐у嚭搴�</option> + <option value="7">鍏朵粬鍑哄簱</option> + <option value="9">鐢熶骇棰嗘枡鍑哄簱</option> + </select> + </div> + </div> + <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" disabled lay-search> + <option value=""></option> </select> </div> </div> @@ -102,7 +102,7 @@ var id = getQueryString("id"); console.log(soNo); console.log(id); - // getWareHouseList(); + getData();//鑾峰彇鍏ュ簱鍗曠被鍨� var arr = []; @@ -259,7 +259,7 @@ layer.open({ type: 2, title: '閫夋嫨鐗╁搧淇℃伅', - content: 'ExportSelectSkuFrom.html?Type='+$("#Type").val(), + content: 'ExportSelectSkuFrom.html?houseId='+$("#WarehouseId").val()+'&Type='+$("#Type").val(), maxmin: true, area: ['950px', '90%'], fixed: false, @@ -428,7 +428,8 @@ form.render('select'); refreshTable(res.data.Detail); - + //浠撳簱 + getWareHouseList(res.data.WareHouseNo) //鑾峰彇瀹㈡埛/璐т富 getCustomerList(res.data.CustomerNo); //鑾峰彇渚涘簲鍟� @@ -459,25 +460,26 @@ // } // }); //鑾峰彇浠撳簱涓嬫媺妗嗕俊鎭� - // function getWareHouseList(){ - // sendData(IP + "/Sys/GetWarehouseDic", {}, 'get', function(res) { + function getWareHouseList(houseNo){ + sendData(IP + "/Sys/GetWarehouseDic", {}, 'get', function(res) { - // if (res.code == 0) { //鎴愬姛 - // $("#WarehouseId").empty(); - // $("#WarehouseId").append('<option value =""></option>'); - // for (var i = 0; i < res.data.length; i++) { - // $("#WarehouseId").append('<option value =' + res.data[i].WareHouseNo + '>' + - // res.data[i].WareHouseName + '</option>'); - // } - // form.render('select'); - // } else { //涓嶆垚鍔� - // layer.msg(res.msg, { - // icon: 2, - // time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級 - // }, function() {}); - // } - // }); - // } + if (res.code == 0) { //鎴愬姛 + $("#WarehouseId").empty(); + $("#WarehouseId").append('<option value =""></option>'); + for (var i = 0; i < res.data.length; i++) { + $("#WarehouseId").append('<option value =' + res.data[i].WareHouseNo + '>' + + res.data[i].WareHouseName + '</option>'); + } + $("#WarehouseId option[value='"+ houseNo +"']").attr("selected", "selected") + form.render('select'); + } else { //涓嶆垚鍔� + layer.msg(res.msg, { + icon: 2, + time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級 + }, function() {}); + } + }); + } //鑾峰彇瀹㈡埛涓嬫媺妗嗕俊鎭� function getCustomerList(customerNo) { sendData(IP + "/Basis/GetCustomerSelect", {}, 'get', function(res) { diff --git a/HTML/views/SOSetting/ExportSelectSkuFrom.html b/HTML/views/SOSetting/ExportSelectSkuFrom.html index 548ed45..6a06df0 100644 --- a/HTML/views/SOSetting/ExportSelectSkuFrom.html +++ b/HTML/views/SOSetting/ExportSelectSkuFrom.html @@ -75,6 +75,7 @@ }); function refreshTable() { + var param = { WareHouseNo:getQueryString('houseId'), Type:getQueryString('Type'), diff --git a/HTML/views/StatisticalReport/BoxInfor.html b/HTML/views/StatisticalReport/BoxInfor.html index 04858a6..24a9b54 100644 --- a/HTML/views/StatisticalReport/BoxInfor.html +++ b/HTML/views/StatisticalReport/BoxInfor.html @@ -349,27 +349,31 @@ //#region 鑷畾涔夎〃澶� var TotalColsArr = [[ { field: '', title: '搴忓彿', type: 'numbers', align: 'center', fixed: 'left', "disabled": true }, - { field: 'WareHouseName', title: '鎵�灞炰粨搴�', align: 'center' }, - { field: 'RoadwayName', title: '鎵�灞炲贩閬�', align: 'center' }, - { field: 'AreaName', title: '鎵�灞炲尯鍩�', align: 'center' }, - { field: 'LocatNo', title: '鍌ㄤ綅鍦板潃', align: 'center' }, - { field: 'PalletNo', title: '鎵樼洏鍙�', align: 'center' }, - { field: 'SkuNo', title: '鐗╂枡缂栫爜', align: 'center' }, - { field: 'SkuName', title: '鐗╂枡鍚嶇О', align: 'center' }, - { field: 'OwnerNo', title: '璐т富缂栫爜', align: 'center' }, - { field: 'OwnerName', title: '璐т富鍚嶇О', align: 'center' }, - { field: 'SupplierNo', title: '渚涘簲鍟嗙紪鐮�', align: 'center' }, - { field: 'SupplierName', title: '渚涘簲鍟嗗悕绉�', align: 'center' }, - { field: 'LotNo', title: '鎵规鍙�', align: 'center' }, - { field: 'LotText', title: '鎵规鎻忚堪', align: 'center' }, - { field: 'SupplierLot', title: '渚涜揣鎵规', align: 'center' }, - { field: 'Qty', title: '鏁伴噺', align: 'center' }, - { field: 'LockQty', title: '閿佸畾鏁伴噺', align: 'center', }, - { field: 'FrozenQty', title: '鍐荤粨鏁伴噺', align: 'center' }, - { field: 'InspectMark', title: '鎶芥鏍囪', align: 'center', templet: '#InspectMarkStatus' }, + { field: 'WareHouseName', title: '鎵�灞炰粨搴�', align: 'center' , width: 120,}, + { field: 'RoadwayName', title: '鎵�灞炲贩閬�', align: 'center', width: 120, }, + { field: 'AreaName', title: '鎵�灞炲尯鍩�', align: 'center', width: 120, }, + { field: 'LocatNo', title: '鍌ㄤ綅鍦板潃', align: 'center', width: 100, }, + { field: 'PalletNo', title: '鎵樼洏鍙�', align: 'center' , width: 100,}, + { field: 'SkuNo', title: '鐗╂枡缂栫爜', align: 'center' , width: 120,}, + { field: 'SkuName', title: '鐗╂枡鍚嶇О', align: 'center', width: 120,}, + { field: 'LotNo', title: '鎵规鍙�', align: 'center' , width: 100,}, + //{ field: 'LotText', title: '鎵规鎻忚堪', align: 'center' }, + { field: 'SupplierLot', title: '渚涜揣鎵规', align: 'center' , width: 120,}, + { field: 'Qty', title: '鏁伴噺', align: 'center' ,width: 90,}, + { field: 'LockQty', title: '閿佸畾鏁伴噺', align: 'center',width: 90, }, + { field: 'FrozenQty', title: '鍐荤粨鏁伴噺', align: 'center',width: 90, }, + + { field: 'InspectStatus', templet: '#InspectStatus1', title: '璐ㄦ鐘舵��', align: 'center' ,width: 100,}, + { field: 'InspectMark', title: '鎶芥鏍囪', align: 'center', templet: '#InspectMarkStatus' ,width: 100,}, + { field: 'BitPalletMark', title: '闆舵墭鏍囪', align: 'center', templet: '#BitPalletMarkStatus',width: 100,}, + { field: 'ProductionTime', title: '鐢熶骇鏃ユ湡', align: 'center', templet: '#templetProductionTime' }, - { field: 'InspectStatus', templet: '#InspectStatus1', title: '璐ㄦ鐘舵��', align: 'center' }, - { field: 'BitPalletMark', title: '闆舵墭鏍囪', align: 'center', templet: '#BitPalletMarkStatus' }, + { field: 'OwnerNo', title: '璐т富缂栫爜', align: 'center' , width: 100,}, + { field: 'OwnerName', title: '璐т富鍚嶇О', align: 'center' , width: 100,}, + { field: 'SupplierNo', title: '渚涘簲鍟嗙紪鐮�', align: 'center' , width: 100,}, + { field: 'SupplierName', title: '渚涘簲鍟嗗悕绉�', align: 'center' , width: 100,}, + + ]]; var TotalColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//灏嗚〃澶存暟鎹繘琛寀rl缂栫爜 //#endregion diff --git a/Wms/Model/ModelDto/BllSoDto/ExportNoticeDto.cs b/Wms/Model/ModelDto/BllSoDto/ExportNoticeDto.cs index 7cadc25..3cc96d0 100644 --- a/Wms/Model/ModelDto/BllSoDto/ExportNoticeDto.cs +++ b/Wms/Model/ModelDto/BllSoDto/ExportNoticeDto.cs @@ -23,6 +23,11 @@ public string Status { get; set; } /// <summary> + /// Desc:浠撳簱 + /// </summary> + public string WareHouseName { get; set; } + + /// <summary> /// Desc:鏉ユ簮 /// </summary> public string Origin { get; set; } @@ -134,6 +139,7 @@ { public string Origin { get; set; } public string SoNo { get; set; } + public string WareHouseNo { get; set; } public string Type { get; set; } //鍗曟嵁绫诲瀷 public string CustomerNo { get; set; } //瀹㈡埛缂栫爜 public int? LogisticsId { get; set; } //鎵胯繍鍟� diff --git a/Wms/Model/ModelVm/BllSoVm/ExportNoticeVm.cs b/Wms/Model/ModelVm/BllSoVm/ExportNoticeVm.cs index 57eb70f..296cdb8 100644 --- a/Wms/Model/ModelVm/BllSoVm/ExportNoticeVm.cs +++ b/Wms/Model/ModelVm/BllSoVm/ExportNoticeVm.cs @@ -30,9 +30,13 @@ public class AddEditExportNoticeVm { public int? Id { get; set; } //Id + /// <summary> + /// 0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2:鎶芥鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�7:鍏朵粬鍑哄簱銆�9鐢熶骇棰嗘枡鍑哄簱 ///3锛氱墿鏂欏彇鏍峰嚭搴撱��5:涓棿鍝佸嚭搴撱��6:浠e偍鍑哄簱銆�8:瀵勫瓨鍑哄簱 + /// </summary> [Required] [MaxLength(3)] public string Type { get; set; } //鍗曟嵁绫诲瀷 + public string WareHouseNo { get; set; } //浠撳簱鍙� public string CustomerNo { get; set; } //瀹㈡埛缂栫爜 public int? LogisticsId { get; set; } //鎵胯繍鍟� public List<AddEditExportNoticeDetailVm> Detail { get; set; } diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs index 230ca96..a8be286 100644 --- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs +++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs @@ -812,6 +812,8 @@ #endregion + #region JC34 + #region 鍩虹鍔熻兘 public async Task<List<ExportNoticeDto>> GetExportNoticeList(GetExportNoticeVm model, RefAsync<int> count) @@ -839,12 +841,14 @@ .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id) .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id) .LeftJoin<SysUserInfor>((a, b, c, d, e) => a.CheckUser == e.Id) - .Select((a, b, c, d, e) => new ExportNoticeDto() + .LeftJoin<SysWareHouse>((a, b, c, d, e,f) => a.WareHouseNo == f.WareHouseNo) + .Select((a, b, c, d, e,f) => new ExportNoticeDto() { Id = a.Id, SONo = a.SONo, Type = a.Type, Status = a.Status, + WareHouseName = f.WareHouseName, Origin = a.Origin, CustomerNo = a.CustomerNo, CustomerName = a.CustomerName, @@ -873,10 +877,14 @@ } //鑾峰彇娣诲姞/缂栬緫鍑哄簱鍗曟椂閫夋嫨鐗╂枡鏄庣粏淇℃伅 - public List<ExStockInfoDto> GetStockGroupList(string type, string ownerNo, string msg) + public List<ExStockInfoDto> GetStockGroupList(string house, string type, string ownerNo, string msg) { try { + if (string.IsNullOrEmpty(house)) + { + throw new Exception("璇烽�夋嫨鍑哄簱浠撳簱"); + } if (string.IsNullOrEmpty(type)) { throw new Exception("璇烽�夋嫨鍑哄簱鍗曠被鍨�"); @@ -893,23 +901,52 @@ switch (type)//0锛氬師鏂� 1锛氬寘鏉� 2锛氭垚鍝� 3锛氳�楁潗 4锛氬崐鎴愬搧 { case "0"://鎴愬搧鍑哄簱 + if (house !="W01") + { + throw new Exception("鎴愬搧鍑哄簱鍙兘閫夋嫨鎴愬搧搴�"); + } skuType = "(2)"; inspectStatus = "1"; break; case "1"://棰嗘枡鍑哄簱 + if (house != "W02") + { + throw new Exception("棰嗘枡鍑哄簱鍙兘閫夋嫨鍘熸枡搴�"); + } skuType = "(0,1,3)"; inspectStatus = "1"; break; case "2"://鎶芥鍑哄簱 - skuType = "(0,1,2,3)"; + if (house == "W01") + { + skuType = "(2)"; + } + if (house == "W02") + { + skuType = "(0,1,3)"; + } inspectStatus = "0,1,2"; break; case "3"://鐗╂枡鍙栨牱鍑哄簱 - skuType = "(0,1,2,3)"; + if (house == "W01") + { + skuType = "(2)"; + } + if (house == "W02") + { + skuType = "(0,1,3)"; + } inspectStatus = "0"; break; case "4"://涓嶅悎鏍煎搧鍑哄簱 - skuType = "(0,1,2,3)"; + if (house == "W01") + { + skuType = "(2)"; + } + if (house == "W02") + { + skuType = "(0,1,3)"; + } inspectStatus = "2"; break; case "5"://涓棿鍝佸嚭搴� @@ -920,14 +957,38 @@ skuType = "(2)"; inspectStatus = "0,1"; break; - case "8"://瀵勫瓨鍑哄簱 - skuType = "(0,1,2,3)"; + case "7"://鍏跺畠鍑哄簱 + if (house == "W01") + { + skuType = "(2)"; + } + if (house == "W02") + { + skuType = "(0,1,3,4)"; + } inspectStatus = "0,1"; + break; + case "8"://瀵勫瓨鍑哄簱 + if (house == "W01") + { + skuType = "(2)"; + } + if (house == "W02") + { + skuType = "(0,1,3)"; + } + inspectStatus = "0,1"; + break; + case "9"://鐢熶骇棰嗘枡鍑哄簱 + if (house != "W02") + { + throw new Exception("鐢熶骇棰嗘枡鍑哄簱鍙兘閫夋嫨鍘熸枡搴�"); + } + skuType = "(0,1,3)"; + inspectStatus = "1"; break; default: //鍏跺畠鍑哄簱 - skuType = "(0,1,2,3,4)"; - inspectStatus = "0,1"; - break; + throw new Exception("鍗曟嵁绫诲瀷閿欒"); } var skuList = sku.Where(m => skuType.Contains(m.Type)).ToList(); if (skuList.Count == 0) @@ -937,9 +998,9 @@ if (type == "6") { - skuList = skuList.Where(m=> string.IsNullOrWhiteSpace(m.PackagNo)).ToList(); + skuList = skuList.Where(m => string.IsNullOrWhiteSpace(m.PackagNo)).ToList(); } - if (type!="8") + if (type != "8") { skuList = skuList.Where(m => m.SkuNo != "100088").ToList(); } @@ -951,7 +1012,7 @@ var stockRst = new StockServer(); var stockDetailRst = new StockDetailServer(); Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() - //.And(it => it.WareHouseNo == wareHouseNo) + .And(it => it.WareHouseNo == house) .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => inspectStatus.Contains(it.InspectStatus)) .And(m => skuStrList.Contains(m.SkuNo)) .AndIF(type == "6", m => m.OwnerNo == ownerNo)//浠e偍鍑哄簱闇�瑕佸叧鑱旇揣涓� @@ -1035,6 +1096,23 @@ var skuNos = model.Detail.Select(a => a.SkuNo).Distinct().ToList(); //鏍规嵁鐗╂枡鍙疯幏鍙栫墿鏂欎俊鎭�佸簱瀛樻槑缁嗕腑鑾峰彇鎵规鎻忚堪渚涜揣鎵规绛� var skuList = Db.Queryable<SysMaterials>().Where(a => skuNos.Contains(a.SkuNo) && a.IsDel == "0").ToList(); + switch (model.WareHouseNo) + { + case "W01"://鎴愬搧搴� + if (skuList.Any(m=>m.Type !="2")) + { + throw new Exception("浠撳簱涓庡嚭搴撶墿鏂欎笉绗�"); + } + break; + case "W02"://鍘熸枡搴� + if (skuList.Any(m => m.Type == "2")) + { + throw new Exception("浠撳簱涓庡嚭搴撶墿鏂欎笉绗�"); + } + break; + default: + throw new Exception("浠撳簱鍙烽敊璇�"); + } var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList(); //var palletList = contextDb.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList(); //瀹㈡埛淇℃伅 @@ -1068,7 +1146,7 @@ throw new Exception($"鐗╂枡淇℃伅涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}"); } - //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2:鎶芥鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆� ///3锛氱墿鏂欏彇鏍峰嚭搴撱��5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱 + //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2:鎶芥鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�7:鍏朵粬鍑哄簱銆�9鐢熶骇棰嗘枡鍑哄簱 ///3锛氱墿鏂欏彇鏍峰嚭搴撱��5:涓棿鍝佸嚭搴撱��6:浠e偍鍑哄簱銆�8:瀵勫瓨鍑哄簱 if (model.Type == "0" || model.Type == "2" || model.Type == "4" || model.Type == "7") { if (string.IsNullOrWhiteSpace(d.LotNo)) @@ -1077,20 +1155,20 @@ } } - if (model.Type == "1") - { - if (list.Count(m=>m.SkuNo == d.SkuNo)>=2) - { - throw new Exception("棰嗘枡鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃3涓壒娆℃贩鎵瑰嚭搴�"); - } - } - else - { - if (list.Count(m => m.SkuNo == d.SkuNo) >= 1) - { - throw new Exception("鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃2涓壒娆℃贩鎵瑰嚭搴�"); - } - } + //if (model.Type == "1") + //{ + // if (list.Count(m=>m.SkuNo == d.SkuNo)>=2) + // { + // throw new Exception("棰嗘枡鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃3涓壒娆℃贩鎵瑰嚭搴�"); + // } + //} + //else + //{ + // if (list.Count(m => m.SkuNo == d.SkuNo) >= 1) + // { + // throw new Exception("鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃2涓壒娆℃贩鎵瑰嚭搴�"); + // } + //} //搴撳瓨 List<DataStock> stocks; @@ -1141,7 +1219,7 @@ }; list.Add(item); - + stocks.First().LockQty += d.Qty;//閿佸畾鏁伴噺 var i = Db.Updateable(stocks.First()).UpdateColumns(it => new { it.LockQty }) .ExecuteCommand(); @@ -1218,6 +1296,7 @@ { SoNo = notify.SONo, Type = notify.Type, + WareHouseNo = notify.WareHouseNo, CustomerNo = notify.CustomerNo, LogisticsId = notify.LogisticsId, //ExportWarehouseId = notify.ExportWarehouseId, @@ -1618,10 +1697,10 @@ //鏌ヨ鏀瑰悗鐨勫崟鎹俊鎭� 鍚庢湡鎺ュ彛瀵规帴瀹屽悗闇�鏀瑰姩鍥炰紶鍙傛暟 var detail = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == notice.SONo).Select(m => new SelectStockSkuDto { - LotNo =m.LotNo, + LotNo = m.LotNo, SkuNo = m.SkuNo, SkuName = m.SkuName, - Qty = m.Qty, + Qty = m.Qty, ExQty = decimal.Parse(m.CompleteQty.ToString()), Standard = m.Standard, IsBale = m.IsBale, @@ -2154,6 +2233,743 @@ } #endregion + + #region 鑷姩鍒嗛厤銆佸彇娑堝垎閰嶃�佽幏鍙栨墜鍔ㄥ垎閰嶇殑鏁版嵁婧愩�佹墜鍔ㄥ垎閰� + + // 鍒ゆ柇鏄惁鏄法鎵瑰嚭搴� + public bool IsCrossLotNo(string soNo) + { + try + { + //鏂规硶杩斿洖缁撴灉锛歜l + var bl = true; + //鏌ヨ鍗曟嵁淇℃伅 + var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0"); + //鍒ゆ柇鍗曟嵁绫诲瀷 鎴愬搧鍑哄簱銆侀鏂欏嚭搴擄紙鍏跺畠绫诲瀷璺冲嚭姝ゆ柟娉曪級 + if (notice.Type != "0" && notice.Type != "1") + { + return bl; + } + //鏌ヨ鍒板綋鍓嶅崟鎹笅鐨勫嚭搴撳崟鏄庣粏淇℃伅 + var noticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList(); + //搴撳瓨鎬昏〃淇℃伅 + var data = Db.Queryable<DataStock>().Where(m => m.IsDel == "0").ToList(); + //搴撳瓨鏄庣粏涓楠屽悎鏍兼壒娆¢泦鍚� + var dataDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1").GroupBy(g => g.LotNo).Select(s => s.LotNo).ToList(); + //搴撳瓨鏄庣粏琛ㄤ俊鎭� + var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0").ToList(); + + + //寰幆鍗曟嵁鏄庣粏淇℃伅 + foreach (var item in noticeDetail) + { + //楠岃瘉鍏堣繘鍏堝嚭鍘熷垯 + //鑾峰彇褰撳墠鐗╂枡鐨勬墍鏈夋壒娆′俊鎭�(鎺掗櫎鍗曟嵁鐨勬壒娆★紝闃叉鍗曟嵁鎵�鍦ㄦ壒娆¢攣瀹氭暟閲忓悗楠岃瘉灏忎簬绛変簬0) + var forData = data.Where(m => m.SkuNo == item.SkuNo + && m.LotNo != item.LotNo && (m.Qty - m.FrozenQty - m.LockQty) > 0 + && dataDetail.Contains(m.LotNo)).Select(m => m.LotNo).ToList(); + + forData.Add(item.LotNo); //闆嗗悎娣诲姞鍗曟嵁鐨勬壒娆� + //鑾峰彇鎺掑簭鍚庣殑绗竴涓壒娆� + var firstLotNo = forData.OrderBy(m => m).First(); + if (firstLotNo != item.LotNo) + { + bl = false; + break; + } + + //楠岃瘉鏁堟湡浼樺厛鍘熷垯 + var forDataBox = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo && m.LotNo != item.LotNo && m.Qty > 0).ToList(); + //鑾峰彇褰撳墠鍗曟嵁鎵规鐨勬渶杩戞晥鏈� + var expirationTimedt = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo + && m.LotNo == item.LotNo && m.Qty > 0).ToList(); + if (expirationTimedt.Count > 0) + { + var expirationTime = expirationTimedt.OrderBy(m => m.ExpirationTime).Select(m => m.ExpirationTime).First(); + //鑾峰彇搴撳瓨涓叾瀹冩壒娆℃晥鏈熷ぇ浜庡綋鍓嶅崟鎹壒娆$殑鏁堟湡鏁伴噺 + var num = forDataBox.Count(m => m.ExpirationTime > expirationTime); + //鍒ゆ柇鏄惁澶т簬0 + if (num > 0) + { + bl = false; + break; + } + } + else + { + var dataDetailtime = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1"). + Where(m => m.SkuNo == item.SkuNo + && m.LotNo == item.LotNo && m.Qty > 0) + .OrderBy(m => m.ExpirationTime) + .Select(m => m.ExpirationTime).First(); + + var num = forDataBox.Count(m => m.ExpirationTime > dataDetailtime); + //鍒ゆ柇鏄惁澶т簬0 + if (num > 0) + { + bl = false; + break; + } + } + } + + + return bl; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + /// <summary> + /// 鑷姩鍒嗛厤 + /// </summary> + /// <param name="soNo"></param> + /// <param name="userId"></param> + /// <returns></returns> + /// <exception cref="Exception"></exception> + public bool AutoAllot(string soNo, int userId) + { + try + { + #region 鍒ゆ柇鏉′欢锛堝嚭搴撳崟銆佸嚭搴撳崟鏄庣粏锛� + //鍑哄簱鍗� + var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault(); + if (notice == null) + { + throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); + } + if (notice.Status != "0" && notice.Status != "1") + { + throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负绛夊緟鎵ц鎴栭儴鍒嗗垎閰�;"); + } + //鍑哄簱鍗曟槑缁� + var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.AllotQty - m.Qty) <= 0).ToList(); + if (!detailList.Any()) + { + throw new Exception("鏈煡璇㈠埌绗﹀悎鍒嗛厤鏉′欢鐨勫嚭搴撳崟鎹槑缁嗕俊鎭�"); + } + + #endregion + + var exAllotList = new List<BllExportAllot>(); + var assign = new AllotSku(); + Db.BeginTran(); + try + { + List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); + foreach (var detail in detailList) + { + if (detail.AllotQty >= detail.Qty) + { + continue; + } + //杩橀渶瑕佸垎閰嶇殑鏁伴噺 + decimal needQty = detail.Qty - (detail.AllotQty == null ? 0 : decimal.Parse(detail.AllotQty.ToString())); + //搴撳瓨鏄庣粏 Status 0锛氬緟鍒嗛厤 1锛氶儴鍒嗗垎閰� 2锛氬凡鍒嗛厤 + var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0").ToList(); + + + //鍒ゆ柇鍗曞彿鏄惁鎸囧畾鎵规 + if (!string.IsNullOrWhiteSpace(detail.LotNo)) + { + stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && m.IsDel == "0").ToList(); + } + else + { + stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.IsDel == "0" && string.IsNullOrWhiteSpace(m.LotNo)).ToList(); + } + + if (stockDetail.Count < 1) + { + throw new Exception("搴撳瓨涓嶈冻,鏃犲彲鍑哄簱搴撳瓨"); + } + //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2锛氭娊妫�鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�7:鍏朵粬鍑哄簱銆�9:鐢熶骇棰嗘枡鍑哄簱 ///3:鍙栨牱鍑哄簱銆�5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱 + if (notice.Type == "0" || notice.Type == "1" || notice.Type == "9")//鎴愬搧銆侀鏂欏嚭搴� + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList(); + } + else if (notice.Type == "2")//鎶芥鍑哄簱 + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1" || m.InspectStatus == "2").ToList(); + } + else if (notice.Type == "4")//涓嶅悎鏍煎嚭搴� + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList(); + } + else if (notice.Type == "7") //銆佸叾瀹� + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1").ToList(); + } + if (stockDetail.Sum(m => m.Qty - m.LockQty) < needQty) + { + throw new Exception("搴撳瓨鏄庣粏鏁伴噺涓嶈冻"); + } + #region 鍖呰淇℃伅 + + var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 + var bNum = 0;//绠辩墿鍝佹暟閲� + //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺 + new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum); + + #endregion + + //鍙栧悎閫傚簱瀛樺晢鍝� + Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟 + var qty = 0m; + var house = ""; + if (notice.Type == "0") + { + house = "W01"; + } + //鍒嗛厤璐х墿 + qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, house); + foreach (var sc in stockQtyDic) + { + var s = stockDetail.FirstOrDefault(m => m.Id == sc.Key); + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = notice.SONo, + WaveNo = "", + SODetailNo = detail.Id, + StockId = sc.Key, + LotNo = s.LotNo, + LotText = s.LotText, + SupplierLot = s.SupplierLot, + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = detail.IsBale == "0" ? "0" : s.IsBale == "1" ? "0" : "1", //鏄惁瑁瑰寘 + IsBelt = detail.IsBelt == "0" ? "0" : s.IsBelt == "1" ? "0" : "1", //鏄惁鎵撳甫 + + Qty = sc.Value, + CompleteQty = 0, + //BoxexQty = s.Qty, //绠卞唴鏁伴噺 + Status = "0", + LogisticsId = notice.LogisticsId, + IsAdvance = "0", + OutMode = "",//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + exAllotList.Add(allot); + + s.LockQty += stockQtyDic[s.Id]; + + if (s.LockQty == s.Qty) + { + s.Status = "2"; + } + else + { + s.Status = "1"; + } + + var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); + + } + detail.AllotQty += qty; + detail.UpdateUser = userId; + detail.UpdateTime = DateTime.Now; + if (detail.Status == "0") + { + detail.Status = "1"; + } + if (qty > detail.Qty) + { + //搴撳瓨鎬昏〃 + var stock = Db.Queryable<DataStock>().First(d => d.IsDel == "0" + && d.SkuNo == detail.SkuNo + && d.LotNo == detail.LotNo); + stock.LockQty += qty - detail.Qty; + Db.Updateable(stock).ExecuteCommand(); + + //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜 + SoDetailInfo soDetail = new SoDetailInfo(); + soDetail.OrderDetailCode = detail.OrderDetailCode; + soDetail.LockQty = qty - detail.Qty; + soDetail.LotNo = detail.LotNo; + + soDetailList.Add(soDetail); + } + + } + + var mx = Db.Updateable(detailList).ExecuteCommand(); + var fp = Db.Insertable(exAllotList).ExecuteCommand(); + + //淇敼鍒嗛厤鍗曟嵁鐨勭姸鎬� + if (notice.Status == "0" || notice.Status == "1") + { + var bl = 0; + var bl2 = 0; + foreach (var item in detailList) + { + if (item.AllotQty <= 0) + { + continue; + } + if (item.AllotQty < item.Qty) + { + bl = 1; + } + else + { + bl2 = 1; + } + } + + switch (bl2) + { + case 1 when bl == 1: + notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 + break; + case 0 when bl == 1: + notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 + break; + case 1 when bl == 0: + notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 + break; + case 0 when bl == 0: + //璇佹槑鎵�鏈夊垎閰嶆暟閲忓叏閮ㄥ皬浜庣瓑浜庡嚭搴撴暟閲� 涓嶅仛淇敼 + break; + } + + } + notice.UpdateUser = userId; + notice.UpdateTime = DateTime.Now; + var zd = Db.Updateable(notice).ExecuteCommand(); + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", + notice.SONo, "鍒嗛厤", $"鑷姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); + + if (zd > 0 && mx > 0 && fp > 0 && k) + { + #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp + //绯荤粺瀵规帴鍚庢斁寮� + /*var jsonData = JsonConvert.SerializeObject(soDetailList); + + var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP"); + + var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 + if (obj.Success != 0) + { + throw new Exception("涓婁紶澶辫触" + obj.Message); + }*/ + #endregion + + Db.CommitTran(); + return true; + } + Db.RollbackTran(); + return false; + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + catch (Exception e) + { + throw new Exception("鑷姩鍒嗛厤澶辫触锛�" + e.Message); + } + } + + //鍙栨秷鍒嗛厤 + public bool CancelAllot(string soNo, int userId) + { + try + { + + var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault(); + if (notice == null) + { + throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); + } + if (notice.Status != "1" && notice.Status != "2") + { + throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负宸插垎閰嶆垨閮ㄥ垎鍒嗛厤鎴栨潵婧愭槸鍚︽槸WMS"); + } + //璇ュ崟鎹殑鍒嗛厤淇℃伅 Status 0锛氫换鍔′笅鍙� 1锛氬緟鎷h揣 2锛氶儴鍒嗘嫞璐� 3锛氬緟鍥炲簱 4锛氬凡瀹屾垚 + var allotList = Db.Queryable<BllExportAllot>().Where(o => o.IsDel == "0" && o.SONo == soNo).ToList(); + //鏈夊凡鎵ц鐨勫垎閰嶆暟鎹笉鑳藉彇娑� + if (allotList.Any(o => o.Status != "0")) + { + throw new Exception("褰撳墠鍗曟嵁鐨勫垎閰嶄俊鎭凡鏈夋墽琛屼腑锛屼笉鑳藉彇娑堝垎閰�"); + } + List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); + //寮�鍚簨鍔� + Db.BeginTran(); + try + { + //鏌ヨ鍒嗛厤鐨勬槑缁� + var detail = Db.Queryable<BllExportNoticeDetail>().Where(d => d.SONo == soNo && d.AllotQty > 0 && d.IsDel == "0").ToList(); + foreach (var d in detail) + { + var orders = allotList.Where(o => o.SODetailNo == d.Id).ToList(); + foreach (var o in orders) + { + var pq = Db.Queryable<DataStockDetail>().Where(t => t.Id == o.StockId); + + var pq2 = !string.IsNullOrWhiteSpace(o.LotNo) ? pq.Where(t => t.LotNo == o.LotNo).ToList() : pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo)).ToList(); + + var pallet = pq2.FirstOrDefault(); + if (pallet != null) + { + pallet.LockQty -= o.Qty; + pallet.Status = pallet.LockQty == 0 ? "0" : "1"; //濡傛灉閿佸畾鏁伴噺鏄�0鐘舵�佸彉鏇翠负寰呭垎閰� 鍚﹀垯涓洪儴鍒嗗垎閰� + Db.Updateable(pallet).ExecuteCommand(); + + //搴撳瓨鎬昏〃 + //var stock = Db.Queryable<DataStock>().First(t => t.SkuNo == pallet.SkuNo && t.IsDel == "0"); + //stock.LockQty -= o.Qty; + //Db.Updateable(stock).ExecuteCommand(); + } + + } + Db.Deleteable<BllExportAllot>(orders).ExecuteCommand(); + + if (d.AllotQty > d.Qty) + { + //搴撳瓨鎬昏〃 + var stock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo); + stock.LockQty -= (decimal)d.AllotQty - d.Qty; + Db.Updateable(stock).ExecuteCommand(); + + //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜 + SoDetailInfo soDetail = new SoDetailInfo(); + soDetail.OrderDetailCode = d.OrderDetailCode; + soDetail.LockQty = (decimal)(d.Qty - d.AllotQty); + soDetail.LotNo = d.LotNo; + + soDetailList.Add(soDetail); + } + d.AllotQty = 0; + d.Status = "0"; + d.UpdateUser = userId; + d.UpdateTime = DateTime.Now; + //if (notice.Type == "1" || notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//1锛氶鏂欏嚭搴撱�� + //{ + // if (d.IsIssueLotNo != "1") + // { + // d.LotNo = ""; + // } + + //} + } + + //鏌ヨ褰撳墠鍗曟嵁鏄惁宸叉坊鍔犲鏂欎换鍔� + if (notice.Type == "1") + { + var task = Db.Queryable<BllExportTimingTask>().First(m => m.IsDel == "0" && m.SoNo == soNo); + if (task != null) + { + task.IsDel = "1"; + task.UpdateUser = userId; + task.UpdateTime = DateTime.Now; + Db.Updateable(task).ExecuteCommand(); + } + } + notice.Status = "0"; + notice.UpdateUser = userId; + notice.UpdateTime = DateTime.Now; + Db.Updateable(detail).ExecuteCommand(); + Db.Updateable(notice).ExecuteCommand(); + + //绯荤粺瀵规帴鍚庢斁寮� + /*var jsonData = JsonConvert.SerializeObject(soDetailList); + + var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP"); + + var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 + if (obj.Success != 0) + { + throw new Exception("涓婁紶澶辫触" + obj.Message); + }*/ + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍙栨秷鍒嗛厤", $"鍙栨秷鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + return true; + } + catch (Exception e) + { + throw new Exception("鍙栨秷鍒嗛厤澶辫触" + e.Message); + } + } + + /// <summary> + /// 缁存姢鍑哄簱鍗曞娉ㄤ俊鎭� + /// </summary> + /// <param name="id"></param> + /// <param name="demo"></param> + /// <param name="userId"></param> + public void EditNoticeDemo(int id, string demo, int userId) + { + try + { + var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.Id == id); + if (notice == null) + { + throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); + } + notice.Demo = demo + "".Trim(); + notice.UpdateUser = userId; + notice.UpdateTime = DateTime.Now; + + int i = Db.Updateable(notice).ExecuteCommand(); + if (i > 0) + { + //娣诲姞鎿嶄綔鏃ュ織 + new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "缂栬緫", $"缂栬緫浜嗗崟鎹彿涓簕notice.SONo}鐨勫娉ㄤ俊鎭�", userId); + } + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + } + + //鑾峰彇搴撳瓨鏄庣粏淇℃伅锛堝嚭搴撳崟鎵嬪姩鍒嗛厤閫夋嫨鏁版嵁婧愶級 + public List<StockDetailDto> GetHandOutList(int detailId, string houseNo, string roadwayNo, string locateNo, string msg, string palletNo) + { + try + { + var detail = Db.Queryable<BllExportNoticeDetail>().First(d => d.Id == detailId); + + #region 鍒ゆ柇鏉′欢 + + if (detail == null) + { + throw new Exception("鑾峰彇澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒"); + } + if (detail.Status != "0" && detail.Status != "1" && detail.AllotQty >= detail.Qty) + { + throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鏄瓑寰呮墽琛屾垨鍒嗛厤涓紒"); + } + if (detail.AllotQty >= detail.Qty) + { + throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴�!"); + } + var notice = Db.Queryable<BllExportNotice>().First(a => a.SONo == detail.SONo); + if (notice == null) + { + throw new Exception("鑾峰彇澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗�!"); + } + if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") + { + throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!"); + } + #endregion + + Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() + .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo) + .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo) + .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo) + .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo == palletNo) + .AndIF(!string.IsNullOrWhiteSpace(msg), + m => m.SkuNo.Contains(msg.Trim()) + || m.SkuName.Contains(msg.Trim()) + || m.LocatNo.Contains(msg.Trim())) + .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && (m.Status == "0" || m.Status == "1")) + .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏� + + var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto + { + Id = a.Id, + SkuNo = a.SkuNo, + SkuName = a.SkuName, + Standard = a.Standard, + LotNo = a.LotNo, + LotText = a.LotText, + SupplierLot = a.SupplierLot, + Qty = a.Qty - a.LockQty - a.FrozenQty, + LocatNo = a.LocatNo, + RoadwayNo = a.RoadwayNo, + PalletNo = a.PalletNo, + Demo = a.Demo, + }).ToList(); + + return list; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + //鎵嬪姩鍒嗛厤鍑哄簱鍗曟槑缁� + public void AddHandOutAllot(AddHandOutVm model, int userId) + { + try + { + #region 鍒ゆ柇鏉′欢 + //鏁版嵁楠岃瘉 + var detail = Db.Queryable<BllExportNoticeDetail>().First(a => a.IsDel == "0" && a.Id == model.Id); + if (detail == null) + { + throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曡鎯咃紒"); + } + if (detail.AllotQty >= detail.Qty || (detail.Status != "0" && detail.Status != "1")) + { + throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒"); + } + var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == detail.SONo); + if (notice == null) + { + throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒"); + } + if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") + { + throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒"); + } + #endregion + + //鍗曟嵁鏄庣粏闇�瑕佺殑鍑哄簱鏁伴噺 + var needQty = detail.Qty - detail.AllotQty; + //鍒嗛厤鐨勫嚭搴撴暟閲� + var outQty = model.StockList.Select(s => s.Qty).ToList().Sum(); + if (outQty != needQty) + { + throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忎笌璁″垝鏁伴噺涓嶄竴鑷达紒"); + } + var stockIds = model.StockList.Select(a => a.StockId).ToList(); + //搴撳瓨鏄庣粏 + var stockList = Db.Queryable<DataStockDetail>().Where(a => stockIds.Contains(a.Id)).ToList(); + + //鍒嗛厤淇℃伅 + var allots = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == detail.Id && m.Status == "0").ToList(); + + //搴撳瓨鎬昏〃 + //var stockz = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo); + + var allotList = new List<BllExportAllot>(); + decimal outQtys = 0; + foreach (var st in model.StockList) + { + var stock = stockList.First(a => a.Id == st.StockId); + if (stock == null) + { + throw new Exception("鎿嶄綔澶辫触锛岄儴鍒嗗偍浣嶅簱瀛樺紓甯革紒"); + } + if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty)) // 杈撳叆鐨勬暟閲� - 鎵樼洏涓婂彲鐢ㄧ殑鏁伴噺锛堟墭鐩樹笂鏁伴噺-閿佸畾鐨勬暟閲�-鍐荤粨鐨勬暟閲忥級 + { + throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忚秴鍑哄簱瀛樻暟閲忥紒"); + } + + var bl = allots.FirstOrDefault(m => m.StockId == st.StockId); + if (bl == null) + { + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = notice.SONo, + WaveNo = "", + SODetailNo = detail.Id, + StockId = st.StockId, + LotNo = stock.LotNo, + LotText = stock.LotText, + SupplierLot = stock.SupplierLot, + SkuNo = stock.SkuNo, + SkuName = stock.SkuName, + Standard = stock.Standard, + PalletNo = stock.PalletNo, + IsBale = stock.IsBale, + IsBelt = stock.IsBelt, + Qty = st.Qty, + CompleteQty = 0, + Status = "0", + LogisticsId = notice.LogisticsId, + IsAdvance = "0", + OutMode = "",//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + allotList.Add(allot); + } + else + { + bl.Qty += st.Qty; + Db.Updateable(bl).ExecuteCommand(); + } + + //搴撳瓨鏄庣粏 + stock.LockQty += st.Qty; + stock.Status = stock.LockQty == stock.Qty ? "2" : "1"; + + //搴撳瓨鎬昏〃 + //stockz.LockQty += st.Qty; + //Db.Updateable(stockz).ExecuteCommand(); + + + Db.Updateable(stock).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); + outQtys += st.Qty; + } + Db.Insertable(allotList).ExecuteCommand(); + //淇敼鍗曟嵁鏄庣粏 + detail.AllotQty += outQtys; + detail.UpdateUser = userId; + detail.UpdateTime = DateTime.Now; + if (detail.Status == "0") + { + detail.Status = "1"; + } + + Db.Updateable(detail).ExecuteCommand(); + var detailList = Db.Queryable<BllExportNoticeDetail>() + .Where(m => m.IsDel == "0" && m.SONo == notice.SONo).ToList(); + //淇敼鍑哄簱鍗曠姸鎬� + if (notice.Status == "0" || notice.Status == "1") + { + decimal totalQty = 0; + decimal totalAllotQty = 0; + foreach (var item in detailList) + { + totalQty += item.Qty; + totalAllotQty += Convert.ToInt32(item.AllotQty); + } + + if (totalAllotQty >= totalQty) + { + notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 + } + else if (totalAllotQty < totalQty && totalAllotQty > 0) + { + notice.Status = "1";//璇佹槑鍒嗛厤鏁伴噺灏忎簬绛変簬鍑哄簱鏁伴噺 淇敼涓洪儴鍒嗗垎閰� + } + Db.Updateable(notice).ExecuteCommand(); + } + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍒嗛厤", $"鎵嬪姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}銆佺墿鏂欙細{detail.SkuNo}銆佹壒娆★細{detail.LotNo}鐨勫崟鎹俊鎭�", userId); + + Db.CommitTran(); + + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + + #endregion + + #endregion + + //------------------------------------------------------------------ @@ -4289,727 +5105,7 @@ } #endregion - #region 鑷姩鍒嗛厤銆佸彇娑堝垎閰嶃�佽幏鍙栨墜鍔ㄥ垎閰嶇殑鏁版嵁婧愩�佹墜鍔ㄥ垎閰� - - // 鍒ゆ柇鏄惁鏄法鎵瑰嚭搴� - public bool IsCrossLotNo(string soNo) - { - try - { - //鏂规硶杩斿洖缁撴灉锛歜l - var bl = true; - //鏌ヨ鍗曟嵁淇℃伅 - var notice = Db.Queryable<BllExportNotice>().First(m=>m.SONo == soNo && m.IsDel == "0"); - //鍒ゆ柇鍗曟嵁绫诲瀷 鎴愬搧鍑哄簱銆侀鏂欏嚭搴擄紙鍏跺畠绫诲瀷璺冲嚭姝ゆ柟娉曪級 - if (notice.Type!="0" && notice.Type!="1") - { - return bl; - } - //鏌ヨ鍒板綋鍓嶅崟鎹笅鐨勫嚭搴撳崟鏄庣粏淇℃伅 - var noticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList(); - //搴撳瓨鎬昏〃淇℃伅 - var data = Db.Queryable<DataStock>().Where(m => m.IsDel == "0").ToList(); - //搴撳瓨鏄庣粏涓楠屽悎鏍兼壒娆¢泦鍚� - var dataDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1").GroupBy(g => g.LotNo).Select(s => s.LotNo).ToList(); - //搴撳瓨鏄庣粏琛ㄤ俊鎭� - var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0").ToList(); - - - //寰幆鍗曟嵁鏄庣粏淇℃伅 - foreach (var item in noticeDetail) - { - //楠岃瘉鍏堣繘鍏堝嚭鍘熷垯 - //鑾峰彇褰撳墠鐗╂枡鐨勬墍鏈夋壒娆′俊鎭�(鎺掗櫎鍗曟嵁鐨勬壒娆★紝闃叉鍗曟嵁鎵�鍦ㄦ壒娆¢攣瀹氭暟閲忓悗楠岃瘉灏忎簬绛変簬0) - var forData = data.Where(m => m.SkuNo == item.SkuNo - && m.LotNo != item.LotNo && (m.Qty - m.FrozenQty - m.LockQty) > 0 - && dataDetail.Contains(m.LotNo)).Select(m=>m.LotNo).ToList(); - - forData.Add(item.LotNo); //闆嗗悎娣诲姞鍗曟嵁鐨勬壒娆� - //鑾峰彇鎺掑簭鍚庣殑绗竴涓壒娆� - var firstLotNo = forData.OrderBy(m => m).First(); - if (firstLotNo != item.LotNo) - { - bl = false; - break; - } - - //楠岃瘉鏁堟湡浼樺厛鍘熷垯 - var forDataBox = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo && m.LotNo != item.LotNo && m.Qty > 0).ToList(); - //鑾峰彇褰撳墠鍗曟嵁鎵规鐨勬渶杩戞晥鏈� - var expirationTimedt = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo - && m.LotNo == item.LotNo && m.Qty > 0).ToList(); - if (expirationTimedt.Count > 0) - { - var expirationTime = expirationTimedt.OrderBy(m => m.ExpirationTime).Select(m => m.ExpirationTime).First(); - //鑾峰彇搴撳瓨涓叾瀹冩壒娆℃晥鏈熷ぇ浜庡綋鍓嶅崟鎹壒娆$殑鏁堟湡鏁伴噺 - var num = forDataBox.Count(m => m.ExpirationTime > expirationTime); - //鍒ゆ柇鏄惁澶т簬0 - if (num > 0) - { - bl = false; - break; - } - } - else - { - var dataDetailtime = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1"). - Where(m => m.SkuNo == item.SkuNo - && m.LotNo == item.LotNo && m.Qty > 0) - .OrderBy(m => m.ExpirationTime) - .Select(m => m.ExpirationTime).First(); - - var num = forDataBox.Count(m => m.ExpirationTime > dataDetailtime); - //鍒ゆ柇鏄惁澶т簬0 - if (num > 0) - { - bl = false; - break; - } - } - } - - - return bl; - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - //鑷姩鍒嗛厤 - public bool AutoAllot(string soNo, int userId) - { - try - { - #region 鍒ゆ柇鏉′欢锛堝嚭搴撳崟銆佸嚭搴撳崟鏄庣粏锛� - //鍑哄簱鍗� - var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault(); - if (notice == null) - { - throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); - } - if (notice.Status != "0" && notice.Status != "1") - { - throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负绛夊緟鎵ц鎴栭儴鍒嗗垎閰�;"); - } - //鍑哄簱鍗曟槑缁� - var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.AllotQty - m.Qty) <= 0).ToList(); - if (!detailList.Any()) - { - throw new Exception("鏈煡璇㈠埌绗﹀悎鍒嗛厤鏉′欢鐨勫嚭搴撳崟鎹槑缁嗕俊鎭�"); - } - - #endregion - - var exAllotList = new List<BllExportAllot>(); - var assign = new AllotSku(); - Db.BeginTran(); - try - { - List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); - foreach (var detail in detailList) - { - if (detail.AllotQty >= detail.Qty) - { - continue; - } - //杩橀渶瑕佸垎閰嶇殑鏁伴噺 - decimal needQty = detail.Qty - (detail.AllotQty == null? 0: decimal.Parse(detail.AllotQty.ToString())); - //搴撳瓨鏄庣粏 Status 0锛氬緟鍒嗛厤 1锛氶儴鍒嗗垎閰� 2锛氬凡鍒嗛厤 - var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0").ToList(); - - - //鍒ゆ柇鍗曞彿鏄惁鎸囧畾鎵规 - if (!string.IsNullOrWhiteSpace(detail.LotNo)) - { - stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && m.IsDel == "0").ToList(); - } - else - { - stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.IsDel == "0" && string.IsNullOrWhiteSpace(m.LotNo)).ToList(); - } - - if (stockDetail.Count < 1) - { - throw new Exception("搴撳瓨涓嶈冻,鏃犲彲鍑哄簱搴撳瓨"); - } - //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2锛氭娊妫�鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆� ///3:鍙栨牱鍑哄簱銆�5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱 - if (notice.Type == "0" || notice.Type == "1" )//鎴愬搧銆侀鏂欏嚭搴� - { - stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList(); - } - else if (notice.Type == "2" )//鎶芥鍑哄簱 - { - stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1" || m.InspectStatus == "2").ToList(); - } - else if (notice.Type == "6" || notice.Type == "7" ) //浠e偍銆佸叾瀹� - { - stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1").ToList(); - } - else if (notice.Type == "4")//涓嶅悎鏍煎嚭搴� - { - stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList(); - } - if (stockDetail.Sum(m=>m.Qty-m.LockQty) < needQty) - { - throw new Exception("搴撳瓨鏄庣粏鏁伴噺涓嶈冻"); - } - #region 鍖呰淇℃伅 - - var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 - var bNum = 0;//绠辩墿鍝佹暟閲� - //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺 - new Common().GetPackQtyInfo(detail.PackagNo,ref pNum,ref bNum); - - #endregion - - //鍙栧悎閫傚簱瀛樺晢鍝� - Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟 - var qty = 0m; - //鍒嗛厤璐х墿 - qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, detail.LotNo, detail.IsMixBox); - foreach (var sc in stockQtyDic) - { - var s = stockDetail.FirstOrDefault(m => m.Id == sc.Key); - //娣诲姞鍒嗛厤琛ㄤ俊鎭� - var allot = new BllExportAllot - { - SONo = notice.SONo, - WaveNo = "", - SODetailNo = detail.Id, - StockId = sc.Key, - LotNo = s.LotNo, - LotText = s.LotText, - SupplierLot = s.SupplierLot, - SkuNo = s.SkuNo, - SkuName = s.SkuName, - Standard = s.Standard, - PalletNo = s.PalletNo, - IsBale = detail.IsBale == "0" ? "0" : s.IsBale == "1" ? "0" : "1", //鏄惁瑁瑰寘 - IsBelt = detail.IsBelt == "0" ? "0" : s.IsBelt == "1" ? "0" : "1", //鏄惁鎵撳甫 - - Qty = sc.Value, - CompleteQty = 0, - //BoxexQty = s.Qty, //绠卞唴鏁伴噺 - Status = "0", - LogisticsId = notice.LogisticsId, - IsAdvance = "0", - OutMode = "",//鍑哄簱鍙� - - CreateUser = userId, - CreateTime = DateTime.Now - }; - exAllotList.Add(allot); - - s.LockQty += stockQtyDic[s.Id]; - - if (s.LockQty == s.Qty) - { - s.Status = "2"; - } - else - { - s.Status = "1"; - } - - var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); - - } - detail.AllotQty += qty; - detail.UpdateUser = userId; - detail.UpdateTime = DateTime.Now; - if (detail.Status == "0") - { - detail.Status = "1"; - } - if (qty > detail.Qty) - { - //搴撳瓨鎬昏〃 - var stock = Db.Queryable<DataStock>().First(d => d.IsDel == "0" - && d.SkuNo == detail.SkuNo - && d.LotNo == detail.LotNo); - stock.LockQty += qty-detail.Qty; - Db.Updateable(stock).ExecuteCommand(); - - //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜 - SoDetailInfo soDetail = new SoDetailInfo(); - soDetail.OrderDetailCode = detail.OrderDetailCode; - soDetail.LockQty = qty - detail.Qty; - soDetail.LotNo = detail.LotNo; - - soDetailList.Add(soDetail); - } - - } - - var mx = Db.Updateable(detailList).ExecuteCommand(); - var fp = Db.Insertable(exAllotList).ExecuteCommand(); - - //淇敼鍒嗛厤鍗曟嵁鐨勭姸鎬� - if (notice.Status == "0" || notice.Status == "1") - { - var bl = 0; - var bl2 = 0; - foreach (var item in detailList) - { - if (item.AllotQty <= 0) - { - continue; - } - if (item.AllotQty < item.Qty) - { - bl = 1; - } - else - { - bl2 = 1; - } - } - - switch (bl2) - { - case 1 when bl == 1: - notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 - break; - case 0 when bl == 1: - notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 - break; - case 1 when bl == 0: - notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 - break; - case 0 when bl == 0: - //璇佹槑鎵�鏈夊垎閰嶆暟閲忓叏閮ㄥ皬浜庣瓑浜庡嚭搴撴暟閲� 涓嶅仛淇敼 - break; - } - - } - notice.UpdateUser = userId; - notice.UpdateTime = DateTime.Now; - var zd = Db.Updateable(notice).ExecuteCommand(); - - //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", - notice.SONo, "鍒嗛厤", $"鑷姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); - - if (zd > 0 && mx > 0 && fp > 0 && k) - { - #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp - //绯荤粺瀵规帴鍚庢斁寮� - /*var jsonData = JsonConvert.SerializeObject(soDetailList); - - var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP"); - - var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 - if (obj.Success != 0) - { - throw new Exception("涓婁紶澶辫触" + obj.Message); - }*/ - #endregion - - Db.CommitTran(); - return true; - } - Db.RollbackTran(); - return false; - } - catch (Exception e) - { - Db.RollbackTran(); - throw new Exception(e.Message); - } - } - catch (Exception e) - { - throw new Exception("鑷姩鍒嗛厤澶辫触锛�" + e.Message); - } - } - - //鍙栨秷鍒嗛厤 - public bool CancelAllot(string soNo, int userId) - { - try - { - - var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault(); - if (notice == null) - { - throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); - } - if (notice.Status != "1" && notice.Status != "2") - { - throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负宸插垎閰嶆垨閮ㄥ垎鍒嗛厤鎴栨潵婧愭槸鍚︽槸WMS"); - } - //璇ュ崟鎹殑鍒嗛厤淇℃伅 Status 0锛氫换鍔′笅鍙� 1锛氬緟鎷h揣 2锛氶儴鍒嗘嫞璐� 3锛氬緟鍥炲簱 4锛氬凡瀹屾垚 - var allotList = Db.Queryable<BllExportAllot>().Where(o => o.IsDel == "0" && o.SONo == soNo).ToList(); - //鏈夊凡鎵ц鐨勫垎閰嶆暟鎹笉鑳藉彇娑� - if (allotList.Any(o => o.Status != "0")) - { - throw new Exception("褰撳墠鍗曟嵁鐨勫垎閰嶄俊鎭凡鏈夋墽琛屼腑锛屼笉鑳藉彇娑堝垎閰�"); - } - List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); - //寮�鍚簨鍔� - Db.BeginTran(); - try - { - //鏌ヨ鍒嗛厤鐨勬槑缁� - var detail = Db.Queryable<BllExportNoticeDetail>().Where(d => d.SONo == soNo && d.AllotQty > 0 && d.IsDel == "0").ToList(); - foreach (var d in detail) - { - var orders = allotList.Where(o => o.SODetailNo == d.Id).ToList(); - foreach (var o in orders) - { - var pq = Db.Queryable<DataStockDetail>().Where(t => t.Id == o.StockId); - - var pq2 = !string.IsNullOrWhiteSpace(o.LotNo) ? pq.Where(t => t.LotNo == o.LotNo).ToList() : pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo)).ToList(); - - var pallet = pq2.FirstOrDefault(); - if (pallet != null) - { - pallet.LockQty -= o.Qty; - pallet.Status = pallet.LockQty == 0 ? "0" : "1"; //濡傛灉閿佸畾鏁伴噺鏄�0鐘舵�佸彉鏇翠负寰呭垎閰� 鍚﹀垯涓洪儴鍒嗗垎閰� - Db.Updateable(pallet).ExecuteCommand(); - - //搴撳瓨鎬昏〃 - //var stock = Db.Queryable<DataStock>().First(t => t.SkuNo == pallet.SkuNo && t.IsDel == "0"); - //stock.LockQty -= o.Qty; - //Db.Updateable(stock).ExecuteCommand(); - } - - } - Db.Deleteable<BllExportAllot>(orders).ExecuteCommand(); - - if (d.AllotQty > d.Qty) - { - //搴撳瓨鎬昏〃 - var stock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo); - stock.LockQty -= (decimal)d.AllotQty - d.Qty; - Db.Updateable(stock).ExecuteCommand(); - - //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜 - SoDetailInfo soDetail = new SoDetailInfo(); - soDetail.OrderDetailCode = d.OrderDetailCode; - soDetail.LockQty = (decimal)(d.Qty-d.AllotQty); - soDetail.LotNo = d.LotNo; - - soDetailList.Add(soDetail); - } - d.AllotQty = 0; - d.Status = "0"; - d.UpdateUser = userId; - d.UpdateTime = DateTime.Now; - //if (notice.Type == "1" || notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//1锛氶鏂欏嚭搴撱�� - //{ - // if (d.IsIssueLotNo != "1") - // { - // d.LotNo = ""; - // } - - //} - } - - //鏌ヨ褰撳墠鍗曟嵁鏄惁宸叉坊鍔犲鏂欎换鍔� - if (notice.Type == "1") - { - var task = Db.Queryable<BllExportTimingTask>().First(m => m.IsDel == "0" && m.SoNo == soNo); - if (task!=null) - { - task.IsDel = "1"; - task.UpdateUser = userId; - task.UpdateTime = DateTime.Now; - Db.Updateable(task).ExecuteCommand(); - } - } - notice.Status = "0"; - notice.UpdateUser = userId; - notice.UpdateTime = DateTime.Now; - Db.Updateable(detail).ExecuteCommand(); - Db.Updateable(notice).ExecuteCommand(); - - //绯荤粺瀵规帴鍚庢斁寮� - /*var jsonData = JsonConvert.SerializeObject(soDetailList); - - var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP"); - - var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 - if (obj.Success != 0) - { - throw new Exception("涓婁紶澶辫触" + obj.Message); - }*/ - - //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍙栨秷鍒嗛厤", $"鍙栨秷鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); - Db.CommitTran(); - } - catch (Exception e) - { - Db.RollbackTran(); - throw new Exception(e.Message); - } - return true; - } - catch (Exception e) - { - throw new Exception("鍙栨秷鍒嗛厤澶辫触" + e.Message); - } - } - - /// <summary> - /// 缁存姢鍑哄簱鍗曞娉ㄤ俊鎭� - /// </summary> - /// <param name="id"></param> - /// <param name="demo"></param> - /// <param name="userId"></param> - public void EditNoticeDemo(int id, string demo, int userId) - { - try - { - var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.Id == id); - if (notice == null) - { - throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); - } - notice.Demo = demo + "".Trim(); - notice.UpdateUser = userId; - notice.UpdateTime = DateTime.Now; - - int i = Db.Updateable(notice).ExecuteCommand(); - if (i > 0) - { - //娣诲姞鎿嶄綔鏃ュ織 - new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "缂栬緫", $"缂栬緫浜嗗崟鎹彿涓簕notice.SONo}鐨勫娉ㄤ俊鎭�", userId); - } - } - catch (Exception ex) - { - throw new Exception(ex.Message); - } - } - - //鑾峰彇搴撳瓨鏄庣粏淇℃伅锛堝嚭搴撳崟鎵嬪姩鍒嗛厤閫夋嫨鏁版嵁婧愶級 - public List<StockDetailDto> GetHandOutList(int detailId, string houseNo, string roadwayNo, string locateNo, string msg, string palletNo) - { - try - { - var detail = Db.Queryable<BllExportNoticeDetail>().First(d => d.Id == detailId); - - #region 鍒ゆ柇鏉′欢 - - if (detail == null) - { - throw new Exception("鑾峰彇澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒"); - } - if (detail.Status != "0" && detail.Status != "1" && detail.AllotQty >= detail.Qty) - { - throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鏄瓑寰呮墽琛屾垨鍒嗛厤涓紒"); - } - if (detail.AllotQty >= detail.Qty) - { - throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴�!"); - } - var notice = Db.Queryable<BllExportNotice>().First(a => a.SONo == detail.SONo); - if (notice == null) - { - throw new Exception("鑾峰彇澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗�!"); - } - if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") - { - throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!"); - } - #endregion - - Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() - .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo) - .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo) - .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo) - .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo == palletNo) - .AndIF(!string.IsNullOrWhiteSpace(msg), - m => m.SkuNo.Contains(msg.Trim()) - || m.SkuName.Contains(msg.Trim()) - || m.LocatNo.Contains(msg.Trim())) - .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && (m.Status == "0" || m.Status == "1")) - .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏� - - var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto - { - Id = a.Id, - SkuNo = a.SkuNo, - SkuName = a.SkuName, - Standard = a.Standard, - LotNo = a.LotNo, - LotText = a.LotText, - SupplierLot = a.SupplierLot, - Qty = a.Qty - a.LockQty - a.FrozenQty, - LocatNo = a.LocatNo, - RoadwayNo = a.RoadwayNo, - PalletNo = a.PalletNo, - Demo = a.Demo, - }).ToList(); - - return list; - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - //鎵嬪姩鍒嗛厤鍑哄簱鍗曟槑缁� - public void AddHandOutAllot(AddHandOutVm model, int userId) - { - try - { - #region 鍒ゆ柇鏉′欢 - //鏁版嵁楠岃瘉 - var detail = Db.Queryable<BllExportNoticeDetail>().First(a => a.IsDel == "0" && a.Id == model.Id); - if (detail == null) - { - throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曡鎯咃紒"); - } - if (detail.AllotQty >= detail.Qty || (detail.Status != "0" && detail.Status != "1")) - { - throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒"); - } - var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == detail.SONo); - if (notice == null) - { - throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒"); - } - if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") - { - throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒"); - } - #endregion - - //鍗曟嵁鏄庣粏闇�瑕佺殑鍑哄簱鏁伴噺 - var needQty = detail.Qty - detail.AllotQty; - //鍒嗛厤鐨勫嚭搴撴暟閲� - var outQty = model.StockList.Select(s => s.Qty).ToList().Sum(); - if (outQty != needQty) - { - throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忎笌璁″垝鏁伴噺涓嶄竴鑷达紒"); - } - var stockIds = model.StockList.Select(a => a.StockId).ToList(); - //搴撳瓨鏄庣粏 - var stockList = Db.Queryable<DataStockDetail>().Where(a => stockIds.Contains(a.Id)).ToList(); - - //鍒嗛厤淇℃伅 - var allots = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == detail.Id && m.Status == "0").ToList(); - - //搴撳瓨鎬昏〃 - //var stockz = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo); - - var allotList = new List<BllExportAllot>(); - decimal outQtys = 0; - foreach (var st in model.StockList) - { - var stock = stockList.First(a => a.Id == st.StockId); - if (stock == null) - { - throw new Exception("鎿嶄綔澶辫触锛岄儴鍒嗗偍浣嶅簱瀛樺紓甯革紒"); - } - if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty)) // 杈撳叆鐨勬暟閲� - 鎵樼洏涓婂彲鐢ㄧ殑鏁伴噺锛堟墭鐩樹笂鏁伴噺-閿佸畾鐨勬暟閲�-鍐荤粨鐨勬暟閲忥級 - { - throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忚秴鍑哄簱瀛樻暟閲忥紒"); - } - - var bl = allots.FirstOrDefault(m => m.StockId == st.StockId); - if (bl == null) - { - //娣诲姞鍒嗛厤琛ㄤ俊鎭� - var allot = new BllExportAllot - { - SONo = notice.SONo, - WaveNo = "", - SODetailNo = detail.Id, - StockId = st.StockId, - LotNo = stock.LotNo, - LotText = stock.LotText, - SupplierLot = stock.SupplierLot, - SkuNo = stock.SkuNo, - SkuName = stock.SkuName, - Standard = stock.Standard, - PalletNo = stock.PalletNo, - IsBale = stock.IsBale, - IsBelt = stock.IsBelt, - Qty = st.Qty, - CompleteQty = 0, - Status = "0", - LogisticsId = notice.LogisticsId, - IsAdvance = "0", - OutMode = "",//鍑哄簱鍙� - - CreateUser = userId, - CreateTime = DateTime.Now - }; - allotList.Add(allot); - } - else - { - bl.Qty += st.Qty; - Db.Updateable(bl).ExecuteCommand(); - } - - //搴撳瓨鏄庣粏 - stock.LockQty += st.Qty; - stock.Status = stock.LockQty == stock.Qty ? "2" : "1"; - - //搴撳瓨鎬昏〃 - //stockz.LockQty += st.Qty; - //Db.Updateable(stockz).ExecuteCommand(); - - - Db.Updateable(stock).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); - outQtys += st.Qty; - } - Db.Insertable(allotList).ExecuteCommand(); - //淇敼鍗曟嵁鏄庣粏 - detail.AllotQty += outQtys; - detail.UpdateUser = userId; - detail.UpdateTime = DateTime.Now; - if (detail.Status == "0") - { - detail.Status = "1"; - } - - Db.Updateable(detail).ExecuteCommand(); - var detailList = Db.Queryable<BllExportNoticeDetail>() - .Where(m => m.IsDel == "0" && m.SONo == notice.SONo).ToList(); - //淇敼鍑哄簱鍗曠姸鎬� - if (notice.Status == "0" || notice.Status == "1") - { - decimal totalQty = 0; - decimal totalAllotQty = 0; - foreach (var item in detailList) - { - totalQty += item.Qty; - totalAllotQty += Convert.ToInt32(item.AllotQty); - } - - if (totalAllotQty >= totalQty) - { - notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 - } - else if (totalAllotQty < totalQty && totalAllotQty > 0) - { - notice.Status = "1";//璇佹槑鍒嗛厤鏁伴噺灏忎簬绛変簬鍑哄簱鏁伴噺 淇敼涓洪儴鍒嗗垎閰� - } - Db.Updateable(notice).ExecuteCommand(); - } - //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍒嗛厤", $"鎵嬪姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}銆佺墿鏂欙細{detail.SkuNo}銆佹壒娆★細{detail.LotNo}鐨勫崟鎹俊鎭�", userId); - - Db.CommitTran(); - - } - catch (Exception e) - { - Db.RollbackTran(); - throw new Exception(e.Message); - } - } - - #endregion + /// <summary> /// 鍒ゆ柇鍑哄簱鏄惁闇�瑕佹媶绠� diff --git a/Wms/WMS.BLL/BllSoServer/WaveMageServer.cs b/Wms/WMS.BLL/BllSoServer/WaveMageServer.cs index 393fd6d..60f2d6e 100644 --- a/Wms/WMS.BLL/BllSoServer/WaveMageServer.cs +++ b/Wms/WMS.BLL/BllSoServer/WaveMageServer.cs @@ -480,7 +480,12 @@ Dictionary<string, int> zxQtyDic = new Dictionary<string, int>();//鎵樺嚭鏁寸鏁� //鍒嗛厤璐х墿 //assign.AllocatePallets(stocks, pNum, bNum, needQty, stockQtyDic, zxQtyDic); - var qty = assign.AllotPallets(stockDetail, decimal.Parse(needQty.ToString()), pNum, bNum, stockQtyDic, detail.LotNo, detail.IsMixBox); + var house = ""; + if (notice.Type == "0") + { + house = "W01"; + } + var qty = assign.AllotPallets(stockDetail, decimal.Parse(needQty.ToString()), pNum, bNum, stockQtyDic,""); foreach (var sc in stockQtyDic) { diff --git a/Wms/WMS.BLL/Logic/AllotSku.cs b/Wms/WMS.BLL/Logic/AllotSku.cs index 03ae06d..4a44dff 100644 --- a/Wms/WMS.BLL/Logic/AllotSku.cs +++ b/Wms/WMS.BLL/Logic/AllotSku.cs @@ -23,7 +23,7 @@ /// <param name="lotNo">鎵规</param> /// <param name="isMixBox">鏄惁鎺ュ彈鎷肩 0锛氬惁 1锛氭槸</param> /// <returns></returns> - public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic,string lotNo,string isMixBox) + public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic,string house) { //浼樺厛鍏堣繘鍏堝嚭锛堝揩杩囨湡鐨勫厛鍑猴級 //浼樺厛闆剁銆侀浂鎵橈紙鍑哄畬闆剁鍑烘暣绠憋級 @@ -55,8 +55,13 @@ } } #endregion + var list = palletList; decimal qty = 0; //鍒嗛厤鐨勬�绘暟閲� - var list = GetDataListOrderByDept(palletList); + + if (house == "W01") //浠撳簱鏄瘑闆嗗簱鍏堣繘琛屾帓搴� + { + list = GetDataListOrder(palletList); + } if (fullPalletQty == 0)//鏃犲寘瑁呯墿鏂欏垎閰� { @@ -96,14 +101,7 @@ //鏁f墭 foreach (var s in st) { - decimal otherLotQty = 0;//娣风涓叾浠栨壒娆℃暟閲� - //涓嶆帴鍙楁嫾绠� - if (isMixBox == "0") - { - //鏌ユ壘鍑烘贩绠遍泦鍚� - otherLotQty = GetMixBoxQty(s.Id, lotNo); - } - var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty - otherLotQty).ToString()); + var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString()); if (needQty - qty < detailQty) { var num = needQty - qty; @@ -126,14 +124,7 @@ var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級 foreach (var ss in zt) { - decimal otherLotQty = 0;//娣风涓叾浠栨壒娆℃暟閲� - //涓嶆帴鍙楁嫾绠� - if (isMixBox == "0") - { - //鏌ユ壘鍑烘贩绠遍泦鍚� - otherLotQty = GetMixBoxQty(ss.Id, lotNo); - } - var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString()); + var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); if (needQty - qty < detailQty) { var num = needQty - qty; @@ -164,14 +155,7 @@ var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級 foreach (var ss in zt) { - decimal otherLotQty = 0;//娣风涓叾浠栨壒娆℃暟閲� - //涓嶆帴鍙楁嫾绠� - if (isMixBox == "0") - { - //鏌ユ壘鍑烘贩绠遍泦鍚� - otherLotQty = GetMixBoxQty(ss.Id, lotNo); - } - var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString()); + var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); if (needQty - qty < detailQty) { break; @@ -192,14 +176,7 @@ foreach (var ss in zt) { - decimal otherLotQty = 0;//娣风涓叾浠栨壒娆℃暟閲� - //涓嶆帴鍙楁嫾绠� - if (isMixBox == "0") - { - //鏌ユ壘鍑烘贩绠遍泦鍚� - otherLotQty = GetMixBoxQty(ss.Id, lotNo); - } - var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString()); + var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); if (needQty - qty < detailQty) { var num = needQty - qty; @@ -222,14 +199,7 @@ var zt = zps.Where(s => !sIds.Contains(s.Id)).OrderBy(s => s.ExpirationTime).ThenBy(m => m.Qty - m.LockQty - m.FrozenQty).ToList();//鎵�鏈夋湭浣跨敤锛堟湭琚垎閰嶇殑锛� foreach (var ss in zt) { - decimal otherLotQty = 0;//娣风涓叾浠栨壒娆℃暟閲� - //涓嶆帴鍙楁嫾绠� - if (isMixBox == "0") - { - //鏌ユ壘鍑烘贩绠遍泦鍚� - otherLotQty = GetMixBoxQty(ss.Id, lotNo); - } - var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString()); + var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); if (needQty - qty < detailQty) { var num = needQty - qty; @@ -261,6 +231,63 @@ } } + + /// <summary> + /// 鏍规嵁鍌ㄤ綅娣卞害鑾峰彇鍒嗛厤鐨勪紭鍏堢骇鍒俊鎭�(瀵嗛泦搴�) + /// </summary> + /// <param name="palletList"></param> + /// <returns></returns> + private List<DataStockDetail> GetDataListOrder(List<DataStockDetail> palletList) + { + try + { + var Db = DataContext.Db; + var data = new List<DataStockDetail>(); + var locateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W01").ToList(); + var list = palletList; + //搴撳鎵樼洏 + var detail1 = list.Where(m => string.IsNullOrWhiteSpace(m.LocatNo)).OrderByDescending(a => a.PalletTags).ToList(); + // 搴撳 + data.AddRange(detail1); + //瀵嗛泦搴撳唴鎵樼洏 + var detail2 = list.Where(m => m.WareHouseNo == "W01").ToList(); + + var detail3 = list.GroupBy(m=>m.RoadwayNo).OrderBy(m=>m.Key).ToList(); + + foreach (var item in detail3) + { + var locates = locateList.Where(m => m.RoadwayNo == item.Key).FirstOrDefault(); + if (locates == null) + { + throw new Exception("鏈煡璇㈠埌宸烽亾鍐呯殑鍌ㄤ綅淇℃伅"); + } + //濡傛灉缁撴灉涓�0锛屽垯璇存槑涓や釜瀛楃涓茬浉绛夛紱 ABC BCE + //濡傛灉缁撴灉灏忎簬0锛屽垯璇存槑绗竴涓瓧绗︿覆灏忎簬绗簩涓瓧绗︿覆锛� + //濡傛灉缁撴灉澶т簬0锛屽垯璇存槑绗竴涓瓧绗︿覆澶т簬绗簩涓瓧绗︿覆銆� + var bol = String.CompareOrdinal(locates.LocatNo, locates.AisleOne); + + //鍌ㄤ綅灏忎簬閫氶亾鍙� 鍊掑簭 + //鍌ㄤ綅澶т簬閫氶亾鍙� 姝e簭 + if (bol < 0) + { + //var s = item.OrderByDescending(m => m.LocatNo).ToList(); + data.AddRange(item.OrderByDescending(m => m.LocatNo)); + } + if (bol > 0) + { + data.AddRange(item.OrderBy(m => m.LocatNo)); + } + + } + + return data; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + /// <summary> /// 鏌ユ壘鍑烘贩绠变腑鍏朵粬鎵规鎬绘暟閲� /// </summary> diff --git a/Wms/WMS.Entity/BllSoEntity/BLLExportNotice.cs b/Wms/WMS.Entity/BllSoEntity/BLLExportNotice.cs index a62535a..9cb9591 100644 --- a/Wms/WMS.Entity/BllSoEntity/BLLExportNotice.cs +++ b/Wms/WMS.Entity/BllSoEntity/BLLExportNotice.cs @@ -22,7 +22,7 @@ /// <summary> /// Desc:鍗曟嵁绫诲瀷 - /// Default: + /// Default: 0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2:鎶芥鍑哄簱銆�3锛氱墿鏂欏彇鏍峰嚭搴撱��4:涓嶅悎鏍煎搧鍑哄簱銆�5:涓棿鍝佸嚭搴撱��6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆�8:瀵勫瓨鍑哄簱銆�9鐢熶骇棰嗘枡鍑哄簱 /// Nullable:True /// </summary> public string Type {get;set;} @@ -33,6 +33,13 @@ /// Nullable:True /// </summary> public string Status {get;set;} + + /// <summary> + /// Desc:鍑哄簱浠撳簱鍙� + /// Default: + /// Nullable:True + /// </summary> + public string WareHouseNo { get; set; } /// <summary> /// Desc:鏉ユ簮 diff --git a/Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs b/Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs index c5939bc..c5ea03f 100644 --- a/Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs +++ b/Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs @@ -57,7 +57,7 @@ /// <param name="type">绫诲瀷</param> /// <param name="msg">鐗╂祦缂栫爜銆佸悕绉般�佹壒娆�</param> /// <returns></returns> - List<ExStockInfoDto> GetStockGroupList( string type, string ownerNo, string msg); + List<ExStockInfoDto> GetStockGroupList(string house, string type, string ownerNo, string msg); /// <summary> /// 娣诲姞鍑哄簱鍗� /// </summary> diff --git a/Wms/Wms/Controllers/BllSoController.cs b/Wms/Wms/Controllers/BllSoController.cs index 73a6d6d..0750860 100644 --- a/Wms/Wms/Controllers/BllSoController.cs +++ b/Wms/Wms/Controllers/BllSoController.cs @@ -76,7 +76,7 @@ { try { - var bolls = _exNoticeSvc.GetStockGroupList(model.Type,model.OwnerNo,model.Msg); + var bolls = _exNoticeSvc.GetStockGroupList(model.WareHouseNo,model.Type,model.OwnerNo,model.Msg); return Ok(new { code = 0, count=0, msg = "鍑哄簱鍗曚俊鎭�", data = bolls }); } -- Gitblit v1.8.0