Browse Source

买a送b活动

zhangchuangbiao 4 years ago
parent
commit
8e9d463555

+ 9 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/MkActivitiesGetOneFreeGoodsEntity.java

@@ -58,6 +58,7 @@ public class MkActivitiesGetOneFreeGoodsEntity implements Serializable {
      */
     private String productSeries;
     private Integer sendNum;
+    private boolean isBrand;
     /**
      * 赠品条码
      */
@@ -307,4 +308,12 @@ public class MkActivitiesGetOneFreeGoodsEntity implements Serializable {
     public void setSendNum(Integer sendNum) {
         this.sendNum = sendNum;
     }
+
+    public boolean isBrand() {
+        return isBrand;
+    }
+
+    public void setBrand(boolean brand) {
+        isBrand = brand;
+    }
 }

+ 3 - 1
kmall-admin/src/main/resources/mybatis/mapper/MkActivitiesFullGiftDao.xml

@@ -189,7 +189,9 @@
 		from mk_activities_full_gift
 		where
 			mka_id = #{mkaId}
-			and (barcode = #{prodBarcode} or product_brand = #{brandName})
+			<if test="brandName != 'all'">
+				and (barcode = #{prodBarcode} or product_brand = #{brandName})
+			</if>
 			and deadline &gt;= #{nowTime}
 	</select>
 

+ 141 - 12
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -116,7 +116,6 @@ function fullReduction(goodsDetails,key){
 
 // 满赠
 function calculateGoodsByMz(goodsDetails,type){
-    debugger;
     // 判断当前支付金额是否满足满赠金额,若满足,直接修改金额为1
     var mzGoods = vm.mz.get(goodsDetails.prodBarcode);
     if(mzGoods){
@@ -235,6 +234,53 @@ function calculateGoodsByMysy(goodsDetails,type){
 
     }
 
+    if(brandMysy){
+        var buyNum = brandMysy.buyNum;
+        if(type == "add"){
+
+            // 如果不是买一送一,而是买n送n,先获取购物车已有该类型商品数量
+            var boughtNum = vm.boughtNum.get(goodsDetails.brand);
+            // 如果没有,置为1
+            if(!boughtNum){
+                vm.boughtNum.set(goodsDetails.brand , 1);
+                return ;
+            }
+            // 走到这里,证明购买过该类型商品,且数量不是买一送一的
+            // 如果相等,证明达到送的条件
+            if(buyNum === boughtNum + 1){
+                var mysyNum = vm.freeBardcode.get(brandMysy.giftBarcode);
+                if(!mysyNum){
+                    mysyNum = 0;
+                }
+                vm.freeBardcode.set(brandMysy.giftBarcode,mysyNum + 1);
+                vm.boughtNum.set(goodsDetails.brand,0);
+            }else{
+                // 如果不相等,已经购买数量+1
+                vm.boughtNum.set(goodsDetails.brand , boughtNum+1);
+            }
+        }else if (type == "minus"){
+
+            var mysyNum = vm.boughtNum.get(goodsDetails.brand);
+            if(mysyNum == 0){
+                if(vm.freeBardcode.get(brandMysy.giftBarcode) == 0){
+                    vm.freeBardcode.set(brandMysy.giftBarcode,-1);
+                }else{
+                    vm.freeBardcode.set(brandMysy.giftBarcode,vm.freeBardcode.get(brandMysy.giftBarcode) - 1);
+                }
+                vm.boughtNum.set(goodsDetails.brand,buyNum - 1);
+            }else{
+                vm.boughtNum.set(goodsDetails.brand,mysyNum - 1);
+
+            }
+            // var freeNum = vm.freeBardcode.get(brandMysy.giftBarcode);
+            // if(freeNum > 0){
+            //     vm.freeBardcode.set(brandMysy.giftBarcode,freeNum - 1);
+            //
+            // }
+
+        }
+    }
+
     
     
     
@@ -425,6 +471,7 @@ let vm = new Vue({
         // 买一送一
         mysy: [],
         freeBardcode : new Map(),
+        modifyShopcart:false, // 是否需要修改购物车中商品信息
         brandGetOneFree : new Map(),
         barcodeGetOneFree: new Map(),
         boughtNum: new Map(),
@@ -500,16 +547,27 @@ let vm = new Vue({
                         alert("数量至少为1个");
                         return ;
                     }
-                    debugger;
-                    goodsDetails.sellVolume = g.sellVolume;
-                    calculateGoodsByMj(goodsDetails,"minus");
-                    calculateGoodsByMysy(goodsDetails,"minus");
-                    // calculateGoodsByMz(goodsDetails,"minus");
-                    goodsDetails.sellVolume = -1;
-                    goodsDetails.actualPaymentAmount = -goodsDetails.actualPaymentAmount;
-                    goodsDetails.discountedPrice = -goodsDetails.discountedPrice;
-                    goodsDetails.goodstaxes = - goodsDetails.goodstaxes;
-                    goodsDetails.retailPrice = - goodsDetails.retailPrice;
+                    // 如果不为空,证明减的是买A送B中的B,这时候要还原赠送资格跟B的扣减
+                    var freeMap = vm.freeBardcode.get(goodsDetails.prodBarcode);
+                    if((freeMap || freeMap == 0) && g.actualPaymentAmount == 0){
+                        vm.freeBardcode.set(goodsDetails.prodBarcode,freeMap + 1);
+                        goodsDetails.sellVolume = -1;
+                        goodsDetails.actualPaymentAmount = 0;
+                        goodsDetails.discountedPrice = -goodsDetails.retailPrice;
+                        goodsDetails.goodstaxes = - goodsDetails.goodstaxes;
+                        goodsDetails.retailPrice = - goodsDetails.retailPrice;
+                    }else{
+                        goodsDetails.sellVolume = g.sellVolume;
+                        calculateGoodsByMj(goodsDetails,"minus");
+                        calculateGoodsByMysy(goodsDetails,"minus");
+                        // calculateGoodsByMz(goodsDetails,"minus");
+                        goodsDetails.sellVolume = -1;
+                        goodsDetails.actualPaymentAmount = -goodsDetails.actualPaymentAmount;
+                        goodsDetails.discountedPrice = -goodsDetails.discountedPrice;
+                        goodsDetails.goodstaxes = - goodsDetails.goodstaxes;
+                        goodsDetails.retailPrice = - goodsDetails.retailPrice;
+                    }
+
                     handle(goodsDetails,"minus");
                     break;
                 }
@@ -528,6 +586,25 @@ let vm = new Vue({
                     if(vm.mz.get(this.goodsList[i].prodBarcode)){
                         vm.mz.get(this.goodsList[i].prodBarcode).useMz = false ;
                     }
+                    if(vm.brandGetOneFree.get(this.goodsList[i].brand)){
+                        var giftBarcode = vm.brandGetOneFree.get(this.goodsList[i].brand).giftBarcode;
+                        var muilty = vm.brandGetOneFree.get(this.goodsList[i].brand).buyNum;
+                        var sellNum = this.goodsList[i].sellVolume;;
+                        vm.freeBardcode.set(giftBarcode,sellNum/muilty);
+
+                        for(var j = 0 ; j < vm.goodsList.length ; j++){
+                            var shopcartGoods = vm.goodsList[j];
+                            var shopcartFree = vm.freeBardcode.get(shopcartGoods.prodBarcode);
+                            if(shopcartFree /*&& shopcartGoods.actualPaymentAmount*/){
+                                shopcartGoods.actualPaymentAmount = shopcartGoods.actualPaymentAmount + (shopcartGoods.retailPrice * shopcartFree);
+                                shopcartGoods.discountedPrice = shopcartGoods.discountedPrice - (shopcartGoods.retailPrice * shopcartFree);
+                                vm.freeBardcode.set(shopcartGoods.prodBarcode, 0);// 重置回0
+
+                            }
+
+                        }
+
+                    }
                     var goods = this.goodsList[i];
                     console.log(goods);
                     vm.totalPrice = vm.totalPrice - (goods.retailPrice * goods.sellVolume);
@@ -627,7 +704,6 @@ let vm = new Vue({
                             vm.customidcard = '';
                             vm.customClearData();
 
-                            // alert('打印小票完成');
                         }else{
                             // alert("打印小票失败");
                         }
@@ -647,6 +723,8 @@ let vm = new Vue({
             vm.goodsDetail = false;
             // 买一送一
             vm.mysy = [];
+            vm.freeBardcode = new Map();
+            vm.brandGetOneFree = new Map();
             vm.barcodeGetOneFree = new Map();
             vm.brandGetOneFree = new Map();
             vm.boughtNum = new Map();
@@ -1280,6 +1358,57 @@ function handle(goodsDetails,operatorType){
     goodsDetails.goodsDesc = "";
 
 
+    // 判断当前商品是否是赠品
+        var freeMap = vm.freeBardcode.get(goodsDetails.prodBarcode);
+        if(freeMap && "minus" != operatorType){
+            goodsDetails.actualPaymentAmount = 0;
+            goodsDetails.discountedPrice = goodsDetails.retailPrice;
+            vm.freeBardcode.set(goodsDetails.prodBarcode,freeMap - 1);
+        }else{
+            if(!freeMap && freeMap != 0 ){
+            // 判断购物车中是否有赠品   这个操作只有是非赠品才能进来
+                for(var i = 0 ; i < vm.goodsList.length ; i++){
+                    var shopcartGoods = vm.goodsList[i];
+                    var shopcartFree = vm.freeBardcode.get(shopcartGoods.prodBarcode);
+                    if(shopcartFree /*&& shopcartGoods.actualPaymentAmount*/){
+                        // if("minus" != operatorType){
+                            var shopcartSellNum = shopcartGoods.sellVolume;
+                            if(shopcartFree > shopcartSellNum){
+                                shopcartGoods.actualPaymentAmount = 0;
+                                shopcartGoods.discountedPrice = shopcartGoods.retailPrice * shopcartFree;
+
+                                vm.discountedPrice = vm.discountedPrice + shopcartGoods.discountedPrice ;
+                                vm.actualPrice = vm.actualPrice + shopcartGoods.actualPaymentAmount ;
+
+                                vm.freeBardcode.set(shopcartGoods.prodBarcode,shopcartFree - 1);//
+                            }else if(shopcartFree == -1 ){
+                                // g.actualPaymentAmount == 0){
+                                shopcartGoods.actualPaymentAmount = shopcartGoods.retailPrice + shopcartGoods.actualPaymentAmount;
+                                shopcartGoods.discountedPrice = shopcartGoods.discountedPrice - shopcartGoods.retailPrice;
+
+                                vm.discountedPrice = vm.discountedPrice + shopcartGoods.discountedPrice ;
+                                vm.actualPrice = vm.actualPrice + shopcartGoods.actualPaymentAmount ;
+
+                                vm.freeBardcode.set(shopcartGoods.prodBarcode,0);// 重置回0
+                            }else{
+                                if(shopcartGoods.actualPaymentAmount > 0){
+                                    shopcartGoods.actualPaymentAmount = shopcartGoods.actualPaymentAmount - (shopcartGoods.retailPrice * shopcartFree);
+                                    shopcartGoods.discountedPrice = shopcartGoods.discountedPrice + (shopcartGoods.retailPrice * shopcartFree);
+
+                                    vm.actualPrice = vm.actualPrice - (shopcartGoods.retailPrice * shopcartFree) ;
+                                    vm.discountedPrice = vm.discountedPrice + (shopcartGoods.retailPrice * shopcartFree) ;
+
+                                    vm.freeBardcode.set(shopcartGoods.prodBarcode, shopcartFree - 1);// 重置回0
+                                }
+                            }
+                        // }
+                    }
+
+                }
+            }
+        }
+
+