JK 3 роки тому
батько
коміт
da444de500

+ 124 - 57
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -131,34 +131,7 @@ public class PayOrderController {
                     payOrderRequest.setCardOilsType(oilInfo.getOilsType());                         //电子卡类型;注:用于获取客户电子卡参数查询
                     payOrder.setOilName(oilName);                                                   //油品名称
 
-                    //该油站是否开启优惠券功能
-                    if(stationInfos.getCouponEnabledFlag() == null){
-                        resultMap.put("couponEnabledFlag", "0");
-                    }else {
-                        resultMap.put("couponEnabledFlag", stationInfos.getCouponEnabledFlag());
-                    }
-                    //获取用户的优惠券
-                    if(stationInfos.getCouponEnabledFlag() !=null && stationInfos.getCouponEnabledFlag().equals("1")){
-
-                        Integer stationId = payOrderRequest.getStationId();
-                        //集团下
-                        if(stationInfos.getCouponFlag() !=null && stationInfos.getCouponFlag().equals("1")){
-                            stationId=stationInfos.getGroupId();
-                        }
-                        //设置了扫码后支付成功后的领取
-                        String couponIssueId = "";                              //领取方式ID
-                        resultMap.put("couponIssueId", couponIssueId);
-                        couponIssueId = this.getCouponIssue(stationId).get(0).getCouponIssueId();
-                        if(StringUtils.isNotBlank(couponIssueId)){
-                            resultMap.put("couponIssueId", couponIssueId);
-                        }
-                        List<UserCoupon> userCouponsList = new ArrayList<>();       //用户的优惠券
-                        resultMap.put("userCouponsList", userCouponsList);
-                        userCouponsList = this.getUserCoupon(appUserInfos.getUnionId(), stationId);
-                        if(userCouponsList !=null && userCouponsList.size()>0){
-                            resultMap.put("userCouponsList", userCouponsList);
-                        }
-                    }
+                    PayOrderResultInfo payOrderResultInfo = this.calculateAmt(payOrderRequest); //计算订单金额 价格 加油升数 等等
                     if(oilsType.equals("3")){                                                       //订单类型是油品时计算
                         payOrder.setOrderType("2");
                         payOrder.setAmt(Double.valueOf(payOrderRequest.getReceivableAmt()));        //非油品金额
@@ -175,7 +148,7 @@ public class PayOrderController {
                         logger.info("返回前端的结果:" +resultMap.toString());
                         //payOrderMapper.insertSelective(payOrder);
                     }else {
-                        PayOrderResultInfo payOrderResultInfo = this.calculateAmt(payOrderRequest); //计算订单金额 价格 加油升数 等等
+                        //PayOrderResultInfo payOrderResultInfo = this.calculateAmt(payOrderRequest); //计算订单金额 价格 加油升数 等等
                         payOrder.setOilPirce(payOrderResultInfo.getOilPrice());
                         payOrder.setOrderLiters(payOrderResultInfo.getOilLiters());
                         payOrder.setDiscountAmt(Double.valueOf(payOrderResultInfo.getDiscountAmt()));
@@ -214,6 +187,37 @@ public class PayOrderController {
                         //payOrderMapper.insertSelective(payOrder);
                     }
 
+                    //该油站是否开启优惠券功能
+                    if(stationInfos.getCouponEnabledFlag() == null){
+                        resultMap.put("couponEnabledFlag", "0");
+                    }else {
+                        resultMap.put("couponEnabledFlag", stationInfos.getCouponEnabledFlag());
+                    }
+                    //获取用户的优惠券
+                    if(stationInfos.getCouponEnabledFlag() !=null && stationInfos.getCouponEnabledFlag().equals("1")){
+
+                        Integer stationId = payOrderRequest.getStationId();
+                        //集团下
+                        if(stationInfos.getCouponFlag() !=null && stationInfos.getCouponFlag().equals("1")){
+                            stationId=stationInfos.getGroupId();
+                        }
+                        //设置了扫码后支付成功后的领取
+                        String couponIssueId = "";                              //领取方式ID
+                        resultMap.put("couponIssueId", couponIssueId);
+                        couponIssueId = this.getCouponIssue(stationId).get(0).getCouponIssueId();
+                        if(StringUtils.isNotBlank(couponIssueId)){
+                            resultMap.put("couponIssueId", couponIssueId);
+                        }
+                        List<UserCoupon> userCouponsList = new ArrayList<>();       //用户的优惠券
+                        resultMap.put("userCouponsList", userCouponsList);
+                        //userCouponsList = this.getUserCoupon(appUserInfos.getUnionId(), stationId);
+                        userCouponsList = payOrderResultInfo.getUserCouponsList();
+                        if(userCouponsList !=null && userCouponsList.size()>0){
+                            resultMap.put("userCouponsList", userCouponsList);
+                        }
+                    }
+
+
                     //根据油站和油枪获取加油员
                     if (payOrderRequest.getPersonnelId() != null && payOrderRequest.getPersonnelId() != "" && !payOrderRequest.getPersonnelId().equals("undefined")) {
                         //表示为一人一码:一个加油员一个码
@@ -373,18 +377,47 @@ public class PayOrderController {
                     switch (discountSetting){
                         case "0":   //不执营销方案时 计算等级优惠
                             payOrderResultInfo = this.calculateGradeDiscount(params);
+                            payOrderResultInfo.setOilName(params.get("oilName").toString());
+                            payOrderResultInfo.setUnionId(params.get("unionId").toString());
+                            payOrderResultInfo.setAllDiscountType("1");
+                            payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
+                            payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
                             break;
                         case "1":    //满减方案
                             payOrderResultInfo = this.calculateManJianDiscount(params);
+
+                            payOrderResultInfo.setOilName(params.get("oilName").toString());
+                            payOrderResultInfo.setUnionId(params.get("unionId").toString());
+                            payOrderResultInfo.setAllDiscountType("2");
+                            payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
+                            payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
                             break;
                         case "2":    //立减方案
                             payOrderResultInfo = this.calculateLiJianDiscount(params);
+
+                            payOrderResultInfo.setOilName(params.get("oilName").toString());
+                            payOrderResultInfo.setUnionId(params.get("unionId").toString());
+                            payOrderResultInfo.setAllDiscountType("2");
+                            payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
+                            payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
                             break;
                         case "3":    //独立直降
                             payOrderResultInfo = this.calculateZhiJiangDiscount(params);
+
+                            payOrderResultInfo.setOilName(params.get("oilName").toString());
+                            payOrderResultInfo.setUnionId(params.get("unionId").toString());
+                            payOrderResultInfo.setAllDiscountType("2");
+                            payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
+                            payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
                             break;
                         case "4":    //计算阶梯直降
                             payOrderResultInfo = this.calculateJieTiZhiJiangDiscount(params);
+
+                            payOrderResultInfo.setOilName(params.get("oilName").toString());
+                            payOrderResultInfo.setUnionId(params.get("unionId").toString());
+                            payOrderResultInfo.setAllDiscountType("2");
+                            payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
+                            payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
                             break;
                     }
                 }
@@ -792,6 +825,11 @@ public class PayOrderController {
             payOrderResultInfo.setBalance(map.get("balance"));
             payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
+//            payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
+//            payOrderResultInfo.setOilName(params.get("oilName").toString());
+//            payOrderResultInfo.setUnionId(params.get("unionId").toString());
+//            payOrderResultInfo.setAllDiscountType("2");
+//            payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
         }
         return  payOrderResultInfo;
     }
@@ -981,6 +1019,11 @@ public class PayOrderController {
             payOrderResultInfo.setBalance(map.get("balance"));
             payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
+//            payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
+//            payOrderResultInfo.setOilName(params.get("oilName").toString());
+//            payOrderResultInfo.setUnionId(params.get("unionId").toString());
+//            payOrderResultInfo.setAllDiscountType("2");
+//            payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
         }
         return  payOrderResultInfo;
     }
@@ -1115,6 +1158,11 @@ public class PayOrderController {
             payOrderResultInfo.setBalance(map.get("balance"));
             payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
+//            payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
+//            payOrderResultInfo.setOilName(params.get("oilName").toString());
+//            payOrderResultInfo.setUnionId(params.get("unionId").toString());
+//            payOrderResultInfo.setAllDiscountType("2");
+//            payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
         }
         return  payOrderResultInfo;
     }
@@ -1253,6 +1301,11 @@ public class PayOrderController {
             payOrderResultInfo.setBalance(map.get("balance"));
             payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
+//            payOrderResultInfo.setOilName(params.get("oilName").toString());
+//            payOrderResultInfo.setUnionId(params.get("unionId").toString());
+//            payOrderResultInfo.setAllDiscountType("2");
+//            payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
+//            payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
         }
         return payOrderResultInfo;
     }
