Ver código fonte

修改积分规则逻辑

jk-GitHub-coder 4 anos atrás
pai
commit
158842272d

+ 111 - 109
YijiaRestful/src/main/java/com/platform/yijia/controller/PayController.java

@@ -697,141 +697,143 @@ public class PayController {
                                 //获取该用户积分信息
                                 CustomerPoints customerPointsInfo = customerPointsService.getCustomerPointsInfo(customerPoints);
                                 if(customerPointsInfo !=null){
-                                    String ruleType = rule.get(0).getRuleType();   //获取积分规则类型
+                                    //String ruleType = rule.get(0).getRuleType();   //获取积分规则类型
                                     String[] datePicker={};     //积分比例时间
                                     if(rule.get(0).getDatePicker() != null && rule.get(0).getDatePicker() !=""){
                                         datePicker = rule.get(0).getDatePicker().split(",");
                                     }
                                     String currentTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
                                     List<IntegralRuleDetail> integralRuleDetailList = rule.get(0).getIntegralRuleDetailList();  //积分规则详细计算信息
-                                    switch (ruleType){
-                                        case "1":   //以订单实付累计
-                                            //已存在:现有余额积分 + 本次消费所获得的积分
-                                            BigDecimal realAmt = new BigDecimal(infoMap.get("amt").toString());  //本次消费实收金额
-                                            for(IntegralRuleDetail integralRuleDetail : integralRuleDetailList){
-                                                if(realAmt.compareTo(integralRuleDetail.getRuleTerms()) ==1){
-                                                    //此处使用等级与不使用等级时参数存储获取逻辑写重原因:省去一次根据等级ID查询规则的数据库访问
-                                                    if(discountPlanType == "1" && customerManage.getGrade().equals(integralRuleDetail.getGread())){
-                                                        //计算积分并取整
-                                                        BigDecimal integral = realAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
-                                                        //设置积分多倍时间时
-                                                        if(datePicker !=null){
-                                                            for(String str: datePicker){
-                                                                if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
-                                                                    integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
-                                                                    break;
+                                    if(integralRuleDetailList !=null && integralRuleDetailList.size() > 0){
+                                        boolean b =false;
+                                        BigDecimal realAmt = new BigDecimal(infoMap.get("amt").toString());  //本次消费实收金额
+                                        BigDecimal receivableAmt = new BigDecimal(infoMap.get("receivableAmt").toString());  //本次消费实收金额
+                                        BigDecimal orderLiters = new BigDecimal(infoMap.get("orderLiters").toString());    //本次加油升数
+                                        for(IntegralRuleDetail integralRuleDetail : integralRuleDetailList){
+                                            //规则类型
+                                            String ruleType = integralRuleDetail.getRuleType();
+                                            switch (ruleType){
+                                                case "1":   //以订单实付累计
+                                                    //已存在:现有余额积分 + 本次消费所获得的积分
+                                                    if(realAmt.compareTo(integralRuleDetail.getRuleTerms()) ==1){
+                                                        if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
+                                                            //计算积分并取整
+                                                            BigDecimal integral = realAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
+                                                            //设置积分多倍时间时
+                                                            if(datePicker !=null){
+                                                                for(String str: datePicker){
+                                                                    if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
+                                                                        integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
+                                                                        break;
+                                                                    }
                                                                 }
                                                             }
-                                                        }
-                                                        customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
-                                                        break;
-                                                    }else {
-                                                        //计算积分并取整
-                                                        BigDecimal integral = realAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
-                                                        //设置积分多倍时间时
-                                                        if(datePicker !=null){
-                                                            for(String str: datePicker){
-                                                                if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
-                                                                    integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
-                                                                    break;
+                                                            customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
+                                                        }else {
+                                                            //计算积分并取整
+                                                            BigDecimal integral = realAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
+                                                            //设置积分多倍时间时
+                                                            if(datePicker !=null){
+                                                                for(String str: datePicker){
+                                                                    if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
+                                                                        integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
+                                                                        break;
+                                                                    }
                                                                 }
                                                             }
+                                                            customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
                                                         }
-                                                        customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
-                                                        //break;
+                                                        b=true;
                                                     }
-                                                }
-                                            }
-                                            break;
-                                        case "2":   //以订单应付累计
-                                            //已存在:现有余额积分 + 本次消费所获得的积分
-                                            BigDecimal receivableAmt = new BigDecimal(infoMap.get("receivableAmt").toString());  //本次消费实收金额
-                                            for(IntegralRuleDetail integralRuleDetail : integralRuleDetailList){
-                                                if(receivableAmt.compareTo(integralRuleDetail.getRuleTerms()) ==1){
-                                                    //此处使用等级与不使用等级时参数存储获取逻辑写重原因:省去一次数据库访问
-                                                    if(discountPlanType == "1" && customerManage.getGrade().equals(integralRuleDetail.getGread())){
-                                                        //计算积分并取整
-                                                        BigDecimal integral = receivableAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
-                                                        //设置积分多倍时间时
-                                                        if(datePicker !=null){
-                                                            for(String str: datePicker){
-                                                                if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
-                                                                    integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
-                                                                    break;
+                                                    break;
+                                                case "2":   //以订单应付累计
+                                                    //已存在:现有余额积分 + 本次消费所获得的积分
+                                                    if(receivableAmt.compareTo(integralRuleDetail.getRuleTerms()) ==1){
+                                                        if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
+                                                            //计算积分并取整
+                                                            BigDecimal integral = receivableAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
+                                                            //设置积分多倍时间时
+                                                            if(datePicker !=null){
+                                                                for(String str: datePicker){
+                                                                    if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
+                                                                        integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
+                                                                        break;
+                                                                    }
                                                                 }
                                                             }
-                                                        }
-                                                        customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
-                                                        break;
-                                                    }else {
-                                                        //计算积分并取整
-                                                        BigDecimal integral = receivableAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
-                                                        //设置积分多倍时间时
-                                                        if(datePicker !=null){
-                                                            for(String str: datePicker){
-                                                                if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
-                                                                    integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
-                                                                    break;
+                                                            customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
+                                                            break;
+                                                        }else {
+                                                            //计算积分并取整
+                                                            BigDecimal integral = receivableAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
+                                                            //设置积分多倍时间时
+                                                            if(datePicker !=null){
+                                                                for(String str: datePicker){
+                                                                    if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
+                                                                        integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
+                                                                        break;
+                                                                    }
                                                                 }
                                                             }
+                                                            customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
                                                         }
-                                                        customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
-                                                        //break;
+                                                        b=true;
                                                     }
-
-                                                }
-                                            }
-                                            break;
-                                        case "3":   //以加油升数
-                                            BigDecimal orderLiters = new BigDecimal(infoMap.get("orderLiters").toString());
-                                            for(IntegralRuleDetail integralRuleDetail : integralRuleDetailList){
-                                                if(orderLiters.compareTo(integralRuleDetail.getRuleTerms()) ==1){
-                                                    //此处使用等级与不使用等级时参数存储获取逻辑写重原因:省去一次数据库访问
-                                                    if(discountPlanType == "1" && customerManage.getGrade().equals(integralRuleDetail.getGread())){
-                                                        //计算积分并取整
-                                                        BigDecimal integral = orderLiters.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
-                                                        //设置积分多倍时间时
-                                                        if(datePicker !=null){
-                                                            for(String str: datePicker){
-                                                                if (str.contains(currentTime) && rule.get(0).getIntegralProportion() !=null ){
-                                                                    integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
-                                                                    break;
+                                                    break;
+                                                case "3":   //以加油升数
+                                                    if(orderLiters.compareTo(integralRuleDetail.getRuleTerms()) ==1){
+                                                        //此处使用等级与不使用等级时参数存储获取逻辑写重原因:省去一次数据库访问
+                                                        if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
+                                                            //计算积分并取整
+                                                            BigDecimal integral = orderLiters.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
+                                                            //设置积分多倍时间时
+                                                            if(datePicker !=null){
+                                                                for(String str: datePicker){
+                                                                    if (str.contains(currentTime) && rule.get(0).getIntegralProportion() !=null ){
+                                                                        integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
+                                                                        break;
+                                                                    }
                                                                 }
                                                             }
-                                                        }
-                                                        customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
-                                                        break;
-                                                    }else {
-                                                        //计算积分并取整
-                                                        BigDecimal integral = orderLiters.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
-                                                        //设置积分多倍时间时
-                                                        if(datePicker !=null){
-                                                            for(String str: datePicker){
-                                                                if (str.contains(currentTime) && rule.get(0).getIntegralProportion() !=null ){
-                                                                    integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
-                                                                    break;
+                                                            customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
+                                                            break;
+                                                        }else {
+                                                            //计算积分并取整
+                                                            BigDecimal integral = orderLiters.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
+                                                            //设置积分多倍时间时
+                                                            if(datePicker !=null){
+                                                                for(String str: datePicker){
+                                                                    if (str.contains(currentTime) && rule.get(0).getIntegralProportion() !=null ){
+                                                                        integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
+                                                                        break;
+                                                                    }
                                                                 }
                                                             }
+                                                            customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
+                                                            customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
                                                         }
-                                                        customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
-                                                        customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
-                                                        //break;
+                                                        b=true;
                                                     }
-                                                }
+                                                    break;
                                             }
-                                            break;
+                                            // b=true是跳出循环
+                                            if(b){
+                                                break;
+                                            }
+                                        }
                                     }
+
                                     //更新客户余额积分
                                     customerPointsService.updateCustomerPointsInfo(customerPoints);
                                     //插入客户积分记录表

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

@@ -13,7 +13,6 @@ public class IntegralRule {
     private Integer id;                             //'主键id',
     private Integer stationId;                      //'油站id',
     private String stationName;                     //'油站名称',
-    private String ruleType;                        //'订单积分计算规则类型(1以订单实付累计 2以订单应付累计)',
     private String termDateManage;                  //'有效期设置',
     private Date emptyDate;                         //'清空积分时间',
     private String expirationReminder;              //'到期提醒设置',

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

@@ -11,6 +11,7 @@ import java.math.BigDecimal;
 public class IntegralRuleDetail {
     private Integer integralRuleDetailId;   //'主键id',
     private Integer parentId;               //'父级id',
+    private String ruleType;                //'订单积分计算规则类型(1以订单实付累计 2以订单应付累计)',
     private BigDecimal ruleTerms;           //'规则满足条件(满足多少升,多少元)',
     private Integer greadId;                //等级主键id
     private String gread;                   //'会员等级',

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

@@ -6,7 +6,6 @@
       <id column="id" jdbcType="INTEGER" property="id" />
       <result column="station_id"             jdbcType="INTEGER" property="stationId" />
       <result column="station_name"           jdbcType="VARCHAR" property="stationName" />
-      <result column="rule_type"              jdbcType="VARCHAR" property="ruleType" />
       <result column="term_date_manage"       jdbcType="VARCHAR" property="termDateManage" />
       <result column="empty_date"             jdbcType="DATE"    property="emptyDate" />
       <result column="expiration_reminder"    jdbcType="VARCHAR" property="expirationReminder" />
@@ -22,6 +21,7 @@
   <resultMap id="IntegralRuleDetailResultMap" type="com.platform.yijia.pojo.IntegralRuleDetail">
       <id     column="integralRuleDetailId"   jdbcType="INTEGER" property="integralRuleDetailId" />
       <result column="parent_id"              jdbcType="INTEGER" property="parentId"/>
+      <result column="rule_type"              jdbcType="VARCHAR" property="ruleType" />
       <result column="rule_terms"             jdbcType="DECIMAL" property="ruleTerms" />
       <result column="gread_id"               jdbcType="INTEGER" property="greadId"/>
       <result column="gread"                  jdbcType="VARCHAR" property="gread" />
@@ -36,7 +36,6 @@
         T1.id,
         T1.station_id,
         T1.station_name,
-        T1.rule_type,
         T1.term_date_manage,
         T1.empty_date,
         T1.expiration_reminder,
@@ -46,6 +45,7 @@
         T1.integral_proportion,
         T1.integral_deduction_oil,
         T2.id                           AS      integralRuleDetailId,
+        T2.rule_type,
         T2.rule_terms,
         T2.parent_id,
         T2.gread_id,

+ 29 - 2
YijiaRestful/src/test/java/com/palatform/yijia/YijiaApplicationTests.java

@@ -2,13 +2,40 @@ package com.palatform.yijia;
 import com.platform.yijia.utils.weixinapp.WxPushUtil;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
 
+import javax.swing.plaf.IconUIResource;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
 class YijiaApplicationTests {
 
-//    public static void main(String[] args) {
+    public static void main(String[] args) {
+        boolean b= false;
+        for (int i=0; i<=10; i++){
+            switch (i){
+                case 1:
+                    break;
+                case 3:
+                    System.out.println("3333333");
+                    b=true;
+                    break;
+                case 4:
+                    System.out.println("4444444");
+                    break;
+
+            }
+            if(b){
+                break;
+            }
+
+        }
+
+
+
+
+
+
+
 //        WxPushUtil wxPushUtil = new WxPushUtil();
 //        String appId ="wxc8189d3b3a7283e0";
 //        String appSecret ="3f18fc7e4b02de2f8a14f55b55ab6245";
@@ -23,6 +50,6 @@ class YijiaApplicationTests {
 //        wxMpTemplate.add(new WxMpTemplateData("keyword5", "2014120900189", "#0000CD"));
 //        wxMpTemplate.add(new WxMpTemplateData("remark", "欢迎您再次光临!", "#0000CD"));
 //        wxPushUtil.push(appId, appSecret, templateId, openId, wxMpTemplate);
-//    }
+    }
 
 }