Browse Source

电子卡模块修改

jk-GitHub-coder 4 năm trước cách đây
mục cha
commit
e21c6f8ac2

+ 1 - 2
YijiaRestful/src/main/java/com/platform/yijia/controller/AppUserInfoController.java

@@ -477,7 +477,6 @@ public class AppUserInfoController {
             }
 
             appUserInfo.setStationId(request.getStationId());
-            appUserInfo.setRegisteDate(new Date());
 
             customerPoints.setCreateTime(new Date());
             customerPoints.setUnionId(request.getUnionId());
@@ -488,7 +487,6 @@ public class AppUserInfoController {
             customerPoints.setStationId(request.getStationId());
             customerPoints.setStationName(request.getStationName());
 
-            customerElectronicCard.setCreateTime(new Date());
             customerElectronicCard.setStationId(request.getStationId());
             customerElectronicCard.setStationName(request.getStationName());
 
@@ -651,6 +649,7 @@ public class AppUserInfoController {
                     String customerNo = request.getStationId() + currentTime;
                     customerElectronicCard.setCustomerNo(customerNo);
                     customerElectronicCard.setAmt(new BigDecimal(0));
+                    customerElectronicCard.setCreateTime(new Date());
                     electronicMembershipCardService.insetElectronicCard(customerElectronicCard);
                 }
             }

+ 28 - 14
YijiaRestful/src/main/java/com/platform/yijia/controller/ElectronicMembershipCardController.java

