ladder_calculate.js 9.16 KB
var regeneratorRuntime = require('../../../utils/runtime.js');
module.exports = {
    //主要的作用,就是把阶梯促销多余的商品进行拆分,
    //如果没有达成阶梯促销的要求,所有的商品都打回原价购买
    fir_set_arr: function (c_item, th) {
        //寻找一下
        function get_num2(ite) {
            var vh = c_item.goods.findIndex(function (e) {
                return e.goods_id == ite.goods_id
            })
            if (vh > -1) return vh;
            return 0;
        }

        //组合活动,以及组合活动从表的商品
        let ladder_map = c_item.ladder_map;
        let goods = c_item.goods;  //一个门店中所有的商品
        let tfeel = 0, cut_price = 0, offline_price = 0, offline_num = 0;
        //多个活动要拿来循环一下
        for (let i in ladder_map) {
            let title = "";  //提示语;
            //其中的一个活动
            let act_item = ladder_map[i];
            let ladder_list = act_item.ladder_list;

            let all_num = 0; //商品数量之和
            let all_price0 = 0; //商品数量之和
            let aprice = 0;  //达到活动条件的购买价格

            let no_in_arr = []; //剩余的未加入组合购
            let del_g=[];
            for (var li in goods) {
                if (goods[li].prom_type != 10) continue;
                if (goods[li].prom_id != act_item.id) continue;
                var item = goods[li];
                item.goods_price = item.goods_price;
                item.offline_price = item.offline_price;
                item.cart_num = item.goods_num;
                all_num += item.cart_num;
                for (var j = 0; j < item.cart_num; j++) {
                    no_in_arr.push({
                        price: item.goods_price,
                        offline_price: item.offline_price,
                        goods_id: item.goods_id,
                        shop_price: item.shop_price,
                        item:item
                    })
                }
                del_g.push(item);
            }

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

            //开始阶梯计算价格
            var lev = 0;
            for (let j in ladder_list) {
                if (no_in_arr.length == 0) break;
                let item_j =ladder_list[j];
                var end = no_in_arr.pop();
                var new_price = parseInt(item_j.discount_field) == 1 ? end.shop_price : end.price;
                var account=new_price * parseFloat(item_j.discount) / 10;
                aprice +=account;

                //-- 单个文件新增 --
                let new_g = JSON.parse(JSON.stringify(end.item));
                new_g.goods_num = 1;
                //如果有平摊到单品的时候,account要显示
                if(!th.data.ispt_goods) new_g.account = account.toFixed(2);
                new_g.ld_account = account.toFixed(2);
                new_g.discount = item_j.discount;
                new_g.goods_price =new_price;
                new_g.ladder_list_id =item_j.id;
                goods.push(new_g);
                lev++;
            }

            let goods_map = {};
            //算一下剩余的商品
            if (no_in_arr.length) {
                for (let ii in no_in_arr) {
                    let item = no_in_arr[ii];
                    if (item.offline_price) {
                        offline_price += item.price - item.offline_price;
                        offline_num += 1;
                    }
                    if (goods_map[item.goods_id]) {
                        var num = goods_map[item.goods_id];
                        goods_map[item.goods_id] = ++num;
                    } else {
                        goods_map[item.goods_id] = 1;
                    }
                }
            }

            if (Object.keys(goods_map).length) {
                //这里就开始拆分提交订单时的列表
                for (let j in goods_map) {
                    //map中存的就是商品的数量
                    let num = goods_map[j];
                    //找到相应的商品
                    let idx = goods.findIndex(function (ele) {
                        return ele.goods_id == j;
                    })
                    //goods[idx].goods_num -= num;
                    let new_g = JSON.parse(JSON.stringify(goods[idx]));
                    new_g.goods_num = num;
                    new_g.prom_type = 0;
                    new_g.prom_id = 0;
                    goods.push(new_g);
                    //goods.splice(idx, 1);
                }
            }

            //-- 最后剔除不要参与的数据 --
            for(var h in del_g){
                var it=del_g[h];
                let idx = goods.findIndex(function (ele) {
                    return ele.goods_id == it.goods_id
                })
                goods.splice(idx, 1);
            }

            //-- 只统计是参与活动的商品 --
            for (var ij in goods) {
                var iter = goods[ij];
                if (iter.prom_type != 10 || iter.prom_id != act_item.id) {
                    continue;
                }
                all_price0 += iter.goods_num * iter.goods_price;
            }

            if(!c_item.ladder_prom_goods) c_item.ladder_prom_goods={};
            if(!c_item.ladder_prom_goods[act_item.id]) c_item.ladder_prom_goods[act_item.id]={};

            //-- 活动的条件已经满足 --
            c_item.ladder_prom_goods[act_item.id].is_has_ladder = 1;
            c_item.is_has_ladder = 1;
            c_item.ladder_prom_goods[act_item.id].actual_price = aprice;
            c_item.ladder_prom_goods[act_item.id].cut_price = all_price0 - aprice;

            tfeel += aprice;
            cut_price += all_price0 - aprice;

        }

        c_item.ladder_all_price = tfeel;
        c_item.ladder_cut_price = cut_price;

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

    //-- 组装阶梯购的价格 --
    calc_split_price: async function (c_arr, th) {
        //-- 循环处理 --
        for (var k in c_arr) {
            var cart_item = c_arr[k];      //就是每一单的意思
            var ord_goods = c_arr[k].goods;   //就是每一单的从表的意思

            var ladder_map = cart_item.ladder_prom_goods;  //一单中所有的组合购的集合
            var item_map = {};
            for (let i in ladder_map) {
                let item = ladder_map[i];
                let prom_id = i;
                //如果这个活动还没有达到要求,继续下一个计算
                if (!item.is_has_ladder) continue;
                //过滤出相应组合购活动的商品
                let glist = ord_goods.filter(function (ele) {
                    return ele.prom_type == 10 && ele.prom_id == i;
                })

                var all_good_price = 0;
                var post_gd = [];
                for (let j in glist) {
                    let item = glist[j];
                    all_good_price += item.goods_price * item.goods_num;
                    var gitem = {
                        goods_id: item.goods_id,
                        goods_num: item.goods_num,
                        goods_price: item.goods_price
                    }
                    post_gd.push(gitem);
                }
                //要进行优惠的计算
                if (all_good_price - item.actual_price) {
                    if (cart_item.prom_pt_json) {
                        cart_item.prom_pt_json.push({
                            "ladder_prom_id": prom_id,
                            "dis": (all_good_price - item.actual_price).toFixed(2),
                            "ispt": 0
                        })
                    } else {
                        cart_item.prom_pt_json = [{
                            "ladder_prom_id": prom_id,
                            "dis": (all_good_price - item.actual_price).toFixed(2),
                            "ispt": 0
                        }];
                    }
                }
            }


        }
    }


}