zh_calculate.js 11.4 KB
module.exports = {
	//辅助数组添加元素功能
	find_in_add: function(list, ele) {
		for (var i in list) {
			var item = list[i];
			if (item.goods_id == ele.goods_id) {
				return false;
			}
		}
		list.push(ele);
	},
	//辅助数组添加元素功能
	find_in_remove: function(list, ele) {
		for (var i in list) {
			var item = list[i];
			if (item.goods_id == ele.goods_id) {
				list.splice(i, 1);
			}
		}
	},

	//主要是把组合购的商品分离出来
	add_zhprom: function(car, a, ele) {
		var point = car[a];
		if (point.zh_map) {
			if (point.zh_map[ele.prom_id]) {
				this.find_in_add(point.zh_map[ele.prom_id].goods, ele);
			} else {
				point.zh_map[ele.prom_id] = {
					goods: [],
					act: ele.act
				};
				point.zh_map[ele.prom_id].goods.push(ele);
			}
		} else {
			point.zh_map = {};
			point.zh_map[ele.prom_id] = {
				goods: [],
				act: ele.act
			};
			point.zh_map[ele.prom_id].goods.push(ele);
		}
	},
	//未选中的商品,要从中剔除
	remove_zhprom: function(car, a, ele) {
		var point = car[a];
		if (point.zh_map) {
			if (point.zh_map[ele.prom_id]) {
				this.find_in_remove(point.zh_map[ele.prom_id].goods, ele);
			}
		}
	},

	//把组合购的商品价格计算出来,同时每个会员都有购买组合商品的上限!zh_b_num是已经购买了多少件
	calculate_zh: function(car, a, th) {
		var car_item = car[a];
		var tfeel = 0,
			offline_price = 0,
			offline_num = 0;
		var txt = "requestData[" + a + "].need_list";
        //活动的列表都存储在这里面,可以快速查询
        var zh_prom_goods=car_item.zh_prom_goods;
		if (!car_item.zh_map || !zh_prom_goods) {
			var res = {
				tfeel: tfeel,
				offline_price: offline_price,
				offline_num: offline_num
			};
			th.setData({
				[txt]: null
			});
			return res;
		}
		
		//因为可能有多个组合购的活动
		for (var i in car_item.zh_map) {
			var bitem = car_item.zh_map[i];
			var act = bitem.act; //获取到组合购的详情
			var all_num = 0; //商品数量之和
			var all_price = 0;
			var need_to_buy = 0;
			var all_zhqty = 0; //所有商品要求起购数之和
			var no_in_arr = []; //剩余的未加入组合购
			var out_arr=[];     //超出活动限购的商品放入
			
			var title ="";  //提示语; 	
			//var goods = bitem.goods;
			var goods = zh_prom_goods[act.id];

            for (let v3 in car_item.goods) {
                car_item.goods[v3].need_downlow_num=0;
			}

			//寻找一下
			function get_num(ite) {
				for (let v1 in bitem.goods) {
					var vh = bitem.goods[v1];
					if (vh.goods_id == ite.goods_id) {
						return vh;
					}
				}
				return 0;
			}

            //寻找一下
            function get_num2(ite) {
                for (let v2 in car_item.goods) {
                    var vh = car_item.goods[v2];
                    if (vh.goods_id == ite.goods_id) {
                        return vh;
                    }
                }
                return 0;
            }

			for (var i in goods) {
				var item = goods[i];
                item.goods_price=get_num(item).goods_price;
                item.offline_price=get_num(item).offline_price;
                var cart_num=get_num(item).goods_num;
                var zh_b_num=get_num2(item).zh_b_num;
                if(!cart_num) {
                    if (item.zhqty) {
                        title="必买商品未加购,下单立享【"+act.zhprice+"元任选"+act.zhbuyqty+"件】";
                        need_to_buy += item.zhqty;
                    }
                    continue;
				}

                item.cart_num =cart_num;
                //-- 当商品有购买的时候,以及有限购的时候 --
                if(item.buyqty>0){

                       console.log(111,th.data.in_zhact_gdmap);

                       var cbuy=item.buyqty-zh_b_num;
                       var key=item.goods_id+""+act.id;
					   if(th.data.in_zhact_gdmap[key]){
                           var cbuy=item.buyqty-zh_b_num-th.data.in_zhact_gdmap[key];
					   }
                       //当可买的数量为0
                       if(cbuy<=0){
                           item.num=0;
                           out_arr.push({
                               price: item.goods_price,offline_price:item.offline_price,goods_id:item.goods_id,num:cart_num
                           })
					   }else{
                           if(cbuy>=cart_num) item.num =cart_num;
                           else{
                               item.num =cbuy;
                               out_arr.push({
                                   price: item.goods_price,offline_price:item.offline_price,goods_id:item.goods_id,num:cart_num-cbuy
                               })
                           }
					   }

                }else{
                    item.num =cart_num;
				}

				item.goods_price=get_num(item).goods_price;
				item.offline_price=get_num(item).offline_price;
				if(item.cart_num){
                    all_price += item.cart_num * item.goods_price;
				}
				if (item.num) {
					all_num += item.num;
					//当有起购数的控制的时候
					if (item.zhqty) {
						all_zhqty += item.zhqty;
						if (item.num < item.zhqty) {
							need_to_buy += item.zhqty - item.num;
						}
						if (item.num > item.zhqty) {
							for (var i = 0; i < item.num - item.zhqty; i++) {
								no_in_arr.push({
									price: item.goods_price,offline_price:item.offline_price,goods_id:item.goods_id
								})
							}
						}
					} else {
						for (var j = 0; j < item.num; j++) {
							no_in_arr.push({
								price: item.goods_price,offline_price:item.offline_price,goods_id:item.goods_id
							})
						}
					}
				} else {
					if (item.zhqty) {		
						title="必买商品未加购,下单立享【"+act.zhprice+"元任选"+act.zhbuyqty+"件】"; 
						need_to_buy += item.zhqty;
					}
				}
			}

			//当满足组合的要求:总数要满足,起购数要满足
			if (all_num >= act.zhbuyqty && !need_to_buy) {
                //商品的列表
                for (var u in goods) {
                   var ite=goods[u];
                   if(ite.buyqty>0 && ite.num>0){

                       console.log(222,th.data.in_zhact_gdmap);

                   	   var key=ite.goods_id+""+act.id;
                   	   if(th.data.in_zhact_gdmap[key]){
                           th.data.in_zhact_gdmap[key]+=ite.num;
					   }else{
                           th.data.in_zhact_gdmap[key]=ite.num;
					   }
				   }
				}

                function sortData(a, b) {
                    return a.price - b.price
                }
                if(no_in_arr.length>0)  no_in_arr.sort(sortData);

				var aprice = act.zhprice;
				if (act.zhbuyqty > all_zhqty) {
					for (var n = 0; n < act.zhbuyqty-all_zhqty; n++) {
						no_in_arr.pop();
					}
				}
				//看一下剩下的数量有没有满足组合购的要求,以及要不要倍增
				if (act.is_bz && no_in_arr.length >= act.zhbuyqty) {
					//看一下是几倍
					var be = parseInt(no_in_arr.length / act.zhbuyqty);
					aprice += be * act.zhprice;
					for (var m = 0; m < be * act.zhbuyqty; m++) {
						no_in_arr.pop();
					}
				}
				//算一下剩余的钱
				if (no_in_arr.length) {
					for (var ii in no_in_arr) {
						var item = no_in_arr[ii];
                        var gitem=get_num2(item);
                        if(gitem) {
                            if (!gitem.need_downlow_num) {
                                gitem.need_downlow_num = 1;
                            }
                            else {
                                gitem.need_downlow_num++;
                            }
                            aprice += item.price;
                            if (item.offline_price) {
                                offline_price += gitem.goods_price - gitem.offline_price;
                                offline_num += 1;
                            }
                        }
					}
				}

				//超量的部分也要计算一下
				if(out_arr.length){
                    for (var m in out_arr) {
                        var item = out_arr[m];
                        var gitem=get_num2(item);
                        if(gitem) {
                            if (!gitem.need_downlow_num) {
                                gitem.need_downlow_num = item.num;
                            }
                            else {
                                gitem.need_downlow_num+=item.num;
                            }
                            aprice += item.price*item.num;
                            if (item.offline_price && th.data.sales_rules==2) {
                                offline_price += (gitem.goods_price - gitem.offline_price)*item.num;
                                offline_num += item.num;
                            }

						}
                    }
				}



				all_price = aprice;

				//-- 设置还需要购买多少件,享受活动,前段显示 --
				var need_to = car_item.need_list;
				var index = this.find_need_to(need_to, act);
				if (index > -1) {
					need_to.splice(index, 1);
					th.setData({
						[txt]: need_to
					});
				}

			} else {
				for (var ii in goods) {
					var item = goods[ii];
                    var gitem=get_num2(item);
                    if(gitem && gitem.selected) {

                        gitem.need_downlow_num = gitem.goods_num;

                        if (item.offline_price && th.data.sales_rules==2) {
                            offline_price += (item.goods_price - item.offline_price) * gitem.goods_num;
                            offline_num += gitem.goods_num;
                        }
                    }
				}
				if (act.zhbuyqty - all_num > need_to_buy) {
					need_to_buy = act.zhbuyqty - all_num;
				}
				//-- 设置还需要购买多少件,享受活动,前段显示 --
				var need_to = car_item.need_list;
				if (all_num <= 0) {
					var index = this.find_need_to(need_to, act);
					if (index > -1) {
						need_to.splice(index, 1);
						th.setData({
							[txt]: need_to
						});
					}
				} else {
					var index = this.find_need_to(need_to, act);
					if(title=='') 
					   title = "再买" + need_to_buy + "件,下单立享【" + act.zhprice + "元任选" + act.zhbuyqty + "件】";
					if (index != -1) {
						need_to[index].title = title;
					} else {
						if (!need_to) need_to = [];
						var it = {
							id: act.id,
							pickup_id: car_item.pickup_id,
							title: title
						};
						need_to.push(it);
					}
					th.setData({
						[txt]: need_to
					});
				}

			}
			tfeel += all_price;
		}

        console.log('nyf111');
		console.log(car_item);

		var res = {
			tfeel: tfeel,
			offline_price: offline_price,
			offline_num: offline_num
		};
		return res;


	},

	find_need_to: function(list, iter) {
		if (!list || list.length <= 0) return -1;
		for (var i in list) {
			var item = list[i];
			if (item.id == iter.id) {
				return i;
			}
		}
		return -1;
	},

	//筛选组合购,纯粹的数组按活动id分组
	find_split: function(arr) {
		//过滤只有团购的商品
		var oarr = arr.goods.filter(function(ele) {
			return ele.prom_type == 7
		})
        if(!oarr || oarr.length==0) return null;
		//看一下有多少个不同的团购			
		var map = {},dest = [];
		for (var i = 0; i < oarr.length; i++) {
			var ai = oarr[i];
			var index=map[ai.prom_id]
			if (!index) {			
				dest.push({
					prom_id: ai.prom_id,
					data: [ai]
				});
				map[ai.prom_id]=dest.length; //存储下标
			} else {				
				var dj = dest[index-1];
				dj.data.push(ai);			
			}
		}
		return dest;
	}


}