From 3ed751a9175e08ec2ec39cbd89888839fd72894a Mon Sep 17 00:00:00 2001 From: yvan.ni Date: Wed, 14 Dec 2022 14:33:54 +0800 Subject: [PATCH] 指定门店线下库存的优化 --- packageA/pages/prom_list/prom_list.js | 274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------ packageA/pages/prom_list/prom_list.wxml | 17 +++++++++-------- packageB/pages/zuhegou/index/index.js | 19 +++++++++++-------- pages/cart/cart/cart.js | 13 +++---------- pages/goods/goodsInfo/goodsInfo.js | 19 +++++++++++++++---- pages/goods/goodsInfo/goodsInfo.wxml | 5 +++-- pages/goods/goodsInfo/goodsInfo.wxss | 11 +++++++++-- 7 files changed, 240 insertions(+), 118 deletions(-) diff --git a/packageA/pages/prom_list/prom_list.js b/packageA/pages/prom_list/prom_list.js index 9296207..5070e58 100644 --- a/packageA/pages/prom_list/prom_list.js +++ b/packageA/pages/prom_list/prom_list.js @@ -73,7 +73,7 @@ Page({ sys_switch:json_d, is_closecoupon: json_d.is_closecoupon, is_newsales_rules:json_d.is_newsales_rules, - sales_rules:e.sales_rules + sales_rules:e.sales_rules, appoint_pick_keyid: json_d.appoint_pick_keyid }); //------几人评价------- //计算等级价相关 @@ -293,35 +293,51 @@ Page({ //获取统一条形码,普通商品和优惠促销的商品 if (t.data.data.prom_type == 5) { //默认门店要拿下门店库存 - if (that.data.sales_rules == 2 && that.data.is_newsales_rules) { + if (that.data.sales_rules >= 2) { //--等待某个值只运行---,这里有可能因为导航的时间太久,而不能计算门店库存 getApp().waitfor2(that, "wait_for_user_store", "fir_def_store", function () { + + debugger + if (th.data.fir_def_store && th.data.fir_def_store.pickup_id) { - var lock = 0, - plist = null; + var lock = 0,plist = null; + var lock_rq={ + store_id: os.stoid,wareId: ee.data.data.goods_id, + storageId: that.data.fir_def_store.pickup_id,pageSize: 1000 + } + + //-- 指定门店销售的时候 -- + if(that.data.sales_rules == 3){ + lock_rq.appoint_pick_keyid = encodeURIComponent(th.data.appoint_pick_keyid); + delete lock_rq.storageId + } + //先读取门店的lock,采用链式写法,少用await getApp().request.promiseGet("/api/weshop/order/ware/lock/page", { - data: { - store_id: os.stoid, - wareId: ee.data.data.goods_id, - storageId: that.data.fir_def_store.pickup_id, - pageSize: 1000 - } + data:lock_rq }).then(res => { if (res.data.code == 0 && res.data.data.total > 0) { for (var i in res.data.data.pageData) lock += res.data.data.pageData[i].outQty } + + var dw_rq={ + storageNos: that.data.fir_def_store.pickup_no, + wareIds: encodeURIComponent(th.data.data.erpwareid), + storeId: os.stoid,pageSize: 2000 + } + if(that.data.sales_rules == 3){ + dw_rq.storageIds = encodeURIComponent(th.data.appoint_pick_keyid) + delete dw_rq.storageNos + } + //---通过接口获取门店的线下库存信息-- return getApp().request.promiseGet("/api/weshop/goods/getWareStorages", { - data: { - storageNos: that.data.fir_def_store.pickup_no, - wareIds: encodeURIComponent(th.data.data.erpwareid), - storeId: os.stoid, - pageSize: 2000 - } + data:dw_rq }) }).then(res => { + + if (res.data.code == 0 && res.data.data.total > 0) { plist = res.data.data.pageData[0]; } @@ -465,21 +481,37 @@ Page({ return s.my_warnning("商品不是搭配活动!", 0, th); }else{ //---如果是线下门店销售的时候--- - if(th.data.sales_rules==2){ + if(th.data.sales_rules>=2){ var pick=th.get_pick_from_list(th.data.sto_sele_id) + + + var dw_rq={storageNos:pick.pickup_no,wareIds:encodeURIComponent(th.data.data.erpwareid),storeId:os.stoid,pageSize:2000}; + if(th.data.sales_rules == 3){ + dw_rq.storageIds = encodeURIComponent(th.data.appoint_pick_keyid) + delete dw_rq.storageNos + } + //---通过接口获取门店的线下库存信息-- getApp().request.get("/api/weshop/goods/getWareStorages",{ - data:{storageNos:pick.pickup_no,wareIds:encodeURIComponent(th.data.data.erpwareid),storeId:os.stoid,pageSize:2000}, + data:dw_rq, success:function(res){ if(res.data.code==0){ if(res.data.data.pageData.length>0){ var CanOutQty=res.data.data.pageData[0].CanOutQty; if(CanOutQty0){ var lock=0; @@ -625,7 +657,7 @@ Page({ } var e = th.data.data.store_count; - if(th.data.sales_rules==2){ + if(th.data.sales_rules>=2){ if(!th.data.def_pick_store){ wx.showModal({ title: '请选择门店', }); return false; @@ -815,6 +847,9 @@ Page({ } } e.his_cate_num=his_cate_num; + + + debugger //如果有开启距离的功能,没有设置默认门店,要用最近的门店作为默认门店 if(dd.lat && !th.data.def_pick_store && th.data.bconfig && th.data.bconfig.is_sort_storage){ @@ -842,7 +877,7 @@ Page({ th.setData({all_pick_list:e.data.data.pageData}); //--获取线下库存,而且不是新的门店规则,同时不能是活动-- - if(th.data.sales_rules==2 && !th.data.is_newsales_rules && th.data.prom_type!=1 && th.data.prom_type!=6){ + if(th.data.sales_rules>=2 && !th.data.is_newsales_rules && th.data.prom_type!=1 && th.data.prom_type!=6){ setTimeout(function(){ th.deal_pickup_dline(e); },800) @@ -1054,73 +1089,129 @@ Page({ var is_find_def_store=0; var lock=[]; + + var lock_rq={store_id:os.stoid,wareId:th.data.data.goods_id,pageSize:1000}; + //-- 指定门店销售的时候 -- + if(th.data.sales_rules == 3){ + lock_rq.appoint_pick_keyid = encodeURIComponent(th.data.appoint_pick_keyid); + delete lock_rq.storageId + } + //先读取门店的lock,采用链式写法,少用await getApp().request.promiseGet("/api/weshop/order/ware/lock/page",{ - data:{store_id:os.stoid,wareId:th.data.data.goods_id,pageSize:1000} + data:lock_rq }).then(res=>{ if(res.data.code==0 && res.data.data.total>0){ lock=res.data.data.pageData } + + + var dw_rq={storageNos:pkno_str,wareIds:encodeURIComponent(th.data.data.erpwareid),storeId:os.stoid,pageSize:2000}; + if(th.data.sales_rules == 3){ + dw_rq.storageIds = encodeURIComponent(th.data.appoint_pick_keyid) + delete dw_rq.storageNos + } //---通过接口获取门店的线下库存信息-- return getApp().request.promiseGet("/api/weshop/goods/getWareStorages",{ - data:{storageNos:pkno_str,wareIds:encodeURIComponent(th.data.data.erpwareid),storeId:os.stoid,pageSize:2000} + data:dw_rq }) - }).then(res=>{ - if(res.data.code==0){ - if(res.data.data.pageData && res.data.data.pageData.length){ - var plist=res.data.data.pageData; - var def_pick_store=th.data.def_pick_store; - //以原来的数组为外循环,保证距离的顺序 - for(var kk in o_plist){ - for(var ii in plist){ - //线下的门店小心 - var n_item=plist[ii]; - if(n_item.StorageNo==o_plist[kk].pickup_no){ - - //拿到锁库的数量 - var lock_num=th.find_lock_num(o_plist[kk].pickup_id,lock); - //可出库数大于预出库库存的数量,可以判断为有库存 - if(n_item.CanOutQty>lock_num){ - o_plist[kk].CanOutQty=n_item.CanOutQty-lock_num; - new_list.push(o_plist[kk]); - //如果找到默认门店 - if(th.data.fir_def_store && n_item.StorageNo==th.data.fir_def_store.pickup_no){ - th.data.fir_def_store.CanOutQty=n_item.CanOutQty-lock_num; - if(def_pick_store.pickup_id==th.data.fir_def_store.pickup_id) - th.setData({def_pick_store:th.data.fir_def_store}) - is_find_def_store=1; - } - } - break; - } - } - } - - //数据组装下 - var em={};em.data={};em.data.data={}; - em.data.data.total=new_list.length; - em.data.data.pageData=new_list; - em.data.his_cate_num=e.his_cate_num; - - if(th.data.fir_def_store && !is_find_def_store && th.data.fir_def_store.pickup_id){ - th.data.fir_def_store.CanOutQty=0; - //--当选择的门店是客户默认的门店的时候-- - if(th.data.def_pick_store && th.data.fir_def_store.pickup_id==th.data.def_pick_store.pickup_id) { - th.setData({def_pick_store:th.data.fir_def_store}); - em.data.data.pageData.unshift(th.data.def_pick_store); - }else{ - em.data.data.pageData.splice(1,0,th.data.fir_def_store); - } - } - - //---把数组组装进去--- - th.deal_pickup(em); - }else{ - th.setData({def_pick_store:null,all_sto:null,only_pk:null}) - } - }else{ - th.setData({def_pick_store:null,all_sto:null,only_pk:null}) - } + }).then(res=>{ + if (res.data.code == 0) { + if (res.data.data.pageData && res.data.data.pageData.length) { + var plist = res.data.data.pageData; + var def_pick_store = th.data.def_pick_store; + var g_distr_type=null; + if(th.data.data) g_distr_type=th.data.data.distr_type; + + if (th.data.sales_rules == 3) { + var lock_num = 0; + var Qty = 0; + //-- 计算锁住的库存 -- + for (var i in lock) lock_num += lock[i].outQty; + Qty = plist[0].CanOutQty - lock_num; + + if (Qty > 0) { + for (var kk in o_plist) { + o_plist[kk].CanOutQty = Qty; + new_list.push(o_plist[kk]); + } + if (th.data.fir_def_store && + (g_distr_type == 0 || th.data.fir_def_store.distr_type == 0 || (th.data.def_pick_store && th.data.def_pick_store.distr_type == g_distr_type))) { + th.data.fir_def_store.Qty; + if (def_pick_store && def_pick_store.pickup_id == th.data.fir_def_store.pickup_id) + th.setData({ + def_pick_store: th.data.fir_def_store + }) + is_find_def_store = 1; + } + + } else { + th.setData({ + all_sto: null, + only_pk: null, + def_pickpu_list: null + }); + return false; + } + + } else { + + + //以原来的数组为外循环,保证距离的顺序 + for (var kk in o_plist) { + for (var ii in plist) { + //线下的门店小心 + var n_item = plist[ii]; + if (n_item.StorageNo == o_plist[kk].pickup_no) { + + //拿到锁库的数量 + var lock_num = th.find_lock_num(o_plist[kk].pickup_id, lock); + //可出库数大于预出库库存的数量,可以判断为有库存 + if (n_item.CanOutQty > lock_num) { + o_plist[kk].CanOutQty = n_item.CanOutQty - lock_num; + new_list.push(o_plist[kk]); + //如果找到默认门店 + if (th.data.fir_def_store && n_item.StorageNo == th.data.fir_def_store.pickup_no) { + th.data.fir_def_store.CanOutQty = n_item.CanOutQty - lock_num; + if (def_pick_store.pickup_id == th.data.fir_def_store.pickup_id) + th.setData({def_pick_store: th.data.fir_def_store}) + is_find_def_store = 1; + } + } + break; + } + } + } + } + + //数据组装下 + var em = {}; + em.data = {}; + em.data.data = {}; + em.data.data.total = new_list.length; + em.data.data.pageData = new_list; + em.data.his_cate_num = e.his_cate_num; + + if (th.data.fir_def_store && !is_find_def_store && th.data.fir_def_store.pickup_id) { + th.data.fir_def_store.CanOutQty = 0; + //--当选择的门店是客户默认的门店的时候-- + if (th.data.def_pick_store && th.data.fir_def_store.pickup_id == th.data.def_pick_store.pickup_id) { + th.setData({def_pick_store: th.data.fir_def_store}); + em.data.data.pageData.unshift(th.data.def_pick_store); + } else { + em.data.data.pageData.splice(1, 0, th.data.fir_def_store); + } + } + + + //---把数组组装进去--- + th.deal_pickup(em); + } else { + th.setData({def_pick_store: null, all_sto: null, only_pk: null}) + } + } else { + th.setData({def_pick_store: null, all_sto: null, only_pk: null}) + } }) }, @@ -1415,20 +1506,35 @@ Page({ if(this.data.sales_rules!=2){ func(); - }else{ + }else{ + + + var lock_rq={store_id:os.stoid,wareId:goodsinfo.goods_id,storageId:item.pickup_id,pageSize:1000}; + //-- 指定门店销售的时候 -- + if(th.data.sales_rules == 3){ + lock_rq.appoint_pick_keyid = encodeURIComponent(th.data.appoint_pick_keyid); + delete lock_rq.storageId + } //先读取门店的lock await getApp().request.promiseGet("/api/weshop/order/ware/lock/page",{ - data:{store_id:os.stoid,wareId:goodsinfo.goods_id,storageId:item.pickup_id,pageSize:1000} + data:lock_rq }).then(res=>{ if(res.data.code==0 && res.data.data.total>0){ for(var i in res.data.data.pageData ) lock+=res.data.data.pageData[i].outQty; } - }) + }) + + var dw_rq={storageNos:item.pickup_no,wareIds:encodeURIComponent(erpwareid),storeId:os.stoid,pageSize:2000}; + if(th.data.sales_rules == 3){ + dw_rq.storageIds = encodeURIComponent(th.data.appoint_pick_keyid) + delete dw_rq.storageNos + } + //读取线下的门店库存 await getApp().request.promiseGet("/api/weshop/goods/getWareStorages",{ - data:{storageNos:item.pickup_no,wareIds:encodeURIComponent(erpwareid),storeId:os.stoid,pageSize:2000} + data:dw_rq }).then(res=>{ if(res.data.code==0 && res.data.data.total>0){ plist=res.data.data.pageData[0]; diff --git a/packageA/pages/prom_list/prom_list.wxml b/packageA/pages/prom_list/prom_list.wxml index e3c9855..f9394a1 100644 --- a/packageA/pages/prom_list/prom_list.wxml +++ b/packageA/pages/prom_list/prom_list.wxml @@ -78,7 +78,7 @@ 已售:{{data.sales_sum}} - + 可售:{{def_pick_store.CanOutQty}} 可售:0 @@ -113,7 +113,7 @@ (库存不足) (配送不匹配) - (库存不足) + (库存不足) @@ -143,17 +143,17 @@ - 库存不足 + 库存不足1 - 库存不足 + 库存不足2 - 库存不足 + 库存不足3 @@ -161,9 +161,10 @@ - + + - 库存不足 + 库存不足4 - 库存不足 + 库存不足5 diff --git a/packageB/pages/zuhegou/index/index.js b/packageB/pages/zuhegou/index/index.js index bcbb70a..4443e1e 100644 --- a/packageB/pages/zuhegou/index/index.js +++ b/packageB/pages/zuhegou/index/index.js @@ -324,7 +324,8 @@ Page({ is_closecoupon: json_d.is_closecoupon, is_newsales_rules: json_d.is_newsales_rules, is_open_offline: json_d.is_pricing_open, - sales_rules: e.sales_rules + sales_rules: e.sales_rules, + appoint_pick_keyid: json_d.appoint_pick_keyid }); //-- 计算等级价相关 -- @@ -665,7 +666,7 @@ Page({ //在启用线下的时候,要判断一下是不是有库存 async check_pk_store_conut(func,is_no_msg,gd,by_num){ var th=this; - if(this.data.sales_rules!=2){ + if(this.data.sales_rules<2){ if(is_no_msg) return true; else { if(func) func(); @@ -709,14 +710,16 @@ Page({ } }) + + var dw_rq={ storageNos: pkno,wareIds: encodeURIComponent(good.erpwareid), storeId: os.stoid, pageSize: 2000}; + if(this.data.sales_rules==3){ + dw_rq.storageIds = encodeURIComponent(th.data.appoint_pick_keyid) + delete dw_rq.storageNos + } + //---通过接口获取门店的线下库存信息-- await getApp().request.promiseGet("/api/weshop/goods/getWareStorages", { - data: { - storageNos: pkno, - wareIds: encodeURIComponent(good.erpwareid), - storeId: os.stoid, - pageSize: 2000 - } + data:dw_rq }).then(res => { if (ut.ajax_ok(res)) { plist = res.data.data.pageData[0]; diff --git a/pages/cart/cart/cart.js b/pages/cart/cart/cart.js index cf80c80..65438de 100644 --- a/pages/cart/cart/cart.js +++ b/pages/cart/cart/cart.js @@ -1823,7 +1823,7 @@ Page({ var txt = "requestData[" + pitems + "].goods[" + i + "].selected"; var gd_info=item[i]; - if (th.data.sales_rules >= 2 && !gd_info.whsle_id && [1,2,4,6,8,9].indexOf(gd_info.prom_type)==-1 ) { + if (th.data.sales_rules >= 2 && !gd_info.whsle_id && [1,2,4,6,8,9].indexOf(gd_info.prom_type)==-1 && !gd_info.selected ) { var ob = {}; await th.check_down_line_next(gd_info, pitems, i, gd_info.erpwareid, function (res) { ob = res; @@ -1944,7 +1944,7 @@ Page({ var gd_info=a; var erpwareid = gd_info.erpwareid; - if (th.data.sales_rules >= 2 && !gd_info.whsle_id && [1,2,4,6,8,9].indexOf(gd_info.prom_type)==-1 ) { + if (th.data.sales_rules >= 2 && !gd_info.whsle_id && [1,2,4,6,8,9].indexOf(gd_info.prom_type)==-1 && !a.selected ) { var ob = {}; await th.check_down_line_next(gd_info, pitems, item, erpwareid, function (res) { ob = res; @@ -2869,12 +2869,7 @@ Page({ //先读取门店的lock await getApp().request.promiseGet("/api/weshop/order/ware/lock/page", { - data: { - store_id: os.stoid, - wareId: t.goods_id, - storageId: goodsinfo.pick_id, - pageSize: 1000 - } + data: lock_rq }).then(res => { if (res.data.code == 0 && res.data.data.total > 0) { for (var i in res.data.data.pageData) @@ -2882,8 +2877,6 @@ Page({ } }) - - if(this.data.sales_rules==2) { //先获取门店的编号 await getApp().request.promiseGet("/api/weshop/pickup/get/" + os.stoid + "/" + goodsinfo.pick_id, { diff --git a/pages/goods/goodsInfo/goodsInfo.js b/pages/goods/goodsInfo/goodsInfo.js index db36a2f..1e399bd 100644 --- a/pages/goods/goodsInfo/goodsInfo.js +++ b/pages/goods/goodsInfo/goodsInfo.js @@ -1250,6 +1250,7 @@ Page({ //------------加入购物车-------------- addCart: function (t) { + var th = this; var ind = t.currentTarget.dataset.openSpecModal_ind; if (!ind) ind = t.currentTarget.dataset.openspecmodal_ind; @@ -2433,6 +2434,9 @@ Page({ }, openSpecModel: function (t) { + + + var th = this; var open_store = t.currentTarget.dataset.ind; @@ -4285,7 +4289,7 @@ Page({ }) - debugger + //----------查看阶梯团------------ if (t.data.data.ct_rylist != "null" && t.data.data.ct_rylist != "" && t.data.data.ct_rylist != null && t.data.data.ct_rylist != undefined) { @@ -6283,7 +6287,6 @@ Page({ var ind = ee.currentTarget.dataset.ind; var bconfig = th.data.bconfig; - debugger //如果开启了,则不在选择门店 if (this.data.sys_switch.is_pricing_open_store && getApp().globalData.pk_store) { @@ -6339,6 +6342,9 @@ Page({ th.get_sto(th.data.is_normal); }, fail: function (res) { + + + //th.onShow(); th.data.is_get_local_ok = 1; th.get_sto(th.data.is_normal); @@ -6509,6 +6515,7 @@ Page({ wareId: goodsinfo.goods_id, pageSize: 1000 }; + if (sales_rules == 2) { lock_rq.storageId = item.pickup_id } else { @@ -6538,7 +6545,7 @@ Page({ sto_req.storageIds = encodeURIComponent(this.data.appoint_pick_keyid) } - debugger + //读取线下的门店库存 await getApp().request.promiseGet("/api/weshop/goods/getWareStorages", { @@ -6562,7 +6569,7 @@ Page({ sure_pick: function (e) { var th = this; var item = null; - var openindstore = th.data.open_ind_store; + var openindstore = parseInt(th.data.open_ind_store); if (th.data.choice_sort_store == 0) { var index = th.data.fir_pick_index; @@ -6765,9 +6772,13 @@ Page({ }); }) var t_time = setInterval(function () { + + if (th.data.bconfig == null) false; var e = th.data.bconfig; if (e && e.is_sort_storage) { + + wx.getLocation({ type: 'gcj02', success: function (res) { diff --git a/pages/goods/goodsInfo/goodsInfo.wxml b/pages/goods/goodsInfo/goodsInfo.wxml index 3e66702..a612018 100644 --- a/pages/goods/goodsInfo/goodsInfo.wxml +++ b/pages/goods/goodsInfo/goodsInfo.wxml @@ -1184,6 +1184,7 @@ + - - {{def_pick_store.pickup_name}} + + {{def_pick_store.pickup_name}} 距离:{{def_pick_store.distance>1000?filters.toFix(def_pick_store.distance/1000,2)+"km":filters.toFix(def_pick_store.distance,0)+"m"}} diff --git a/pages/goods/goodsInfo/goodsInfo.wxss b/pages/goods/goodsInfo/goodsInfo.wxss index 2ceca1d..b283a5c 100644 --- a/pages/goods/goodsInfo/goodsInfo.wxss +++ b/pages/goods/goodsInfo/goodsInfo.wxss @@ -3282,6 +3282,10 @@ margin: auto; */ .shop_name { margin-right: 10rpx; } +.shop_name.max{ + max-width:370rpx; flex-shrink: 0; +} + .address { /* width: 100%; @@ -3297,7 +3301,9 @@ margin: auto; */ /* margin-right: 5rpx; */ color: #999; height: 38rpx; - line-height: 38rpx; + line-height: 38rpx; + position: relative; + top: 5rpx; } @@ -3413,7 +3419,8 @@ margin: auto; */ } .address_name { - margin-right: 10rpx; + margin-right: 10rpx; + width: 360rpx; } -- libgit2 0.21.4