@@ -98,14 +98,27 @@ public class ElectronicMembershipCardController {
             StationInfo stationInfo = new StationInfo();
             stationInfo.setStationId(stationId);
             StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
+            List<CustomerElectronicCard> electronicCardList = new ArrayList<>();
             if(stationInfos.getCardEnabledFlag().equals("1")){
                 CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
                 customerElectronicCard.setStationId(stationId);
                 customerElectronicCard.setUnionId(unionId);
-                List<CustomerElectronicCard> electronicCardList = electronicMembershipCardService.getElectronicCardList(customerElectronicCard);
+
+                CustomerCardSetting customerCardSetting = new CustomerCardSetting();
+                customerCardSetting.setStationId(stationId);
+                if(stationInfos.getCardRuleFlag().equals("1")){ //card_rule_flag 是否共享积分规则
+                    customerCardSetting.setStationId(stationInfos.getGroupId());
+                }
+                List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
+                if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
+                    String cardOilsType = cardRechargeSettingList.get(0).getCardOilsType();
+                    String[] split = cardOilsType.split(",");
+                    customerElectronicCard.setCardOilsTypeArray(split);
+                }
+                electronicCardList = electronicMembershipCardService.getElectronicCardListBycardOilsTypeArray(customerElectronicCard);
                 resultData = ResultData.success(electronicCardList);
             }else {
-                resultData = ResultData.error(CodeMsg.NO_CARDENABLEFLAG);
+                resultData = ResultData.success(electronicCardList);
             }
         }else {
             resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
@@ -241,7 +254,7 @@ public class ElectronicMembershipCardController {
                 customerCardUseRecord.setUnionId(unionId);
                 customerCardUseRecord.setStationId(stationId);
                 customerCardUseRecord.setCardOilsType(cardOilsType);
-                customerCardUseRecord.setStationName(stationName);
+                //customerCardUseRecord.setStationName(stationName);
                 customerCardUseRecord.setCustomerName(customerName);
                 customerCardUseRecord.setUsageType("+");
                 //customerCardUseRecord.setPayType(payType);      //1表示微信
@@ -312,6 +325,7 @@ public class ElectronicMembershipCardController {
                 CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
                 Oil oil = new Oil();
                 oil.setOilName(oilName);
+                oil.setDictType("oil_name");
                 Oil oilInfo = sysDictDataService.selectOilType(oil);
                 String cardOilsType =oilInfo.getOilsType();
                 customerElectronicCard.setCardOilsType(cardOilsType);
@@ -784,14 +798,13 @@ public class ElectronicMembershipCardController {
             String openId = rechargeBalance.getOpenId();    //公众号的openId
             Integer stationId = rechargeBalance.getStationId();
             String userType = rechargeBalance.getUserType();
-            //String subject = rechargeBalance.getSubject();
             String orderNo = rechargeBalance.getOrderNo();
 
             CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord();
             customerCardUseRecord.setOrderNo(orderNo);
             CustomerCardUseRecord cardRecordByOrderNo = electronicMembershipCardService.getCardRecordByOrderNo(customerCardUseRecord);
             if(cardRecordByOrderNo !=null ){
-                if(cardRecordByOrderNo.getStatus() !=null && customerCardUseRecord.getStatus().equals("0")){
+                if(cardRecordByOrderNo.getStatus() !=null && cardRecordByOrderNo.getStatus().equals("0")){
                     //将业务参数存放在 JSON 对象中
                     JSONObject reqData = new JSONObject();
                     Map<String, String> resultMap = stationService.getStationAppIdAndAppSecret(stationId);
@@ -1068,11 +1081,11 @@ public class ElectronicMembershipCardController {
                     //更新充值记录的状态和余额
                     electronicMembershipCardService.updateCardRecordStatusByOrderNo(customerCardUseRecord);
                     logger.info("===========客户电子会员卡充值成功已到账====");
-                    logger.info("===========开始微信公众号推送消息功能:");
-                    String stationName = electronicCardInfo.getStationName();
-                    String blogOpenid = electronicCardInfo.getBlogOpenid();
-                    Integer stationId = electronicCardInfo.getStationId();      //油站ID
-                    String customerName = electronicCardInfo.getCustomerName(); //客户名称
+                    logger.info("===========开始微信公众号电子卡推送消息功能:");
+                    String stationName = customerCardUseRecordInfo.getStationName();
+                    String blogOpenid = customerCardUseRecordInfo.getBlogOpenid();
+                    Integer stationId = customerCardUseRecordInfo.getStationId();      //油站ID
+                    String customerName = customerCardUseRecordInfo.getCustomerName(); //客户名称
                     BigDecimal balance = customerElectronicCard.getAmt();   //当前余额
                     String customerNo = electronicCardInfo.getCustomerNo();     //电子卡号
                     //获取要推送充值成功模板的ID
@@ -1086,8 +1099,9 @@ public class ElectronicMembershipCardController {
                         List<WxMpTemplateData> wxMpTemplate = new ArrayList<>();
                         Oil oil = new Oil();
                         oil.setOilsType(customerCardUseRecordInfo.getCardOilsType());
+                        oil.setDictType("oil");
                         String cardName =sysDictDataService.selectOilType(oil).getOilName();
-                        wxMpTemplate.add(new WxMpTemplateData("first","尊敬的"+customerName+",您好:\n" + "您在"+stationName+"的"+cardName+"电子会员卡充值成功信息如下"));
+                        wxMpTemplate.add(new WxMpTemplateData("first","尊敬的"+customerName+",您好:\n" + "您在"+stationName+"的"+cardName+"电子卡充值成功信息如下"));
                         wxMpTemplate.add(new WxMpTemplateData("keyword1", customerNo));
                         wxMpTemplate.add(new WxMpTemplateData("keyword2", amt + " 元"));
                         wxMpTemplate.add(new WxMpTemplateData("keyword3", presentAmt.toString()+ " 元"));
@@ -1099,10 +1113,10 @@ public class ElectronicMembershipCardController {
                         if(m !=null && m.containsKey("gzhAppId") && m.containsKey("gzhAppSecret")){
                             String gzhAppId = m.get("gzhAppId");
                             String gzhAppSecret = m.get("gzhAppSecret");
-                            if(electronicCardInfo.getBlogOpenid() !=null){
+                            if(customerCardUseRecordInfo.getBlogOpenid() !=null){
                                 wxPushUtil.push(gzhAppId, gzhAppSecret, gzhNewsTemplateInfo.getTemplateId(), blogOpenid, wxMpTemplate);
-                                logger.info("电子会员卡公众号消息推送成功,推送人:"+ blogOpenid);
-                                logger.info("===================================本次充值流程结束===========================================");
+                                logger.info("结束微信公众号电子会员卡消息推送成功,推送人:"+ blogOpenid);
+                                logger.info("===================================本次电子卡充值流程结束===========================================");
                             }
                         }
                     }

+ 80 - 39
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -92,6 +92,7 @@ public class PayOrderController {
                 //获取该油品所属哪一类
                 Oil oil = new Oil();
                 oil.setOilName(oilName);
+                oil.setDictType("oil_name");
                 Oil oilInfo = sysDictDataService.selectOilType(oil);
                 payOrder.setOilType(oilInfo.getOilsType());     //油品类型
                 String orderType = oilInfo.getOilsType();                          //获取订单类型
@@ -131,7 +132,7 @@ public class PayOrderController {
                 if(orderType.equals("3")){                                                  //订单类型是油品时计算
                     payOrder.setAmt(Double.valueOf(payOrderRequest.getReceivableAmt()));        //非油品金额
                     payOrder.setDiscountAmt(Double.valueOf(0));                                 //优惠金额
-                    payOrder.setOilPirce(payOrderRequest.getReceivableAmt().toString());        //非油品价格
+                    payOrder.setOilPirce(payOrderRequest.getReceivableAmt());        //非油品价格
                     payOrder.setOrderLiters("0");
                     resultMap.put("discountAmt", "0");                                          //优惠价格
                     resultMap.put("amt", payOrderRequest.getReceivableAmt());                   //实收价格
@@ -154,6 +155,7 @@ public class PayOrderController {
                     resultMap.put("oilLiters", payOrderResultInfo.getOilLiters());
                     resultMap.put("discountPrice", payOrderResultInfo.getDiscountPrice());
                     resultMap.put("amt_dzk", payOrderResultInfo.getDzkAmt());
+                    resultMap.put("discountAmt_dzk", payOrderResultInfo.getDzkDiscountAmt());   //电子卡优惠金额
                     resultMap.put("balance", payOrderResultInfo.getBalance());               //电子卡余额
                     resultMap.put("cardOilsType", payOrderResultInfo.getCardOilsType());     //电子卡类型1.汽油; 2.柴油
                     resultMap.put("ordNo", ordNo);
@@ -171,7 +173,6 @@ public class PayOrderController {
         return gson.toJson(resultData);
     }
 
-
     //根据营销方案计算订单金额
     public PayOrderResultInfo calculateAmt(PayOrderRequest payOrderRequest){
         PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
@@ -215,21 +216,29 @@ public class PayOrderController {
         return  payOrderResultInfo;
     }
 
-    //计算直降
+    //计算独立直降
     public PayOrderResultInfo calculateZhiJiangDiscount(Map<String ,Object> params){
         BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString());    //油品价格
         BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString());   //应收金额
         BigDecimal oilLiters = new BigDecimal("0.00");  //加油升数
-        BigDecimal discountAmt = new BigDecimal(0);  //优惠金额
+        BigDecimal discountAmt = new BigDecimal(0);  //营销方案优惠金额
         BigDecimal amt = new BigDecimal(0);
         BigDecimal discountPrice = oilPrice;
         BigDecimal gradeDiscountAmt = new BigDecimal(0);    //等级优惠金额
+        BigDecimal dzkGradeDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需等级优惠金额值
+        BigDecimal dzkDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需营销优惠金额值
+
         //加油升数
         oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
         if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
             oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
         }
-        PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
+        PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();   //计算结果存放值
+        //计算等级优惠
+        PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
+        gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
+        dzkGradeDiscountAmt = gradeDiscountAmt; //同时给电子卡赋值等级优惠金额
+
         params.put("discountPlanType", "3");
         List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
         if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
@@ -250,21 +259,20 @@ public class PayOrderController {
                     }
                     break;
             }
-            //计算等级优惠
-            PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
-            gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
+            dzkDiscountAmt = discountAmt;       //赋值电子卡优惠金额
             String vipDiscountyPlus = customerMarkertPlanList.get(0).get("vipDiscountyPlus").toString();
-            if(!vipDiscountyPlus.equals("1")){
-                //如果不叠加等级优惠 则设置等级优惠赋值为0
-                gradeDiscountAmt = new BigDecimal(0);
+            //该营销方案是否叠加等级优惠
+            if(vipDiscountyPlus.equals("1")){
+                //如果叠加等级优惠
+                discountAmt = discountAmt.add(gradeDiscountAmt);
             }
-            discountAmt = discountAmt.add(gradeDiscountAmt);
         }
         amt = receivableAmt.subtract(discountAmt);  //应收金额
         amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
         discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);  //优惠价格
         payOrderResultInfo.setAmt(amt.toString());
         payOrderResultInfo.setDiscountAmt(discountAmt.toString());
+        payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
         payOrderResultInfo.setDiscountPrice(discountPrice.toString());
         payOrderResultInfo.setOilLiters(oilLiters.toString());
         payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
@@ -281,23 +289,30 @@ public class PayOrderController {
                 String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //等候否叠加营销方案
                 if(isMarket.equals("1")){
                     if(isGradeSetting.equals("1")){
-                        BigDecimal dzkAmt = receivableAmt.subtract(discountAmt.subtract(gradeDiscountAmt));
-                        dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
+                        //都叠加 电子卡支付金额 = 应收金额 - 营销优惠金额 - 等级优惠金额
+                        BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
+                        dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;     //如果为负数,则默认设置0.01元
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
+                        BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡总优惠金额
+                        payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
                     }else {
-                        //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
-                        BigDecimal dzkAmt = receivableAmt.subtract(discountAmt);
+                        //叠加营销方案不叠加等级优惠: 电子卡支付金额 =实收金额-营销优惠金额
+                        BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
+                        payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
                     }
                 }else {
                     if(isGradeSetting.equals("1")){
-                        //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
-                        BigDecimal dzkAmt = receivableAmt.subtract(gradeDiscountAmt);
+                        //不叠加营销方案叠加等级优惠:电子卡支付金额 =应收金额-等级优惠金额
+                        BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
+                        payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
                     }else {
+                        //都不叠加: 电子卡支付金额 = 应收金额
                         payOrderResultInfo.setDzkAmt(receivableAmt.toString());
+                        payOrderResultInfo.setDzkDiscountAmt("0");
                     }
                 }
             }
@@ -319,12 +334,20 @@ public class PayOrderController {
         BigDecimal amt = new BigDecimal(0);
         BigDecimal discountPrice = oilPrice;
         BigDecimal gradeDiscountAmt = new BigDecimal(0);    //等级优惠金额
+        BigDecimal dzkGradeDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需等级优惠金额值
+        BigDecimal dzkDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需营销优惠金额值
         //加油升数
         oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
         if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
             oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
         }
         PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
+
+        //计算等级优惠
+        PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
+        gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
+        dzkGradeDiscountAmt = gradeDiscountAmt;     //同时给电子卡赋值等级优惠金额
+
         params.put("discountPlanType", "2");
         List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
         if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
@@ -333,21 +356,19 @@ public class PayOrderController {
             if(receivableAmt.compareTo(discountAmt_b) == 1 || receivableAmt.compareTo(discountAmt_b) == 0){
                 discountAmt = gasoilDiscountAmt_b;
             }
-            //计算等级优惠
-            PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
-            gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
+            dzkDiscountAmt = discountAmt;
             String vipDiscountyPlus = customerMarkertPlanList.get(0).get("vipDiscountyPlus").toString();
-            if(!vipDiscountyPlus.equals("1")){
-                //如果叠加等级优惠 则设置等级优惠赋值为0
-                gradeDiscountAmt = new BigDecimal(0);
+            if(vipDiscountyPlus.equals("1")){
+                //如果叠加等级优惠
+                discountAmt = discountAmt.add(gradeDiscountAmt);
             }
-            discountAmt = discountAmt.add(gradeDiscountAmt);
         }
         amt = receivableAmt.subtract(discountAmt);  //应收金额
         amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
         discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);  //优惠价格
         payOrderResultInfo.setAmt(amt.toString());
         payOrderResultInfo.setDiscountAmt(discountAmt.toString());
+        payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
         payOrderResultInfo.setDiscountPrice(discountPrice.toString());
         payOrderResultInfo.setOilLiters(oilLiters.toString());
         payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
@@ -364,23 +385,28 @@ public class PayOrderController {
                 String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //等候否叠加营销方案
                 if(isMarket.equals("1")){
                     if(isGradeSetting.equals("1")){
-                        BigDecimal dzkAmt = receivableAmt.subtract(discountAmt.subtract(gradeDiscountAmt));
+                        BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
+                        BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
+                        payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
                     }else {
                         //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
-                        BigDecimal dzkAmt = receivableAmt.subtract(discountAmt);
+                        BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
+                        payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
                     }
                 }else {
                     if(isGradeSetting.equals("1")){
                         //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
-                        BigDecimal dzkAmt = receivableAmt.subtract(gradeDiscountAmt);
+                        BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
+                        payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
                     }else {
                         payOrderResultInfo.setDzkAmt(receivableAmt.toString());
+                        payOrderResultInfo.setDzkDiscountAmt("0");
                     }
                 }
             }
@@ -403,12 +429,19 @@ public class PayOrderController {
         BigDecimal amt = new BigDecimal(0);
         BigDecimal discountPrice = oilPrice;
         BigDecimal gradeDiscountAmt = new BigDecimal(0);    //等级优惠金额
+        BigDecimal dzkGradeDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需等级优惠金额值
+        BigDecimal dzkDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需营销优惠金额值
+
         //加油升数
         oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
         if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
             oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
         }
         PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
+        //计算等级优惠
+        PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
+        gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
+        dzkGradeDiscountAmt = gradeDiscountAmt;
         params.put("discountPlanType", "1");
         List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
         if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
@@ -418,23 +451,20 @@ public class PayOrderController {
                 discountAmt = receivableAmt.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(gasoilDiscountAmt_b);  //优惠金额
                 discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
             }
-            //计算等级优惠
-            PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
-            gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
+            dzkDiscountAmt = discountAmt;
             //是否共享会员等级优惠叠加: 1 代表是; 2 代表否;
             String vipDiscountyPlus = customerMarkertPlanList.get(0).get("vipDiscountyPlus").toString();
-            if(!vipDiscountyPlus.equals("1")){
-                //如果叠加等级优惠 则设置等级优惠赋值为0
-                gradeDiscountAmt = new BigDecimal(0);
+            if(vipDiscountyPlus.equals("1")){
+                //如果叠加等级优惠
+                discountAmt = discountAmt.add(gradeDiscountAmt);
             }
-            discountAmt = discountAmt.add(gradeDiscountAmt);
-
         }
         amt = receivableAmt.subtract(discountAmt);  //应收金额
         amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
         discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);  //优惠价格
         payOrderResultInfo.setAmt(amt.toString());
         payOrderResultInfo.setDiscountAmt(discountAmt.toString());
+        payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
         payOrderResultInfo.setDiscountPrice(discountPrice.toString());
         payOrderResultInfo.setOilLiters(oilLiters.toString());
         payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
@@ -452,23 +482,28 @@ public class PayOrderController {
                 if(isMarket.equals("1")){
                     if(isGradeSetting.equals("1")){
                         //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠-等级优惠金额
-                        BigDecimal dzkAmt = receivableAmt.subtract(discountAmt.subtract(gradeDiscountAmt));
+                        BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
+                        BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
+                        payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
                     }else {
                         //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
-                        BigDecimal dzkAmt = receivableAmt.subtract(discountAmt);
+                        BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
+                        payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
                     }
                 }else {
                     if(isGradeSetting.equals("1")){
                         //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
-                        BigDecimal dzkAmt = receivableAmt.subtract(gradeDiscountAmt);
+                        BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
+                        payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
                     }else {
                         payOrderResultInfo.setDzkAmt(receivableAmt.toString());
+                        payOrderResultInfo.setDzkDiscountAmt("0");
                     }
                 }
             }
@@ -489,6 +524,7 @@ public class PayOrderController {
         BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString());   //应收金额
         BigDecimal oilLiters = new BigDecimal("0.00");  //加油升数
         BigDecimal discountAmt = new BigDecimal(0);  //优惠金额
+        BigDecimal dzkDiscountAmt = discountAmt;  //优惠金额
         BigDecimal amt = new BigDecimal(0);
         BigDecimal discountPrice = oilPrice;
         PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
@@ -529,14 +565,18 @@ public class PayOrderController {
         discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);  //优惠价格
         payOrderResultInfo.setAmt(amt.toString());
         payOrderResultInfo.setDiscountAmt(discountAmt.toString());
+        payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
         payOrderResultInfo.setDiscountPrice(discountPrice.toString());
         payOrderResultInfo.setOilLiters(oilLiters.toString());
         payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
         payOrderResultInfo.setOilPrice(oilPrice.toString());
         payOrderResultInfo.setDzkAmt(amt.toString());
         payOrderResultInfo.setCardEnabledFlag(params.get("cardEnabledFlag").toString());
+        //电子卡是否开启
         logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
         if(params.get("cardEnabledFlag").toString().equals("1")){
+            payOrderResultInfo.setDzkAmt(receivableAmt.toString());
+            payOrderResultInfo.setDzkDiscountAmt("0");
             CustomerCardSetting customerCardSetting = new CustomerCardSetting();
             customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
             List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
@@ -544,6 +584,7 @@ public class PayOrderController {
                 String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting();
                 if(isGradeSetting.equals("1")){
                     payOrderResultInfo.setDzkAmt(amt.toString());
+                    payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
                 }
             }
             //查询客户余额和卡的类型

+ 4 - 0
YijiaRestful/src/main/java/com/platform/yijia/dao/ElectronicMembershipCardMapper.java

@@ -9,6 +9,10 @@ import java.util.List;
 
 public interface ElectronicMembershipCardMapper {
 
+
+    //获取用户储蓄卡列表
+    List<CustomerElectronicCard> getElectronicCardListBycardOilsTypeArray(CustomerElectronicCard customerElectronicCard);
+
     //获取用户储蓄卡列表
     List<CustomerElectronicCard> getElectronicCardList(CustomerElectronicCard customerElectronicCard);
 

+ 2 - 0
YijiaRestful/src/main/java/com/platform/yijia/pojo/CustomerCardUseRecord.java

@@ -12,6 +12,8 @@ import java.util.Date;
 public class CustomerCardUseRecord {
     private Integer id;
     private String orderNo;                 //'充值订单号',
+    private String blogOpenid;                 //'微信用户公众号openId',
+    private String minaOpenid;                 //'微信用户小程序openId',
     private String unionId;                 //'微信用户唯一标识',
     private String aliId;                   // 支付宝用户ID
     private String customerNo;              // 会员ID

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

@@ -23,4 +23,5 @@ public class CustomerElectronicCard {
     private String stationName;     //油站
     private Date createTime;        //创建时间
     private Date recentlyTime;      //最近使用时间
+    private String[] cardOilsTypeArray;     //参数数组
 }

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

@@ -6,4 +6,5 @@ import lombok.Data;
 public class Oil {
     private String oilsType;
     private String oilName;
+    private String dictType;    //数据字典类型
 }

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

@@ -10,6 +10,7 @@ public class PayOrderResultInfo {
 
     private String ordNo;           //优惠金额
     private String discountAmt;     //优惠金额
+    private String dzkDiscountAmt;     //优惠金额
     private String receivableAmt;   //应收金额
     private String amt;             //实收金额
     private String oilLiters;       //加油金额

+ 4 - 0
YijiaRestful/src/main/java/com/platform/yijia/service/ElectronicMembershipCardService.java

@@ -8,6 +8,10 @@ import com.platform.yijia.pojo.CustomerElectronicCard;
 import java.util.List;
 
 public interface ElectronicMembershipCardService {
+
+
+    //获取用户储蓄卡列表
+    List<CustomerElectronicCard> getElectronicCardListBycardOilsTypeArray(CustomerElectronicCard customerElectronicCard);
     //获取用户储蓄卡列表
     List<CustomerElectronicCard> getElectronicCardList(CustomerElectronicCard customerElectronicCard);
 

+ 6 - 0
YijiaRestful/src/main/java/com/platform/yijia/service/impl/ElectronicMembershipCardServiceImpl.java

@@ -74,6 +74,12 @@ public class ElectronicMembershipCardServiceImpl implements ElectronicMembership
 
     //获取用户储蓄卡列表
     @Override
+    public List<CustomerElectronicCard> getElectronicCardListBycardOilsTypeArray(CustomerElectronicCard customerElectronicCard) {
+        return electronicMembershipCardMapper.getElectronicCardListBycardOilsTypeArray(customerElectronicCard);
+    }
+
+    //获取用户储蓄卡列表
+    @Override
     public List<CustomerElectronicCard> getElectronicCardList(CustomerElectronicCard customerElectronicCard) {
         return electronicMembershipCardMapper.getElectronicCardList(customerElectronicCard);
     }

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

@@ -22,6 +22,8 @@
     <resultMap id="CardRecordBaseResultMap" type="com.platform.yijia.pojo.CustomerCardUseRecord">
         <id     column="id"                    jdbcType="INTEGER"   property="id" />
         <result column="order_no"              jdbcType="VARCHAR"   property="orderNo" />
+        <result column="blog_openid"           jdbcType="VARCHAR"   property="blogOpenid" />
+        <result column="mina_openid"           jdbcType="VARCHAR"   property="minaOpenid" />
         <result column="union_id"              jdbcType="VARCHAR"   property="unionId" />
         <result column="ali_id"                jdbcType="VARCHAR"   property="aliId" />
         <result column="customer_no"           jdbcType="VARCHAR"   property="customerNo" />
@@ -35,6 +37,7 @@
         <result column="balance"               jdbcType="DECIMAL"   property="balance" />
         <result column="create_time"           jdbcType="TIMESTAMP" property="createTime" />
         <result column="station_id"            jdbcType="INTEGER"   property="stationId" />
+        <result column="station_name"          jdbcType="INTEGER"   property="stationName" />
         <result column="status"                jdbcType="VARCHAR"   property="status" />
         <result column="oilsCardName"          jdbcType="VARCHAR"   property="oilsCardName" />
     </resultMap>
@@ -119,6 +122,8 @@
             T1.union_id,
             T1.ali_id,
             T2.blog_nick_name           AS customer_name,
+            T2.blog_openid,
+            T2.mina_openid,
             T2.mobile_phone,
             T1.usage_type,
             T1.pay_type,
@@ -145,13 +150,16 @@
     </select>
 
     <!--根据订单号更新用户充值记录的状态-->
-    <update id="updateCardRecordStatusByOrderNo" parameterType="com.platform.yijia.pojo.CustomerElectronicCard">
+    <update id="updateCardRecordStatusByOrderNo" parameterType="com.platform.yijia.pojo.CustomerCardUseRecord">
         UPDATE
             customer_card_use_record
         <set>
             <if test="status !=null">
                 status = #{status},
             </if>
+            <if test="payType !=null">
+                pay_type = #{payType},
+            </if>
             <if test="balance !=null">
                 balance = #{balance}
             </if>
@@ -444,6 +452,37 @@
                 AND usage_type = #{usageType}
             </if>
         </where>
+        ORDER BY create_time DESC
+    </select>
+
+    <!--  根据设置的卡规则来查询用户所拥有的储蓄卡    -->
+    <select id="getElectronicCardListBycardOilsTypeArray" resultMap="CardBaseResultMap" parameterType="com.platform.yijia.pojo.CustomerElectronicCard">
+        SELECT
+            id,
+            union_id,
+            customer_no,
+            customer_name,
+            amt,
+            card_oils_type,
+            station_id,
+            create_time,
+            recently_time
+        FROM   customer_electronic_card
+        <where>
+            <if test="stationId !=null and stationId !=''">
+                station_id = #{stationId}
+            </if>
+            <if test="unionId !=null and unionId !=''">
+                AND union_id = #{unionId}
+            </if>
+            <if test="cardOilsTypeArray !=null and cardOilsTypeArray !=''">
+                AND card_oils_type IN
+                <foreach collection="cardOilsTypeArray" item="item" index="index" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        ORDER BY (CASE WHEN card_oils_type = 3 THEN 100 ELSE 0 END), card_oils_type
     </select>
 
 

+ 4 - 2
YijiaRestful/src/main/resources/mapper/SysDictDataMapper.xml

@@ -22,7 +22,9 @@
         FROM
             sys_dict_data
         <where>
-            dict_type ="oil_name"
+            <if test="dictType !=null and dictType !=''">
+                dict_type =#{dictType}
+            </if>
             <if test="oilName !=null and oilName !=''">
                 AND dict_label = #{oilName}
             </if>
@@ -30,7 +32,7 @@
                 AND dict_value = #{oilsType}
             </if>
         </where>
-
     </select>
 
+
 </mapper>