jk-GitHub-coder %!s(int64=4) %!d(string=hai) anos
pai
achega
90534c14b8

+ 6 - 0
YijiaRestful/pom.xml

@@ -21,6 +21,12 @@
 
     <dependencies>
 
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+            <version>1.2.10</version>
+        </dependency>
+
         <!-- spring security 安全认证 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 6 - 4
YijiaRestful/src/main/java/com/platform/yijia/controller/ElectronicMembershipCardController.java

@@ -301,7 +301,7 @@ public class ElectronicMembershipCardController {
                     case "95#":
                         cardOilsType ="1";
                         break;
-                    case "97#":
+                    case "98#":
                         cardOilsType ="1";
                         break;
                     case "0#":
@@ -330,7 +330,7 @@ public class ElectronicMembershipCardController {
                     customerCardUseRecord.setStationName(cardInfo.getStationName());
                     customerCardUseRecord.setStationId(cardInfo.getStationId());
                     customerCardUseRecord.setUsageType("-");
-                    customerCardUseRecord.setCustomerName(payOrder.getConsumer());
+                    customerCardUseRecord.setCustomerName(consumer);
                     customerCardUseRecord.setCreateTime(new Date());
                     balance = cardInfo.getAmt();
                 }
@@ -983,14 +983,16 @@ public class ElectronicMembershipCardController {
     //查询油站电子会员卡(储蓄卡)充值设置规则
     @RequestMapping(value = "/getCardRechargeSettingList", method = RequestMethod.GET)
     @ResponseBody
-    public String getCardRechargeSettingList(@RequestParam Integer stationId){
+    public String getCardRechargeSettingList(@RequestParam Integer stationId, String cardOilsType){
         Gson gson =new Gson();
         //返回结果集
         ResultData resultData = null;
         if(stationId !=null){
             CustomerCardSetting customerCardSetting = new CustomerCardSetting();
             customerCardSetting.setStationId(stationId);
-            //customerCardSetting.setCardOilsType(cardOilsType);
+            if(StringUtils.isNotBlank(cardOilsType)){
+                customerCardSetting.setCardOilsType(cardOilsType);
+            }
             customerCardSetting.setOrderBy("ASC");  //优惠规则升序排序
             List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
             resultData = ResultData.success(cardRechargeSettingList);

+ 69 - 18
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -124,9 +124,60 @@ public class PayOrderController {
                 logger.info("油站是否开启电子会员卡功能: " +stationCardEnabledFlag);
                 //查询油站是否开启电子会员卡功能
                 if(stationCardEnabledFlag.equals("1")){
+
+                    CustomerCardSetting customerCardSetting = new CustomerCardSetting();
+                    customerCardSetting.setStationId(payOrderRequest.getStationId());
+                    List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
+                    if(cardRechargeSettingList !=null && cardRechargeSettingList.size()>0){
+                        String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //是否叠加营销方案
+                        String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting(); //是否叠加等级直降
+
+                        Map<String, Object> paramsMap = new HashMap<>();
+                        paramsMap.put("stationId", payOrderRequest.getStationId());
+                        paramsMap.put("oilName", payOrderRequest.getOilName());
+                        paramsMap.put("receivableAmt", payOrderRequest.getReceivableAmt());
+                        //获取油品价格
+                        StationOilPrice stationOilPrice = new StationOilPrice();
+                        stationOilPrice.setStationId(payOrderRequest.getStationId());
+                        stationOilPrice.setOilName(payOrderRequest.getOilName());
+                        StationOilPrice oilPriceInfo = stationService.getStationOilPrice(stationOilPrice);
+                        String oilPrice = oilPriceInfo.getOilPrice();
+                        paramsMap.put("oilPrice", oilPrice);
+                        paramsMap.put("mobilePhone", appUserInfoList.get(0).getMobilePhone());
+                        paramsMap.put("minaOpenid", appUserInfoList.get(0).getMinaOpenid());
+
+                        if (StringUtils.isNotBlank(isMarket) && isMarket.equals("0")){
+                            if(StringUtils.isNotBlank(isGradeSetting) && isGradeSetting.equals("0")){
+                                //如果营销和等级都设置叠加
+                                resultMap.put("amt_dzk", resultMap.get("amt").toString());
+                            }else {
+                                //如果营销叠加电子卡不叠加:则用总的实际所有的支付金额+等级优惠的金额
+                                Map<String, Object> map = this.calcuteDengJiZhiJiang(paramsMap);
+                                String string = map.get("discountAmt").toString();
+                                BigDecimal amt_dzk = new BigDecimal(resultMap.get("amt").toString()).add(new BigDecimal(string));
+                                resultMap.put("amt_dzk",amt_dzk.doubleValue());
+                            }
+                        }else {
+                            //如果不叠加营销,只叠加等级优惠
+                            if(StringUtils.isNotBlank(isGradeSetting) && isGradeSetting.equals("0")){
+                                Map<String, Object> map = this.calcuteDengJiZhiJiang(paramsMap);
+                                String string = map.get("discountAmt").toString();
+                                BigDecimal amt_dzk = new BigDecimal(payOrderRequest.getReceivableAmt()).subtract(new BigDecimal(string));
+                                resultMap.put("amt_dzk", amt_dzk);
+
+                            }else {
+                                //如果既不叠加营销优惠也不叠加等级优惠
+                                resultMap.put("amt_dzk", payOrderRequest.getReceivableAmt());
+
+                            }
+                        }
+                    }
+
+                    //获取用户电子卡余额
                     Map<String, String> map = this.selectCardBalance(payOrderRequest.getStationId(), payOrderRequest.getOilName(), appUserInfoList.get(0).getUnionId());
                     resultMap.put("balance", map.get("balance"));               //电子卡余额
                     resultMap.put("cardOilsType", map.get("cardOilsType"));     //电子卡类型1.汽油; 2.柴油
+
                 }
             }
             payOrder.setReceivableAmt(payOrderRequest.getReceivableAmt());                //订单应收金额
@@ -139,7 +190,7 @@ public class PayOrderController {
                 case "95#":
                     payOrder.setOilType("2");
                     break;
-                case "97#":
+                case "98#":
                     payOrder.setOilType("2");
                     break;
                 case "0#":
@@ -200,7 +251,7 @@ public class PayOrderController {
             case "95#":
                 cardOilsType ="1";
                 break;
-            case "97#":
+            case "98#":
                 cardOilsType ="1";
                 break;
             case "0#":
@@ -451,7 +502,7 @@ public class PayOrderController {
 
     /*
      * ===========================计算订单金额======================================
-     * 修订时间:2021年4月20日15:31:30
+     * 第一次修订时间:2021年4月20日15:31:30
      * 修订标题:修订优惠计算
      * 修订内容 :
      *    修改为目前只有三种优惠:根据立减、满减、独立直降;
@@ -570,12 +621,11 @@ public class PayOrderController {
                             amt = receivableAmt_b.subtract(discountAmt);   //实收金额
                             oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
                             discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 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);
+                                    amt = receivableAmt_b.subtract(discountAmt);
                                     discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                                     resultMap.put("discountAmt", discountAmt.doubleValue());
                                     resultMap.put("amt", amt.doubleValue());
@@ -594,8 +644,7 @@ public class PayOrderController {
                                 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);
+                                    amt = receivableAmt_b.subtract(discountAmt);
                                     discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                                     resultMap.put("discountAmt", discountAmt.doubleValue());
                                     resultMap.put("amt", amt.doubleValue());
@@ -603,10 +652,11 @@ public class PayOrderController {
                                     resultMap.put("discountPrice", discountPrice.doubleValue());
                                     break;
                                 case "2":
-                                    resultMap.put("discountAmt", discountAmt.doubleValue());
-                                    resultMap.put("amt", amt.doubleValue());
+                                    resultMap.put("discountAmt", 0);
+                                    resultMap.put("amt", receivableAmt.doubleValue());
+                                    oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
                                     resultMap.put("oilLiters", oilLiters.doubleValue());
-                                    resultMap.put("discountPrice", discountPrice.doubleValue());
+                                    resultMap.put("discountPrice", oilPrice);
                                     break;
                             }
                         }
@@ -639,7 +689,7 @@ public class PayOrderController {
                                 case "1":
                                     Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
                                     discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
-                                    amt = amt.subtract(discountAmt);
+                                    amt = receivableAmt_b.subtract(discountAmt);
                                     discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                                     //discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                                     resultMap.put("discountAmt", discountAmt.doubleValue());
@@ -660,7 +710,7 @@ public class PayOrderController {
                                 case "1":
                                     Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
                                     discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
-                                    amt = amt.subtract(discountAmt);
+                                    amt = receivableAmt_b.subtract(discountAmt);
                                     discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                                     //discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                                     resultMap.put("discountAmt", discountAmt.doubleValue());
@@ -669,10 +719,11 @@ public class PayOrderController {
                                     resultMap.put("discountPrice", discountPrice.doubleValue());
                                     break;
                                 case "2":
-                                    resultMap.put("discountAmt", discountAmt.doubleValue());
-                                    resultMap.put("amt", amt.doubleValue());
+                                    resultMap.put("discountAmt", 0);
+                                    resultMap.put("amt", receivableAmt.doubleValue());
+                                    oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
                                     resultMap.put("oilLiters", oilLiters.doubleValue());
-                                    resultMap.put("discountPrice", discountPrice.doubleValue());
+                                    resultMap.put("discountPrice", oilPrice);
                                     break;
                             }
                         }
@@ -709,7 +760,7 @@ public class PayOrderController {
                                     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);
+                                        amt = receivableAmt_b.subtract(discountAmt);
                                         discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                                         //discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                                     }
@@ -732,7 +783,7 @@ public class PayOrderController {
                                     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);
+                                        amt = receivableAmt_b.subtract(discountAmt);
                                         discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                                         //discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                                     }
@@ -801,7 +852,7 @@ public class PayOrderController {
             if(customerGradeList !=null && customerGradeList.size() >0){
                 //用户第一次购买 取等级最低初始会员的优惠条件计算
                 oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);   //加油升数
-                if(customerGradeInfo.get(0).get("gasoilDiscountLitre") !=null){
+                if(customerGradeList.get(0).get("gasoilDiscountLitre") !=null){
                     discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("gasoilDiscountLitre").toString()));
                     discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
                 }else {

+ 3 - 0
YijiaRestful/src/main/java/com/platform/yijia/pojo/CustomerCardSetting.java

@@ -21,6 +21,9 @@ public class CustomerCardSetting {
     private Integer stationId;          //油站ID
     private String stationName;          //油站名称
     private Date createTime;
+    private String isMarket;            //是否叠加营销方案
+    private String isGradeSetting;      //是否叠加等级优惠
+
     private String orderBy;         //查询结果排序方式
     private List<CustomerCardSettingDetail> customerCardSettingDetailList;
 }

+ 4 - 0
YijiaRestful/src/main/resources/mapper/ElectronicMembershipCardMapper.xml

@@ -50,6 +50,8 @@
         <result column="station_id"                 jdbcType="INTEGER"    property="stationId" />
         <result column="station_name"               jdbcType="VARCHAR"    property="stationName" />
         <result column="create_time"                jdbcType="VARCHAR"    property="createTime" />
+        <result column="is_market"                  jdbcType="VARCHAR"    property="isMarket" />
+        <result column="is_grade_setting"           jdbcType="VARCHAR"    property="isGradeSetting" />
         <collection property="customerCardSettingDetailList" resultMap="CardSettingDetailResultMap"/>
     </resultMap>
 
@@ -79,6 +81,8 @@
             T1.station_id,
             T1.station_name,
             T1.create_time,
+            T1.is_market,
+            T1.is_grade_setting,
             T2.id                   AS      cardSettingDetailId,
             T2.parent_id,
             T2.setting_rule_type,

+ 8 - 7
YijiaRestful/src/main/resources/mapper/PayOrderMapper.xml

@@ -217,17 +217,18 @@
     <!--查询昨日数据-->
     <select id="selectPosYesterDayData" parameterType="com.platform.yijia.pojo.PayOrder" resultType="map">
         SELECT
-            DATE_FORMAT(NOW() -INTERVAL 8 DAY,"%w") AS week,
-            amtSum,
             orderSum,
             averPrice,
+            amtSum,
+            IFNULL(TT2.amtSumTT2, 0)                            AS lastAmtSum,
+            DATE_FORMAT(NOW() -INTERVAL 8 DAY,"%w")             AS week,
             IFNULL(ROUND(((amtSum-amtSumTT2)/amtSumTT2),2), 0)	AS QOQ
         FROM (
             (SELECT
                 T1.station_id,
-                SUM(T1.amt)         AS amtSum,
-                COUNT(T1.order_no)	AS orderSum,
-                ROUND((SUM(T1.amt)/COUNT(T1.order_no)),2)	AS averPrice
+                IFNULL(SUM(T1.amt), 0)                              AS amtSum,
+                COUNT(T1.order_no)	                                AS orderSum,
+                IFNULL(ROUND((SUM(T1.amt)/COUNT(T1.order_no)),2),0)	AS averPrice
             FROM pay_order          AS T1
             WHERE
                 T1.station_id = #{stationId}
@@ -236,8 +237,8 @@
                 AND T1.created_date &lt; #{endTime})    AS TT1 LEFT JOIN
             (SELECT
                 T2.station_id,
-                SUM(T2.amt)         AS amtSumTT2
-            FROM pay_order          AS T2
+                IFNULL(SUM(T2.amt), 0)         AS amtSumTT2
+            FROM pay_order                     AS T2
             WHERE
                 T2.station_id = #{stationId}
                 AND T2.`status` = "1"