jk-GitHub-coder 4 éve
szülő
commit
dc058493a7

+ 103 - 68
YijiaRestful/src/main/java/com/platform/yijia/controller/ElectronicMembershipCardController.java

@@ -147,74 +147,78 @@ public class ElectronicMembershipCardController {
                     calendar.setTime(new Date());   //获取当前时间
                     //循环优惠规则明细
                     for (CustomerCardSettingDetail cardDetail : cardRechargeSettingList.get(0).getCustomerCardSettingDetailList()){
-                        if(amt.compareTo(cardDetail.getDiscountAmtEnd()) ==-1 || amt.compareTo(cardDetail.getDiscountAmtEnd()) ==0){
-                            //String isDiscountCoupon = cardRechargeSettingList.get(0).getIsDiscountCoupon();       //是否使用优惠券
-                            //充值优惠类型
-                            if(cardDetail.getSettingRuleType().equals("1")){ //按充值金额
-                                BigDecimal presentAmt = cardDetail.getPresentAmt(); //当前赠送金额
-                                if(cardRechargeSettingList.get(0).getDiscountTimeSetting().equals("1") && dctime !=null){
-                                    String discountTimeType = cardRechargeSettingList.get(0).getDiscountTimeType();     //获取日期类型
-                                    switch (discountTimeType){
-                                        case "1":   //  1.按周来
-                                            int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
-                                            day_Week= day_Week-1;     //减一原因:数据库存的下标从零开始
-                                            currentTime = String.valueOf(day_Week);
-                                            break;
-                                        case "2":   //  2.每月的多少号
-                                            int day_month = calendar.get(Calendar.DAY_OF_MONTH);
-                                            day_month = day_month-1;        //减一原因:数据库存的下标从零开始
-                                            currentTime = String.valueOf(day_month); //当前时间
-                                            break;
-                                        case "3":   //  3.固定日期
-                                            currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
-                                            break;
-                                    }
-                                    for (String str : dctime){
-                                        if(str.equals(currentTime)){  //如果当前时间在会员日活动时间内
-                                            //计算会员日内的总赠送积分
-                                            if(cardRechargeSettingList.get(0).getPresentScale() !=null){
-                                                presentAmt = presentAmt.multiply(new BigDecimal(cardRechargeSettingList.get(0).getPresentScale())).add(presentAmt);
+                        if(cardDetail.getStatus() !=null && cardDetail.getStatus().equals("1")){
+                            if(amt.compareTo(cardDetail.getDiscountAmtEnd()) ==-1 || amt.compareTo(cardDetail.getDiscountAmtEnd()) ==0){
+                                //String isDiscountCoupon = cardRechargeSettingList.get(0).getIsDiscountCoupon();       //是否使用优惠券
+                                //充值优惠类型
+                                if(cardDetail.getSettingRuleType().equals("1")){ //按充值金额
+                                    BigDecimal presentAmt = cardDetail.getPresentAmt(); //当前赠送金额
+                                    if(cardRechargeSettingList.get(0).getDiscountTimeSetting().equals("1") && dctime !=null){
+                                        String discountTimeType = cardRechargeSettingList.get(0).getDiscountTimeType();     //获取日期类型
+                                        switch (discountTimeType){
+                                            case "1":   //  1.按周来
+                                                int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
+                                                day_Week= day_Week-1;     //减一原因:数据库存的下标从零开始
+                                                currentTime = String.valueOf(day_Week);
+                                                break;
+                                            case "2":   //  2.每月的多少号
+                                                int day_month = calendar.get(Calendar.DAY_OF_MONTH);
+                                                day_month = day_month-1;        //减一原因:数据库存的下标从零开始
+                                                currentTime = String.valueOf(day_month); //当前时间
+                                                break;
+                                            case "3":   //  3.固定日期
+                                                currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+                                                break;
+                                        }
+                                        for (String str : dctime){
+                                            if(str.equals(currentTime)){  //如果当前时间在会员日活动时间内
+                                                //计算会员日内的总赠送积分
+                                                if(cardRechargeSettingList.get(0).getPresentScale() !=null){
+                                                    presentAmt = presentAmt.multiply(new BigDecimal(cardRechargeSettingList.get(0).getPresentScale())).add(presentAmt);
+                                                }
+                                                break;
                                             }
-                                            break;
                                         }
                                     }
-                                }
-                                customerCardUseRecord.setAmt(amt);
-                                customerCardUseRecord.setPresentAmt(presentAmt);
-                            }else if(cardDetail.getSettingRuleType().equals("2")){      //按充值金额的比例
-                                BigDecimal presentAmt = amt.multiply(cardDetail.getPresentAmt().divide(new BigDecimal(100))); //当前赠送金额比例的赠送积分
-                                if(cardRechargeSettingList.get(0).getDiscountTimeSetting().equals("1") && dctime !=null){
-                                    String discountTimeType = cardRechargeSettingList.get(0).getDiscountTimeType();     //获取日期类型
-                                    switch (discountTimeType){
-                                        case "1":   //  1.按周来
-                                            int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
-                                            day_Week= day_Week-1;     //减一原因:数据库存的下标从零开始
-                                            currentTime = String.valueOf(day_Week);
-                                            break;
-                                        case "2":   //  2.每月的多少号
-                                            int day_month = calendar.get(Calendar.DAY_OF_MONTH);
-                                            day_month = day_month-1;        //减一原因:数据库存的下标从零开始
-                                            currentTime = String.valueOf(day_month); //当前时间
-                                            break;
-                                        case "3":   //  3.固定日期
-                                            currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
-                                            break;
-                                    }
-                                    for (String str : dctime){
-                                        if(str.equals(currentTime)){  //如果当前时间在会员日活动时间内
-                                            //计算会员日期内的总赠送积分
-                                            if(cardRechargeSettingList.get(0).getPresentScale() !=null){
-                                                presentAmt = presentAmt.multiply(new BigDecimal(cardRechargeSettingList.get(0).getPresentScale())).add(presentAmt);
+                                    customerCardUseRecord.setAmt(amt);
+                                    customerCardUseRecord.setPresentAmt(presentAmt);
+                                }else if(cardDetail.getSettingRuleType().equals("2")){      //按充值金额的比例
+                                    BigDecimal presentAmt = amt.multiply(cardDetail.getPresentAmt().divide(new BigDecimal(100))); //当前赠送金额比例的赠送积分
+                                    if(cardRechargeSettingList.get(0).getDiscountTimeSetting().equals("1") && dctime !=null){
+                                        String discountTimeType = cardRechargeSettingList.get(0).getDiscountTimeType();     //获取日期类型
+                                        switch (discountTimeType){
+                                            case "1":   //  1.按周来
+                                                int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
+                                                day_Week= day_Week-1;     //减一原因:数据库存的下标从零开始
+                                                currentTime = String.valueOf(day_Week);
+                                                break;
+                                            case "2":   //  2.每月的多少号
+                                                int day_month = calendar.get(Calendar.DAY_OF_MONTH);
+                                                day_month = day_month-1;        //减一原因:数据库存的下标从零开始
+                                                currentTime = String.valueOf(day_month); //当前时间
+                                                break;
+                                            case "3":   //  3.固定日期
+                                                currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+                                                break;
+                                        }
+                                        for (String str : dctime){
+                                            if(str.equals(currentTime)){  //如果当前时间在会员日活动时间内
+                                                //计算会员日期内的总赠送积分
+                                                if(cardRechargeSettingList.get(0).getPresentScale() !=null){
+                                                    presentAmt = presentAmt.multiply(new BigDecimal(cardRechargeSettingList.get(0).getPresentScale())).add(presentAmt);
+                                                }
+                                                break;
                                             }
-                                            break;
                                         }
                                     }
+                                    customerCardUseRecord.setAmt(amt);
+                                    customerCardUseRecord.setPresentAmt(presentAmt);
                                 }
-                                customerCardUseRecord.setAmt(amt);
-                                customerCardUseRecord.setPresentAmt(presentAmt);
-                                //customerCardUseRecord.setBalance(amt.add(presentAmt));
+                                break;
                             }
-                            break;
+                        }else {
+                            customerCardUseRecord.setAmt(amt);
+                            customerCardUseRecord.setPresentAmt(new BigDecimal(0));
                         }
                     }
                 }else {
@@ -251,6 +255,7 @@ public class ElectronicMembershipCardController {
                 }
                 String orderNo = System.nanoTime()+str;
                 customerCardUseRecord.setOrderNo(orderNo);
+                logger.info("电子卡的充值单号:" +orderNo);
                 electronicMembershipCardService.insetCardUseRecordRecharge(customerCardUseRecord);      //插入电子会员卡的使用记录
                 resultData = ResultData.success(orderNo);
             }
@@ -289,24 +294,24 @@ public class ElectronicMembershipCardController {
                 BigDecimal balance = null;                                                  //电子会员卡余额
                 CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
                 String cardOilsType ="";
-                switch (oilName){                               //根据油品名称存储电子卡油品类型 1.柴油 2 汽
+                switch (oilName){                               //根据油品名称存储电子卡油品类型 1.汽油 2.柴
                     case "92#":
-                        cardOilsType ="2";
+                        cardOilsType ="1";
                         break;
                     case "95#":
-                        cardOilsType ="2";
+                        cardOilsType ="1";
                         break;
                     case "97#":
-                        cardOilsType ="2";
+                        cardOilsType ="1";
                         break;
                     case "0#":
-                        cardOilsType ="1";
+                        cardOilsType ="2";
                         break;
                     case "-10#":
-                        cardOilsType ="1";
+                        cardOilsType ="2";
                         break;
                     case "-20#":
-                        cardOilsType ="1";
+                        cardOilsType ="2";
                         break;
                 }
                 customerElectronicCard.setCardOilsType(cardOilsType);
@@ -345,7 +350,9 @@ public class ElectronicMembershipCardController {
                     payOrder.setReceivedAmt(Double.valueOf(amt));
                     payOrder.setDzkAmt(Double.valueOf(amt));
                     payOrderService.getUpdatePayOrder(payOrder);
-                    resultMap.put("payTypep","dzk");
+                    resultMap.put("payType","dzk");
+                    //插入集团客户信息
+                    insertCustomerGroup(resultMap);
                     //更新客户表
                     CustomerManage customerManage = new CustomerManage();
                     customerManage.setStationId(Integer.valueOf(stationId));
@@ -462,6 +469,23 @@ public class ElectronicMembershipCardController {
         }
     }
 
+    //插入集团客户信息
+    public CustomerGroup insertCustomerGroup(Map infoMap){
+        CustomerGroup customerGroup = new CustomerGroup();
+        customerGroup.setGroupId(Integer.valueOf(infoMap.get("groupId").toString()));
+        customerGroup.setUnionId(infoMap.get("unionId").toString());
+        CustomerGroup customerGroupInfo = customerManagerService.selectCustomerGroup(customerGroup);
+        if(customerGroupInfo ==null){
+            customerGroup.setPhoneNumber(infoMap.get("mobilePhone").toString());
+            //客户ID格式:集团+油站+时间戳
+            String customerId=infoMap.get("groupId").toString()+infoMap.get("stationId").toString()+System.nanoTime();
+            customerGroup.setCustomerId(customerId);
+            logger.info("集团客户会员ID: " +customerId);
+            customerManagerService.insertCustomerGroup(customerGroup);
+        }
+        return customerGroup;
+    }
+
     /**
      * 打印小票
      */
@@ -1173,6 +1197,17 @@ public class ElectronicMembershipCardController {
                     }
                 }
             }
+            CustomerCardSetting customerCardSetting = new CustomerCardSetting();
+            customerCardSetting.setStationId(calculateIntegral.getStationId());
+            //判断电子会员卡消费时是否享用基本倍数
+            List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
+            if(cardRechargeSettingList !=null && cardRechargeSettingList.size()==1){
+                String enjoyIntegralMultiple = cardRechargeSettingList.get(0).getEnjoyIntegralMultiple();
+                if(StringUtils.isNotBlank(enjoyIntegralMultiple)){
+                    BigDecimal integral_b = new BigDecimal(integral).multiply(new BigDecimal(enjoyIntegralMultiple));
+                    integral = integral_b.intValue();
+                }
+            }
             calculateIntegral.setIntegral(integral);
             this.pushIntegral(calculateIntegral);
         }

+ 20 - 0
YijiaRestful/src/main/java/com/platform/yijia/controller/PayController.java

@@ -561,6 +561,7 @@ public class PayController {
                         //手机号必须有
                         if(infoMap != null && infoMap.containsKey("mobilePhone") && infoMap.get("mobilePhone") !=null ){
                             //插入客户积分返回要插入客户的信息
+                            insertCustomerGroup(infoMap);
                             CustomerManage customerManage = insertCustomerManage(infoMap);
                             StationPayManage stationPayManage = new StationPayManage();
                             stationPayManage.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
@@ -601,6 +602,22 @@ public class PayController {
         }
     }
 
+    //插入集团客户信息
+    public CustomerGroup insertCustomerGroup(Map infoMap){
+        CustomerGroup customerGroup = new CustomerGroup();
+        customerGroup.setGroupId(Integer.valueOf(infoMap.get("groupId").toString()));
+        customerGroup.setUnionId(infoMap.get("unionId").toString());
+        CustomerGroup customerGroupInfo = customerManagerService.selectCustomerGroup(customerGroup);
+        if(customerGroupInfo ==null){
+            customerGroup.setPhoneNumber(infoMap.get("mobilePhone").toString());
+            //客户ID格式:集团+油站+时间戳
+            String customerId=infoMap.get("groupId").toString()+infoMap.get("stationId").toString()+System.nanoTime();
+            customerGroup.setCustomerId(customerId);
+            customerManagerService.insertCustomerGroup(customerGroup);
+        }
+        return customerGroup;
+    }
+
     /***
      * 插入客户信息
      * @param infoMap
@@ -608,6 +625,7 @@ public class PayController {
      */
     public CustomerManage insertCustomerManage(Map infoMap){
         CustomerManage customerManage = new CustomerManage();   //存放客户信息
+        customerManage.setGroupId(Integer.valueOf(infoMap.get("groupId").toString()));
         AppUserInfo appUserInfo = new AppUserInfo();    //存放查询用户信息
         appUserInfo.setMobilePhone(infoMap.get("mobilePhone").toString());
         appUserInfo.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
@@ -1066,6 +1084,8 @@ public class PayController {
                 }
             }
             calculateIntegral.setIntegral(integral);
+            customerManage.setIntegral(integral);
+            customerManagerService.updateCustomerInfo(customerManage);
             this.pushIntegral(calculateIntegral);
         }
     }

+ 108 - 74
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -114,7 +114,8 @@ public class PayOrderController {
             String orderType = payOrderRequest.getOrderType();                          //获取订单类型
             logger.info("订单类型:" + orderType);
             if(orderType.equals("1")){                                                  //订单类型是油品时计算
-                resultMap = this.calculateAmt(payOrderRequest);                         //计算油价 加油升数 优惠金额 实收金额 优惠价格
+                //resultMap = this.calculateAmt(payOrderRequest);                         //计算油价 加油升数 优惠金额 实收金额 优惠价格
+                resultMap = this.calculateAmtNew(payOrderRequest);                         //计算油价 加油升数 优惠金额 实收金额 优惠价格
                 payOrder.setOilPirce(resultMap.get("oilPrice").toString());
                 payOrder.setOrderLiters(resultMap.get("oilLiters").toString());
                 payOrder.setDiscountAmt(Double.valueOf(resultMap.get("discountAmt").toString()));
@@ -451,8 +452,14 @@ public class PayOrderController {
     /*
      * 修订优惠计算: 2021年4月20日15:31:30
      * 修订内容 :
-     *    修改为目前只有三种优惠:等级优惠根据立减 满减 独立直降 是否启用 等级直降来确定是否使用等级直降
-     *    优惠为 1 是:表示不走优惠,没有优惠只走等级直降的优惠
+     *    修改为目前只有三种优惠:根据立减、满减、独立直降;
+     *    注释:优惠为 1 是:表示不走满减、立减、独立直降优惠,只走等级直降的优惠;
+     *    条件规则:
+     *      一,优先满减(只有一档,不存在多档!)、立减(只有一档,不存在多档!)、独立直降(只有一档)
+     *      二,若用户消费门槛 >= 优惠门槛,且启用优惠叠加时,则计算优惠规则和等级优惠规则;
+     *         若用户消费门槛 >= 优惠门槛,且不启用优惠叠加时,则只计算优惠规则;
+     *         若用户消费门槛 <  优惠门槛,且启用优惠叠加时,则只计算等级规则;
+     *         若用户消费门槛 <  优惠门槛,且不启用优惠叠加时,则只计算等级规则;
      *
      */
     public Map<String ,Object> calculateAmtNew(PayOrderRequest payOrderRequest){
@@ -536,44 +543,57 @@ public class PayOrderController {
                     List<Map> customerMarkertPlanList_1 = customerGradeServices.getCustomerMarkertPlanList(params);
                     //有优惠规则
                     if(customerMarkertPlanList_1 !=null && customerMarkertPlanList_1.size() >0){
-                        boolean flag = true;
-                        String isAddDiscount="0";
-                        for (Map m : customerMarkertPlanList_1){
-                            //如果当前应收金额大于条件金额
-                            BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString());   //条件金额
-                            if(receivableAmt_b.compareTo(discountAmt_b) ==1 || receivableAmt_b.compareTo(discountAmt_b) ==0){
-                                BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString());   //每满多少优惠多少的金额
-                                discountAmt = receivableAmt_b.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(gasoilDiscountAmt_b);  //优惠金额
-                                discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                amt = receivableAmt_b.subtract(discountAmt);   //实收金额
-                                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
-                                discountPrice = amt.divide(oilLiters,2,BigDecimal.ROUND_HALF_UP);        //优惠价格
-                                //是否共享会员优惠叠加
-                                String vipDiscountyPlus = m.get("vipDiscountyPlus").toString();
-                                if(vipDiscountyPlus.equals("1")){
-                                    isAddDiscount ="1";
+                        //是否共享会员优惠叠加: 1 代表是; 2 代表否;
+                        String vipDiscountyPlus = customerMarkertPlanList_1.get(0).get("vipDiscountyPlus").toString();
+                        //如果当前应收金额大于条件金额
+                        BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList_1.get(0).get("discountAmt").toString());   //条件金额
+                        if(receivableAmt_b.compareTo(discountAmt_b) ==1 || receivableAmt_b.compareTo(discountAmt_b) ==0){
+                            BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList_1.get(0).get("gasoilDiscountAmt").toString());   //每满多少优惠多少的金额
+                            discountAmt = receivableAmt_b.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(gasoilDiscountAmt_b);  //优惠金额
+                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                            amt = receivableAmt_b.subtract(discountAmt);   //实收金额
+                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                            discountPrice = amt.divide(oilLiters,2,BigDecimal.ROUND_HALF_UP);        //优惠价格
+                            switch (vipDiscountyPlus){
+                                case "1":
                                     Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
                                     discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
                                     amt = amt.subtract(discountAmt);
                                     discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
-                                }
-                                resultMap.put("discountAmt", discountAmt.doubleValue());
-                                resultMap.put("amt", amt.doubleValue());
-                                resultMap.put("oilLiters", oilLiters.doubleValue());
-                                resultMap.put("discountPrice", discountPrice.doubleValue());
-                                flag = false;
-                                break;
+                                    resultMap.put("discountAmt", discountAmt.doubleValue());
+                                    resultMap.put("amt", amt.doubleValue());
+                                    resultMap.put("oilLiters", oilLiters.doubleValue());
+                                    resultMap.put("discountPrice", discountPrice.doubleValue());
+                                    break;
+                                case "2":
+                                    resultMap.put("discountAmt", discountAmt.doubleValue());
+                                    resultMap.put("amt", amt.doubleValue());
+                                    resultMap.put("oilLiters", oilLiters.doubleValue());
+                                    resultMap.put("discountPrice", discountPrice.doubleValue());
+                                    break;
+                            }
+                        }else{
+                            switch (vipDiscountyPlus){
+                                case "1":
+                                    Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
+                                    discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
+                                    amt = amt.subtract(discountAmt);
+                                    discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
+                                    resultMap.put("discountAmt", discountAmt.doubleValue());
+                                    resultMap.put("amt", amt.doubleValue());
+                                    resultMap.put("oilLiters", oilLiters.doubleValue());
+                                    resultMap.put("discountPrice", discountPrice.doubleValue());
+                                    break;
+                                case "2":
+                                    resultMap.put("discountAmt", discountAmt.doubleValue());
+                                    resultMap.put("amt", amt.doubleValue());
+                                    resultMap.put("oilLiters", oilLiters.doubleValue());
+                                    resultMap.put("discountPrice", discountPrice.doubleValue());
+                                    break;
                             }
-                        }
-                        if(flag && isAddDiscount.equals("1")){
-                            Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
-                            resultMap.put("discountAmt", map.get("discountAmt").toString());
-                            resultMap.put("amt", map.get("amt").toString());
-                            resultMap.put("oilLiters", map.get("oilLiters").toString());
-                            resultMap.put("discountPrice", map.get("discountPrice").toString());
                         }
                     }else {
-                        //没有优惠规则
+                        //用户没有设置优惠规则时
                         Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
                         resultMap.put("discountAmt", map.get("discountAmt").toString());
                         resultMap.put("amt", map.get("amt").toString());
@@ -585,44 +605,58 @@ public class PayOrderController {
                     params.put("discountPlanType", "2");
                     //营销方案
                     List<Map> customerMarkertPlanList_2 = customerGradeServices.getCustomerMarkertPlanList(params);
+                    //是否共享会员优惠叠加: 1 代表是; 2 代表否;
+                    String vipDiscountyPlus = customerMarkertPlanList_2.get(0).get("vipDiscountyPlus").toString();
                     if(customerMarkertPlanList_2 !=null && customerMarkertPlanList_2.size() >0){
-                        boolean flag = true;
-                        String isAddDiscount="0";
-                        for (Map m : customerMarkertPlanList_2){
-                            //如果当前应收金额大于条件金额
-                            BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString());   //条件金额
-                            if(receivableAmt_b.compareTo(discountAmt_b) ==1 || receivableAmt_b.compareTo(discountAmt_b) ==0){
-                                BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString());   //满多少优惠多少的金额
-                                discountAmt = gasoilDiscountAmt_b;  //优惠金额
-                                amt = receivableAmt_b.subtract(gasoilDiscountAmt_b);   //实收金额
-                                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);   //加油升数
-                                discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);        //优惠价格
-                                //是否共享会员优惠叠加
-                                String vipDiscountyPlus = m.get("vipDiscountyPlus").toString();
-                                if(vipDiscountyPlus.equals("1")){
-                                    isAddDiscount ="1";
+                        //如果当前应收金额大于条件金额
+                        BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList_2.get(0).get("discountAmt").toString());   //条件金额
+                        if(receivableAmt_b.compareTo(discountAmt_b) ==1 || receivableAmt_b.compareTo(discountAmt_b) ==0){
+                            BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList_2.get(0).get("gasoilDiscountAmt").toString());   //满多少优惠多少的金额
+                            discountAmt = gasoilDiscountAmt_b;  //优惠金额
+                            amt = receivableAmt_b.subtract(gasoilDiscountAmt_b);   //实收金额
+                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                            discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);        //优惠价格
+                            switch (vipDiscountyPlus){
+                                case "1":
                                     Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
                                     discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
                                     amt = amt.subtract(discountAmt);
                                     discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
-                                }
-                                resultMap.put("discountAmt", discountAmt.doubleValue());
-                                resultMap.put("amt", amt.doubleValue());
-                                resultMap.put("oilLiters", oilLiters.doubleValue());
-                                resultMap.put("discountPrice", discountPrice.doubleValue());
-                                flag = false;
-                                break;
+                                    resultMap.put("discountAmt", discountAmt.doubleValue());
+                                    resultMap.put("amt", amt.doubleValue());
+                                    resultMap.put("oilLiters", oilLiters.doubleValue());
+                                    resultMap.put("discountPrice", discountPrice.doubleValue());
+                                    break;
+                                case "2":
+                                    resultMap.put("discountAmt", discountAmt.doubleValue());
+                                    resultMap.put("amt", amt.doubleValue());
+                                    resultMap.put("oilLiters", oilLiters.doubleValue());
+                                    resultMap.put("discountPrice", discountPrice.doubleValue());
+                                    break;
+                            }
+                        }else {
+                            //不满足优惠条件
+                            switch (vipDiscountyPlus) {
+                                case "1":
+                                    Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
+                                    discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
+                                    amt = amt.subtract(discountAmt);
+                                    discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
+                                    resultMap.put("discountAmt", discountAmt.doubleValue());
+                                    resultMap.put("amt", amt.doubleValue());
+                                    resultMap.put("oilLiters", oilLiters.doubleValue());
+                                    resultMap.put("discountPrice", discountPrice.doubleValue());
+                                    break;
+                                case "2":
+                                    resultMap.put("discountAmt", discountAmt.doubleValue());
+                                    resultMap.put("amt", amt.doubleValue());
+                                    resultMap.put("oilLiters", oilLiters.doubleValue());
+                                    resultMap.put("discountPrice", discountPrice.doubleValue());
+                                    break;
                             }
-                        }
-                        if(flag && isAddDiscount.equals("1")){   //用户加油金额不符合优惠条件
-                            Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
-                            resultMap.put("discountAmt", map.get("discountAmt").toString());
-                            resultMap.put("amt", map.get("amt").toString());
-                            resultMap.put("oilLiters", map.get("oilLiters").toString());
-                            resultMap.put("discountPrice", map.get("discountPrice").toString());
                         }
                     }else {
-                        //没有优惠规则
+                        //用户没有设置优惠规则时
                         Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
                         resultMap.put("discountAmt", map.get("discountAmt").toString());
                         resultMap.put("amt", map.get("amt").toString());
@@ -636,7 +670,7 @@ public class PayOrderController {
                     List<Map> customerMarkertPlanList_3 = customerGradeServices.getCustomerMarkertPlanList(params);
                     if(customerMarkertPlanList_3 !=null && customerMarkertPlanList_3.size() >0){
                         boolean flag= true;
-                        String isAddDiscount="0";
+                        //独立直降时会存在多条
                         for(Map m : customerMarkertPlanList_3){
                             BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString());   //条件金额
                             BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString());
@@ -649,9 +683,8 @@ public class PayOrderController {
                                     amt = receivableAmt_b.subtract(discountAmt);
                                     discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);        //优惠价格
                                     //是否共享会员优惠叠加
-                                    String vipDiscountyPlus = m.get("vipDiscountyPlus").toString();
-                                    if(vipDiscountyPlus.equals("1")){
-                                        isAddDiscount ="1";
+                                    String vipDiscountyPlus_3 = m.get("vipDiscountyPlus").toString();
+                                    if(vipDiscountyPlus_3.equals("1")){
                                         Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
                                         discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
                                         amt = amt.subtract(discountAmt);
@@ -671,9 +704,8 @@ public class PayOrderController {
                                     amt = receivableAmt_b.subtract(discountAmt);
                                     discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);        //优惠价格
                                     //是否共享会员优惠叠加
-                                    String vipDiscountyPlus = m.get("vipDiscountyPlus").toString();
-                                    if(vipDiscountyPlus.equals("1")){
-                                        isAddDiscount ="1";
+                                    String vipDiscountyPlus_3 = m.get("vipDiscountyPlus").toString();
+                                    if(vipDiscountyPlus_3.equals("1")){
                                         Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
                                         discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
                                         amt = amt.subtract(discountAmt);
@@ -688,7 +720,8 @@ public class PayOrderController {
                                 }
                             }
                         }
-                        if(flag && isAddDiscount.equals("1")){
+                        //如果用户加油金额都不符合优惠门槛则计算等级的优惠
+                        if(flag){
                             Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
                             resultMap.put("discountAmt", map.get("discountAmt").toString());
                             resultMap.put("amt", map.get("amt").toString());
@@ -696,7 +729,7 @@ public class PayOrderController {
                             resultMap.put("discountPrice", map.get("discountPrice").toString());
                         }
                     }else {
-                        //没有优惠规则
+                        //用户没有设置优惠规则
                         Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
                         resultMap.put("discountAmt", map.get("discountAmt").toString());
                         resultMap.put("amt", map.get("amt").toString());
@@ -710,7 +743,7 @@ public class PayOrderController {
     }
 
     //计算等级直降
-    public Map<String, Object> calcuteDengJiZhiJiang(Map params){
+    public  Map<String, Object> calcuteDengJiZhiJiang(Map params){
         Double receivableAmt = Double.valueOf(params.get("receivableAmt").toString());
         Map<String, Object> resultMap = new HashMap();
         BigDecimal oilLiters = null;
@@ -818,3 +851,4 @@ public class PayOrderController {
         return gson.toJson(resultData);
     }
 }
+

+ 1 - 0
YijiaRestful/src/main/java/com/platform/yijia/pojo/CustomerCardSettingDetail.java

@@ -17,4 +17,5 @@ public class CustomerCardSettingDetail {
     private BigDecimal discountAmtEnd;     //优惠条件金额结束值
     private BigDecimal presentAmt;          //赠送金额值或者赠送c充值金额的比例
     private String  oilName;           //创建时间
+    private String status;              //状态
 }

+ 7 - 0
YijiaRestful/src/main/java/com/platform/yijia/service/CustomerManagerService.java

@@ -1,6 +1,7 @@
 package com.platform.yijia.service;
 
 
+import com.platform.yijia.pojo.CustomerGroup;
 import com.platform.yijia.pojo.CustomerManage;
 import com.platform.yijia.pojo.IntegralRule;
 
@@ -17,4 +18,10 @@ public interface CustomerManagerService {
     //插入客户信息
     void insertCustomerInfo(CustomerManage customerManage);
 
+    //查询客户集团
+    CustomerGroup selectCustomerGroup(CustomerGroup customerGroup);
+
+    //插入集团客户表
+    void insertCustomerGroup(CustomerGroup customerGroup);
+
 }

+ 13 - 0
YijiaRestful/src/main/java/com/platform/yijia/service/impl/CustomerManagerServiceImpl.java

@@ -1,6 +1,7 @@
 package com.platform.yijia.service.impl;
 
 import com.platform.yijia.dao.CustomerManagerMapper;
+import com.platform.yijia.pojo.CustomerGroup;
 import com.platform.yijia.pojo.CustomerManage;
 import com.platform.yijia.service.CustomerManagerService;
 import org.springframework.stereotype.Service;
@@ -12,6 +13,18 @@ public class CustomerManagerServiceImpl implements CustomerManagerService {
     @Resource
     private CustomerManagerMapper customerManagerMapper;
 
+    //查询集团客户信息
+    @Override
+    public CustomerGroup selectCustomerGroup(CustomerGroup customerGroup) {
+        return customerManagerMapper.selectCustomerGroup(customerGroup);
+    }
+
+    //插入集团客户表
+    @Override
+    public void insertCustomerGroup(CustomerGroup customerGroup) {
+        customerManagerMapper.insertCustomerGroup(customerGroup);
+    }
+
     //更新客户信息
     @Override
     public void updateCustomerInfo(CustomerManage customerManage) {

+ 2 - 2
YijiaRestful/src/main/resources/mapper/CustomerManagerMapper.xml

@@ -163,8 +163,8 @@
             <if test="grade !=null ">
                 grade = #{grade},
             </if>
-            <if test="groupId !=null ">
-                group_id = #{groupId},
+            <if test="integral !=null ">
+                integral = #{integral},
             </if>
         </set>
         <where>

+ 3 - 1
YijiaRestful/src/main/resources/mapper/ElectronicMembershipCardMapper.xml

@@ -62,6 +62,7 @@
         <result column="discount_amt_end"           jdbcType="DECIMAL"      property="discountAmtEnd" />
         <result column="present_amt"                jdbcType="DECIMAL"      property="presentAmt"/>
         <result column="oil_name"                   jdbcType="VARCHAR"      property="oilName" />
+        <result column="status"                     jdbcType="VARCHAR"      property="status" />
     </resultMap>
 
     <!--查询油站电子会员卡(储蓄卡)充值设置规则-->
@@ -84,7 +85,8 @@
             T2.discount_amt_start,
             T2.discount_amt_end,
             T2.present_amt,
-            T2.oil_name
+            T2.oil_name,
+            T2.status
         FROM
             customer_card_setting AS T1 LEFT JOIN customer_card_setting_detail AS T2 ON T1.id = T2.parent_id
         <where>