@@ -1366,6 +1419,11 @@ public class PayOrderController {
             payOrderResultInfo.setBalance(map.get("balance"));
             payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
+//            payOrderResultInfo.setOilName(params.get("oilName").toString());
+//            payOrderResultInfo.setUnionId(params.get("unionId").toString());
+//            payOrderResultInfo.setAllDiscountType("1");
+//            payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
+//            payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
         }
         return  payOrderResultInfo;
     }
@@ -1374,7 +1432,7 @@ public class PayOrderController {
     public List<UserCoupon> getUserCouponAscList(PayOrderResultInfo p){
         Integer stationId = p.getStationId();
         String unionId = p.getUnionId();
-        List<UserCoupon> userCouponsCalAndAscList = new ArrayList<>();
+        List<UserCoupon> userCouponsList = new ArrayList<>();
         StationInfo stationInfo = new StationInfo();
         stationInfo.setStationId(stationId);
         StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
@@ -1389,12 +1447,10 @@ public class PayOrderController {
             userCoupon.setExpireFlag("0");                  // SQL 条件判断 过期标志: 1 代表使用的优惠券已过期查询参数; 0 代表未过期有效的优惠券
             userCoupon.setNoVerificationVerFlag("0");       //SQL 条件判断 查询没有异业券的参数标识: 0代表只有加油券 1代表只有异业券
             userCoupon.setCurrentTime(new Date());
-            List<UserCoupon> userCouponsList = couponService.selectUserCoupons(userCoupon);
+            userCouponsList = couponService.selectUserCoupons(userCoupon);
             //循环计算优惠券金额 并排序
             if(userCouponsList !=null && userCouponsList.size()>0){
                 for (UserCoupon uc: userCouponsList){
-                    //
-                    uc.getCouponThresholdAmt();
                     String status = uc.getStatus();
                     if(status !=null && status.equals("1")){
                         //返回前端使用优惠券后的计算金额计算后
@@ -1416,37 +1472,49 @@ public class PayOrderController {
                         couponReckonAmt.setOilLiters(oilLiters);
                         //优惠券时间类型
                         String availableControl = uc.getAvailableControl();
-                        switch (availableControl){
-                            case "0":
-                                couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
-                                break;
-                            case "1":
-                                boolean activityDay_1 = this.isActivityDay("1", uc.getCycleDays());
-                                if(activityDay_1)
-                                    //指定每周几
-                                    couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
-                                break;
-                            case "2":
-                                boolean activityDay_2 = this.isActivityDay("2", uc.getCycleDays());
-                                if(activityDay_2)
-                                    //指定每月的几号
-                                    couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
-                                break;
-                            case "3":
-                                boolean activityDay_3 = this.isActivityDay("3", uc.getAppointedDays());
-                                if (activityDay_3)
-                                    //指定日
-                                    couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
-                                break;
+                        BigDecimal couponThresholdAmt = uc.getCouponThresholdAmt();
+                        String oilName = p.getOilName();
+                        String oilNames = uc.getOilName();
+                        //判断该油品是否能用该张张优惠券
+                        boolean contains = oilNames.contains(oilName);
+                        if(contains){
+                            BigDecimal receivableAmt = new BigDecimal(p.getReceivableAmt());
+                            //应收金额大于优惠券门槛金额
+                            if(!(receivableAmt.compareTo(couponThresholdAmt) == -1)){
+                                switch (availableControl){
+                                    case "0":
+                                        couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
+                                        break;
+                                    case "1":
+                                        boolean activityDay_1 = this.isActivityDay("1", uc.getCycleDays());
+                                        if(activityDay_1)
+                                            //指定每周几
+                                            couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
+                                        break;
+                                    case "2":
+                                        boolean activityDay_2 = this.isActivityDay("2", uc.getCycleDays());
+                                        if(activityDay_2)
+                                            //指定每月的几号
+                                            couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
+                                        break;
+                                    case "3":
+                                        boolean activityDay_3 = this.isActivityDay("3", uc.getAppointedDays());
+                                        if (activityDay_3)
+                                            //指定日
+                                            couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
+                                        break;
+                                }
+                            }
                         }
                         uc.setCouponReckonAmt(couponReckonAmt);
                     }
                 }
                 //根据支付金额大小进行优惠券排序
+                userCouponsList.sort((((o1, o2) -> o1.getCouponReckonAmt().getAmt().compareTo(o2.getCouponReckonAmt().getAmt()))));
 
             }
         }
-        return userCouponsCalAndAscList;
+        return userCouponsList;
     }
 
     /***
@@ -1485,7 +1553,6 @@ public class PayOrderController {
                         discountAmtNew = discountAmtNew.add(couponAmt);
                         couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
                         couponReckonAmt.setAmt(amtNew.toString());
-
                     }
                 }
                 if(p.getAllDiscountType().equals("2")){

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

@@ -15,6 +15,7 @@ public class PayOrderResultInfo {
     private String gradeDiscountPriceAmt;    //价格优惠金额
     private String receivableAmt;   //应收金额
     private String oilLiters;       //加油金额
+    private String oilName;       //油品名称
 
     private String oilPrice;        //原单价
     private String discountPrice;   //优惠单价