Commit efb6b05d8c64eb1c51c7a83e92ec4ef0894eb28d

Authored by yvan.ni
1 parent 4d38a898

优惠活动的商品要平摊相应的商品的

Showing 1 changed file with 112 additions and 20 deletions
pages/cart/cart2/cart2.js
... ... @@ -105,6 +105,8 @@ Page({
105 105 //-- order_prom_list --
106 106 order_prom_list_cart:null,
107 107  
  108 + ispt_goods:0, //是否平摊至单品,0要平摊 1不平摊
  109 +
108 110 },
109 111 onLoad: function(t) {
110 112  
... ... @@ -122,7 +124,8 @@ Page({
122 124 //先获取是否有关闭使用优惠券
123 125 getApp().getConfig2(function (ee) {
124 126 var json_d = JSON.parse(ee.switch_list);
125   - th.setData({ is_close_quan: json_d.is_close_quan,sales_rules:ee.sales_rules });
  127 + th.data.ispt_goods=json_d.ispt_goods; //是不是平摊到单品的控制参数赋值
  128 + th.setData({ is_close_quan: json_d.is_close_quan,sales_rules:ee.sales_rules});
126 129 //-----先获取物流,再获取用户信息,再展示页面-----
127 130 th.get_wuliu(th.get_info(th.show_page));
128 131 })
... ... @@ -638,19 +641,17 @@ Page({
638 641 if(th.data.cartlist) c_arr[i].check_quan_ware_list= th.data.cartlist[i].check_quan_ware_list; //优惠券优惠什么商品
639 642 }
640 643  
641   - var cart_item=c_arr[i];
  644 + var cart_item=c_arr[i]; //就是每一单的意思
642 645 var pickid=cart_item.pickup_id;
643 646 var o_price=0;
644 647 var o_shipping_price=0,goods_weight=-1, goods_piece=-1;
645   - var item=c_arr[i].goods;
646   - //--获取物流code--
  648 + var item=c_arr[i].goods; //就是每一单的从表的意思
647 649  
648 650 //--------循环计算总价-----------
649 651 for(var j=0;j<item.length;j++){
650 652 o_price += item[j].goods_price * item[j].goods_num;
651 653 }
652 654 var f_o_price=o_price;
653   - var prom_g=th.data.prom_goods_map[pickid];
654 655  
655 656 //判断包邮券的钱
656 657 var q_conditin=0;
... ... @@ -695,15 +696,8 @@ Page({
695 696 }
696 697 })
697 698 }
698   - //--------循环计算商品是不是包邮,是不是使用优惠券-----------
699   - for(var j=0;j<item.length;j++){
700   - if(item[j].prom_type==3 && item[j].prom_id==item_map.prom_id){
701   - item[j].is_xz_yh= item_map.is_xz_yh;
702   - item[j].is_past= item_map.is_past;
703   - }
704   - }
  699 +
705 700 //有活动,且优惠活动并没有限制使用优惠券,且有减价
706   - //if(item_map && !item_map.is_xz_yh && item_map.price) q_conditin=o_price-item_map.price;
707 701 //--看有没有减价--
708 702 if(item_map.prom_price && item_map.price-item_map.prom_price){
709 703 if(cart_item.prom_pt_json){
... ... @@ -712,11 +706,73 @@ Page({
712 706 cart_item.prom_pt_json=[{"prom_id":item_map.prom_id,"dis":(item_map.price-item_map.prom_price).toFixed(2),"ispt":0}];
713 707 }
714 708  
  709 +
  710 + //---如果是系统要平摊至单品的时候---
  711 + if(!th.data.ispt_goods) {
  712 + //此处要对商品从表排序一下,按商品件数升序,商品单价降序
  713 + function sort_fun(a, b) {
  714 + if (a["goods_num"] === b["goods_num"]) {
  715 + if (a["goods_price"] < b["goods_price"]) {
  716 + return 1;
  717 + } else if (a["goods_price"] > b["goods_price"]) {
  718 + return -1;
  719 + } else {
  720 + return 0;
  721 + }
  722 + } else {
  723 + if (a["goods_num"] > b["goods_num"]) {
  724 + return 1;
  725 + } else {
  726 + return -1;
  727 + }
  728 + }
  729 + }
  730 +
  731 + //进行排序
  732 + item_map.goods.sort(sort_fun);
  733 + //这个位置就要开始平摊优惠到优惠活动的单品
  734 + var account_all = 0;
  735 + var per = (item_map.price - item_map.prom_price) / item_map.price; //优惠单价
  736 +
  737 + //比例太小的时候,就不进行平摊
  738 + if (per < 0.001) {
  739 + item_map.goods[0].account_yu = item_map.price - item_map.prom_price;
  740 + } else {
  741 + per = Math.floor(1000 * per) / 1000; //保留3位小数
  742 + for (var i in item_map.goods) {
  743 + var m_item = item_map.goods[i];
  744 + var m_all_amount = m_item.goods_price * m_item.goods_num - m_item.goods_price * m_item.goods_num * per;
  745 + var account = Math.floor(100 * m_all_amount /m_item.goods_num) / 100;
  746 + if (account) {
  747 + item_map.goods[i].account = account;
  748 + account_all += account * m_item.goods_num; //累加总实收
  749 + }
  750 + }
  751 + //算出余数
  752 + var yu = account_all - item_map.prom_price;
  753 + if (yu != 0) {
  754 + item_map.goods[0].account_yu = parseFloat(yu.toFixed(2));
  755 + }
  756 + }
  757 + }
  758 +
715 759 o_price-=(item_map.price-item_map.prom_price);
716 760 //如果有限制使用优惠券,就要减掉参与的活动商品的钱
717 761 if(!item_map.is_xz_yh) q_conditin=o_price;
718 762 }
719 763  
  764 +
  765 + //--------循环计算商品是不是包邮,是不是使用优惠券,此时循环是商品从表-----------
  766 + for(var j=0;j<item.length;j++){
  767 + if(item[j].prom_type==3 && item[j].prom_id==item_map.prom_id){
  768 + item[j].is_xz_yh= item_map.is_xz_yh;
  769 + item[j].is_past= item_map.is_past;
  770 + item[j].account= th.item_map_get_goods(item[j].goods_id,item_map).account;
  771 + item[j].account_yu= th.item_map_get_goods(item[j].goods_id,item_map).account_yu;
  772 + }
  773 + }
  774 +
  775 +
720 776 //--优惠多少钱--
721 777 if(!cart_item.cut_price) cart_item.cut_price=0;
722 778 cart_item.cut_price+=(item_map.price-item_map.prom_price);
... ... @@ -857,7 +913,6 @@ Page({
857 913 continue;
858 914 }
859 915  
860   -
861 916 //----------------如果是选择了物流---------------------
862 917 if(cart_item.exp_type == 0 && item[j].is_free_shipping==0){
863 918 //如果地址不为空
... ... @@ -881,9 +936,9 @@ Page({
881 936  
882 937  
883 938 //计算物流价格
884   - if (c_arr[i].exp_type == 0) {
  939 + if (cart_item.exp_type == 0) {
885 940 freight_free=0; //后面不在进行判断
886   - var code = th.data.wu_arr[c_arr[i].wind].code;
  941 + var code = th.data.wu_arr[cart_item.wind].code;
887 942 cart_item.shipping_price =
888 943 th.calculatewuliu(code, o_shipping_price, goods_weight,
889 944 goods_piece,th.data.user_addr, freight_free, o_price, rs);
... ... @@ -1476,6 +1531,24 @@ Page({
1476 1531 goods.quan_num=th.data.formData.coupon_price;
1477 1532 goods.quan_no= item.coupon_no;
1478 1533 }
  1534 +
  1535 +
  1536 +
  1537 + //--- 如果有优惠促销的金额,要把金额先平摊下去 ---
  1538 + if(th.data.formData.cut_price>0 && !th.data.ispt_goods){
  1539 + var per=th.data.formData.cut_price/(goods.goods_price*goods.goods_num) //优惠单价
  1540 + //比例太小不平摊
  1541 + if(per<0.001){
  1542 + goods.account_yu=th.data.formData.cut_price;
  1543 + }else{
  1544 + per=Math.floor(per*1000)/1000;
  1545 + var all_amount=goods.goods_price*goods.goods_num-goods.goods_price*goods.goods_num*per; //商品总实收
  1546 + var account=Math.floor(all_amount/goods.goods_num*100)/100; //实收单价保留俩位小数
  1547 + var account_yu=account*goods.goods_num-(goods.goods_price*goods.goods_num-th.data.formData.cut_price); //算出余数
  1548 + goods.account=account;
  1549 + goods.account_yu=parseFloat(account_yu.toFixed(2));
  1550 + }
  1551 + }
1479 1552 item.order_goods.push(goods);
1480 1553  
1481 1554 //--如果有赠品的时候,赠品也要提交---
... ... @@ -1598,6 +1671,12 @@ Page({
1598 1671 'store_id': oo.stoid,
1599 1672 };
1600 1673  
  1674 + //把优惠的平摊结果写进去
  1675 + if(g_item.account){
  1676 + goods.account=g_item.account;
  1677 + goods.account_yu=g_item.account_yu;
  1678 + }
  1679 +
1601 1680 //--把券的钱,写入从表---
1602 1681 if(t_item.quan_youhui_list && t_item.coupon_price ){
1603 1682 for(var kk in t_item.quan_youhui_list ){
... ... @@ -2657,7 +2736,7 @@ Page({
2657 2736 })
2658 2737 },
2659 2738  
2660   - //--- 加入优惠活动的映射中 ---
  2739 + //--- 加入优惠活动的映射中,同时要有一个good列表 ---
2661 2740 add_prom_goods_map:async function (item) {
2662 2741 var th=this;
2663 2742 var pickid=item.pick_id;
... ... @@ -2669,6 +2748,8 @@ Page({
2669 2748 var ob=map[pickid][item.prom_id];
2670 2749 ob.price+=item.goods_price*item.goods_num;
2671 2750 ob.goods_num+=item.goods_num;
  2751 + ob.goods.push({goods_id:item.goods_id,goods_price:item.goods_price,goods_num:item.goods_num});
  2752 +
2672 2753 }else{
2673 2754 var prom=null;
2674 2755 await getApp().request.promiseGet("/api/weshop/promgoods/get/"+os.stoid+"/"+item.prom_id,{}).then(res=>{
... ... @@ -2680,6 +2761,8 @@ Page({
2680 2761 ob.goods_num=item.goods_num;
2681 2762 ob.is_bz=prom.is_bz;
2682 2763 ob.is_xz_yh=prom.is_xz_yh;
  2764 + ob.goods=new Array();
  2765 + ob.goods.push({goods_id:item.goods_id,goods_price:item.goods_price,goods_num:item.goods_num});
2683 2766 map[pickid][item.prom_id]=ob;
2684 2767 }
2685 2768 }else{
... ... @@ -2693,6 +2776,9 @@ Page({
2693 2776 ob.goods_num=item.goods_num;
2694 2777 ob.is_bz=prom.is_bz;
2695 2778 ob.is_xz_yh=prom.is_xz_yh;
  2779 + ob.goods=new Array();
  2780 + ob.goods.push({goods_id:item.goods_id,goods_price:item.goods_price,goods_num:item.goods_num});
  2781 +
2696 2782 var obj={};
2697 2783 obj[item.prom_id]=ob;
2698 2784 map[pickid]=obj;
... ... @@ -2700,8 +2786,8 @@ Page({
2700 2786 }
2701 2787 },
2702 2788  
2703   - //计算立即购买赠品的物流费用
2704   - get_now_gift_goods_wuliu:function (code, o_shipping_price, user_addr, gift_freight_free,allpice, rs,shipping_price,no_by_data) {
  2789 + //计算立即购买赠品的物流费用
  2790 + get_now_gift_goods_wuliu:function (code, o_shipping_price, user_addr, gift_freight_free,allpice, rs,shipping_price,no_by_data) {
2705 2791 var good=this.data.buy_now_gift_goods;
2706 2792 var goods_weight=-1, goods_piece=-1;
2707 2793 var gift_shipping_price=0;
... ... @@ -2739,8 +2825,14 @@ Page({
2739 2825 goods_piece, user_addr, gift_freight_free, allpice, rs);
2740 2826 return t_shipping_price+shipping_price;
2741 2827  
2742   - }
  2828 + },
2743 2829  
  2830 + //从优惠的映射中拿出商品从表的item
  2831 + item_map_get_goods:function(goods_id,map){
  2832 + for(var i in map.goods){
  2833 + if(map.goods[i].goods_id==goods_id) return map.goods[i];
  2834 + }
  2835 + }
2744 2836  
2745 2837  
2746 2838 });
... ...