jk-GitHub-coder 4 년 전
부모
커밋
be7c1931a6

+ 343 - 169
YijiaRestful/src/main/java/com/platform/yijia/controller/PayController.java

@@ -667,141 +667,157 @@ public class PayController {
                                 payOrderService.insertCustomer(customerManage);
                             }
 //==========================================================================================================================================================//
-                            //客户积分
-                            IntegralRule integralRule  =new IntegralRule();
-                            integralRule.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
+                            //计算积分并推送
+                            CalculateIntegral calculateIntegral = new CalculateIntegral();
+                            calculateIntegral.setOpenId(infoMap.get("minaOpenid").toString());
+                            calculateIntegral.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
+                            calculateIntegral.setAmt(new BigDecimal(infoMap.get("amt").toString()));
                             if(infoMap.containsKey("orderType") && infoMap.get("orderType").toString().equals("1")){
-                                integralRule.setOilName(infoMap.get("oilName").toString());
-                                integralRule.setOilType(infoMap.get("orderType").toString());
+                                calculateIntegral.setOilType(infoMap.get("orderType").toString());
+                                calculateIntegral.setOilName(infoMap.get("oilName").toString());
+                                calculateIntegral.setOilLiters(new BigDecimal(infoMap.get("orderLiters").toString()));
                             }else if(infoMap.containsKey("orderType") && infoMap.get("orderType").toString().equals("2")){
-                                integralRule.setOilType(infoMap.get("orderType").toString());
+                                calculateIntegral.setOilType(infoMap.get("orderType").toString());
                             }
+                            calculateIntegral.setReceivableAmt(new BigDecimal(infoMap.get("receivableAmt").toString()));
+                            //计算积分并推送
+                            this.calculateIntegralAndPushIntegral(calculateIntegral);
 
-                            //获取该油站的积分规则
-                            integralRule.setEmptyDate(new Date());
-                            List<IntegralRule> rule = integralRuleService.getIntegralRule(integralRule);
-                            logger.info("当前油站油品的积分规则:" + rule);
-                            if(rule !=null && rule.size() > 0 && rule.get(0).getEmptyDate().compareTo(new Date()) ==1){
-                                CustomerPoints customerPoints = new CustomerPoints();       //客户积分实体表
-                                CustomerPointsRecord customerPointsRecord = new CustomerPointsRecord();     //客户积分记录实体表
-                                if(infoMap.containsKey("unionId")){
-                                    customerPoints.setUnionId(infoMap.get("unionId").toString());
-                                    customerPointsRecord.setUnionId(infoMap.get("unionId").toString());
-                                }
-                                customerPoints.setCustomerName(infoMap.get("consumer").toString());
-                                customerPoints.setMobilePhone(infoMap.get("mobilePhone").toString());   //存入手机号
-                                customerPoints.setStationName(infoMap.get("stationName").toString());
-                                customerPoints.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
-
-                                customerPointsRecord.setCustomerName(infoMap.get("consumer").toString());       //客户名称
-                                customerPointsRecord.setRecordType("+");            // "+"表示增加积分
-                                customerPointsRecord.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
-                                customerPointsRecord.setStationName(infoMap.get("stationName").toString());
-                                customerPointsRecord.setCreateTime(new Date());
-                                //获取该用户积分信息
-                                CustomerPoints customerPointsInfo = customerPointsService.getCustomerPointsInfo(customerPoints);
-                                if(customerPointsInfo !=null){
-                                    //String ruleType = rule.get(0).getRuleType();   //获取积分规则类型
-                                    String[] datePicker={};     //积分比例时间
-                                    if(rule.get(0).getDatePicker() != null && rule.get(0).getDatePicker() !=""){
-                                        if(rule.get(0).getDatePicker().contains(",")){
-                                            datePicker = rule.get(0).getDatePicker().split(",");
-                                        }else {
-                                            datePicker= new String[1];
-                                            datePicker[0] = rule.get(0).getDatePicker();
-                                        }
-                                    }
-                                    String currentTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
-                                    List<IntegralRuleDetail> integralRuleDetailList = rule.get(0).getIntegralRuleDetailList();  //积分规则详细计算信息
-                                    if(integralRuleDetailList !=null && integralRuleDetailList.size() > 0){
-                                        BigDecimal realAmt = new BigDecimal(infoMap.get("amt").toString());  //本次消费实收金额
-                                        BigDecimal receivableAmt = new BigDecimal(infoMap.get("receivableAmt").toString());  //本次消费实收金额
-                                        BigDecimal orderLiters = null;  //本次加油升数
-                                        if(infoMap.containsKey("orderType") && infoMap.get("orderType").toString().equals("1")){
-                                            orderLiters = new BigDecimal(infoMap.get("orderLiters").toString());    //本次加油升数
-                                        }
-                                        //循环规则明细
-                                        for(IntegralRuleDetail integralRuleDetail : integralRuleDetailList){
-                                            if(integralRuleDetail.getOilType().equals("1")){    //油品
-                                                //规则类型
-                                                logger.info("当前生成积分类型:油品");
-                                                String ruleType = integralRuleDetail.getRuleType();
-                                                logger.info("当前油品规则类型ruleType: " + ruleType);
-                                                if(ruleType !=null && ruleType.equals("1") && realAmt.compareTo(integralRuleDetail.getRuleTerms()) ==1 || realAmt.compareTo(integralRuleDetail.getRuleTerms()) ==0){
-                                                    //以实收金额为准时
-                                                    logger.info("以实收金额为准时");
-                                                    if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
-                                                        //计算积分并取整
-                                                        logger.info("油站使用等级");
-                                                        countIntegral (realAmt, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
-                                                        break;
-                                                    }else {
-                                                        //计算积分并取整
-                                                        logger.info("油站没有使用等级");
-                                                        countIntegral (realAmt, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
-                                                        break;
-                                                    }
-                                                }else if(ruleType !=null && ruleType.equals("2") && receivableAmt.compareTo(integralRuleDetail.getRuleTerms()) ==1 || receivableAmt.compareTo(integralRuleDetail.getRuleTerms()) ==0){
-                                                    //应收金额为准时
-                                                    logger.info("应收金额为准");
-                                                    if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
-                                                        //计算积分并取整
-                                                        logger.info("油站使用等级");
-                                                        countIntegral (receivableAmt, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
-                                                        break;
-                                                    }else {
-                                                        //计算积分并取整
-                                                        logger.info("油站没有使用等级");
-                                                        countIntegral (receivableAmt, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
-                                                        break;
-                                                    }
-
-                                                }else if(ruleType !=null && ruleType.equals("3") && orderLiters.compareTo(integralRuleDetail.getRuleTerms()) ==1 || orderLiters.compareTo(integralRuleDetail.getRuleTerms()) ==0){
-                                                    //加油升数为准时
-                                                    logger.info("加油升数为准");
-                                                    if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
-                                                        //计算积分并取整
-                                                        logger.info("油站使用等级");
-                                                        countIntegral (orderLiters, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
-                                                        break;
-                                                    }else {
-                                                        //计算积分并取整
-                                                        logger.info("油站没有使用等级");
-                                                        countIntegral (orderLiters, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
-                                                        break;
-                                                    }
-                                                }else {
-                                                    customerPoints.setPoints(customerPointsInfo.getPoints());
-                                                    customerPoints.setAccumulatePoints(customerPointsInfo.getPoints());
-                                                    customerPointsRecord.setIntegral(0);
-                                                }
-                                            }else if(integralRuleDetail.getOilType().equals("2")){ //非油品
-                                                logger.info("当前生成积分类型:非油品");
-                                                //计算积分并取整
-                                                countIntegral (realAmt, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
-                                                break;
-                                            }
-                                        }
-                                    }
-
-                                    logger.info("客户积分customerPoints:"+ customerPoints);
-                                    logger.info("客户积分记录customerPointsRecord:"+ customerPointsRecord);
-                                    //更新客户余额积分
-                                    customerPointsService.updateCustomerPointsInfo(customerPoints);
-                                    //插入客户积分记录表
-                                    customerPointsRecordService.insertCustomerPointsRecordInfo(customerPointsRecord);
-                                    //客户公众号积分增加通知
-                                    //customerPoints.getBlogOpenId()
-                                    //weiXinPushIntegralInfo(infoMap.get("stationId").toString(), infoMap.get("consumer").toString(), customerPointsRecord.getIntegral().toString(), customerPoints.getPoints().toString(), customerPoints.getBlogOpenId());
-                                   CustomerPoints m = new CustomerPoints();
-                                   m.setUnionId(customerPoints.getUnionId());
-                                   CustomerPoints cus = customerPointsService.getCustomerPointsInfo(m);
-                                   if(cus.getBlogOpenId() !=null){
-                                       //公众号积分消息推送
-                                     this.weiXinPushIntegralInfo(cus.getStationId().toString(), cus.getCustomerName(), customerPointsRecord.getIntegral().toString(), cus.getPoints().toString(), cus.getBlogOpenId());
-                                   }
-                                }
-                            }
+                            //客户积分
+//                            IntegralRule integralRule  =new IntegralRule();
+//                            integralRule.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
+//                            if(infoMap.containsKey("orderType") && infoMap.get("orderType").toString().equals("1")){
+//                                integralRule.setOilName(infoMap.get("oilName").toString());
+//                                integralRule.setOilType(infoMap.get("orderType").toString());
+//                            }else if(infoMap.containsKey("orderType") && infoMap.get("orderType").toString().equals("2")){
+//                                integralRule.setOilType(infoMap.get("orderType").toString());
+//                            }
+//
+//                            //获取该油站的积分规则
+//                            integralRule.setEmptyDate(new Date());
+//                            List<IntegralRule> rule = integralRuleService.getIntegralRule(integralRule);
+//                            logger.info("当前油站油品的积分规则:" + rule);
+//                            if(rule !=null && rule.size() > 0 && rule.get(0).getEmptyDate().compareTo(new Date()) ==1){
+//                                CustomerPoints customerPoints = new CustomerPoints();       //客户积分实体表
+//                                CustomerPointsRecord customerPointsRecord = new CustomerPointsRecord();     //客户积分记录实体表
+//                                if(infoMap.containsKey("unionId")){
+//                                    customerPoints.setUnionId(infoMap.get("unionId").toString());
+//                                    customerPointsRecord.setUnionId(infoMap.get("unionId").toString());
+//                                }
+//                                customerPoints.setCustomerName(infoMap.get("consumer").toString());
+//                                customerPoints.setMobilePhone(infoMap.get("mobilePhone").toString());   //存入手机号
+//                                customerPoints.setStationName(infoMap.get("stationName").toString());
+//                                customerPoints.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
+//
+//                                customerPointsRecord.setCustomerName(infoMap.get("consumer").toString());       //客户名称
+//                                customerPointsRecord.setRecordType("+");            // "+"表示增加积分
+//                                customerPointsRecord.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
+//                                customerPointsRecord.setStationName(infoMap.get("stationName").toString());
+//                                customerPointsRecord.setCreateTime(new Date());
+//                                //获取该用户积分信息
+//                                CustomerPoints customerPointsInfo = customerPointsService.getCustomerPointsInfo(customerPoints);
+//                                if(customerPointsInfo !=null){
+//                                    //String ruleType = rule.get(0).getRuleType();   //获取积分规则类型
+//                                    String[] datePicker={};     //积分比例时间
+//                                    if(rule.get(0).getDatePicker() != null && rule.get(0).getDatePicker() !=""){
+//                                        if(rule.get(0).getDatePicker().contains(",")){
+//                                            datePicker = rule.get(0).getDatePicker().split(",");
+//                                        }else {
+//                                            datePicker= new String[1];
+//                                            datePicker[0] = rule.get(0).getDatePicker();
+//                                        }
+//                                    }
+//                                    String currentTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
+//                                    List<IntegralRuleDetail> integralRuleDetailList = rule.get(0).getIntegralRuleDetailList();  //积分规则详细计算信息
+//                                    if(integralRuleDetailList !=null && integralRuleDetailList.size() > 0){
+//                                        BigDecimal realAmt = new BigDecimal(infoMap.get("amt").toString());  //本次消费实收金额
+//                                        BigDecimal receivableAmt = new BigDecimal(infoMap.get("receivableAmt").toString());  //本次消费实收金额
+//                                        BigDecimal orderLiters = null;  //本次加油升数
+//                                        if(infoMap.containsKey("orderType") && infoMap.get("orderType").toString().equals("1")){
+//                                            orderLiters = new BigDecimal(infoMap.get("orderLiters").toString());    //本次加油升数
+//                                        }
+//                                        //循环规则明细
+//                                        for(IntegralRuleDetail integralRuleDetail : integralRuleDetailList){
+//                                            if(integralRuleDetail.getOilType().equals("1")){    //油品
+//                                                //规则类型
+//                                                logger.info("当前生成积分类型:油品");
+//                                                String ruleType = integralRuleDetail.getRuleType();
+//                                                logger.info("当前油品规则类型ruleType: " + ruleType);
+//                                                if(ruleType !=null && ruleType.equals("1") && realAmt.compareTo(integralRuleDetail.getRuleTerms()) ==1 || realAmt.compareTo(integralRuleDetail.getRuleTerms()) ==0){
+//                                                    //以实收金额为准时
+//                                                    logger.info("以实收金额为准时");
+//                                                    if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
+//                                                        //计算积分并取整
+//                                                        logger.info("油站使用等级");
+//                                                        countIntegral (realAmt, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
+//                                                        break;
+//                                                    }else {
+//                                                        //计算积分并取整
+//                                                        logger.info("油站没有使用等级");
+//                                                        countIntegral (realAmt, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
+//                                                        break;
+//                                                    }
+//                                                }else if(ruleType !=null && ruleType.equals("2") && receivableAmt.compareTo(integralRuleDetail.getRuleTerms()) ==1 || receivableAmt.compareTo(integralRuleDetail.getRuleTerms()) ==0){
+//                                                    //应收金额为准时
+//                                                    logger.info("应收金额为准");
+//                                                    if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
+//                                                        //计算积分并取整
+//                                                        logger.info("油站使用等级");
+//                                                        countIntegral (receivableAmt, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
+//                                                        break;
+//                                                    }else {
+//                                                        //计算积分并取整
+//                                                        logger.info("油站没有使用等级");
+//                                                        countIntegral (receivableAmt, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
+//                                                        break;
+//                                                    }
+//
+//                                                }else if(ruleType !=null && ruleType.equals("3") && orderLiters.compareTo(integralRuleDetail.getRuleTerms()) ==1 || orderLiters.compareTo(integralRuleDetail.getRuleTerms()) ==0){
+//                                                    //加油升数为准时
+//                                                    logger.info("加油升数为准");
+//                                                    if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
+//                                                        //计算积分并取整
+//                                                        logger.info("油站使用等级");
+//                                                        countIntegral (orderLiters, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
+//                                                        break;
+//                                                    }else {
+//                                                        //计算积分并取整
+//                                                        logger.info("油站没有使用等级");
+//                                                        countIntegral (orderLiters, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
+//                                                        break;
+//                                                    }
+//                                                }else {
+//                                                    customerPoints.setPoints(customerPointsInfo.getPoints());
+//                                                    customerPoints.setAccumulatePoints(customerPointsInfo.getPoints());
+//                                                    customerPointsRecord.setIntegral(0);
+//                                                }
+//                                            }else if(integralRuleDetail.getOilType().equals("2")){ //非油品
+//                                                logger.info("当前生成积分类型:非油品");
+//                                                //计算积分并取整
+//                                                countIntegral (realAmt, integralRuleDetail, datePicker, currentTime,  rule, customerPoints, customerPointsRecord, customerPointsInfo);
+//                                                break;
+//                                            }
+//                                        }
+//                                    }
+//
+//                                    logger.info("客户积分customerPoints:"+ customerPoints);
+//                                    logger.info("客户积分记录customerPointsRecord:"+ customerPointsRecord);
+//                                    //更新客户余额积分
+//                                    customerPointsService.updateCustomerPointsInfo(customerPoints);
+//                                    //插入客户积分记录表
+//                                    customerPointsRecordService.insertCustomerPointsRecordInfo(customerPointsRecord);
+//                                    //客户公众号积分增加通知
+//                                    //customerPoints.getBlogOpenId()
+//                                    //weiXinPushIntegralInfo(infoMap.get("stationId").toString(), infoMap.get("consumer").toString(), customerPointsRecord.getIntegral().toString(), customerPoints.getPoints().toString(), customerPoints.getBlogOpenId());
+//                                   CustomerPoints m = new CustomerPoints();
+//                                   m.setUnionId(customerPoints.getUnionId());
+//                                   CustomerPoints cus = customerPointsService.getCustomerPointsInfo(m);
+//                                   if(cus.getBlogOpenId() !=null){
+//                                       //公众号积分消息推送
+//                                     this.weiXinPushIntegralInfo(cus.getStationId().toString(), cus.getCustomerName(), customerPointsRecord.getIntegral().toString(), cus.getPoints().toString(), cus.getBlogOpenId());
+//                                   }
+//                                }
+//                            }
 
 ///========================================================================================================================================================//
                             //打印机打印小票
@@ -964,25 +980,25 @@ public class PayController {
     }
 
     //计算积分并赋值
-    public void  countIntegral (BigDecimal b1, IntegralRuleDetail integralRuleDetail,
-                                String[] datePicker, String currentTime, List<IntegralRule> rule,
-                                CustomerPoints customerPoints, CustomerPointsRecord customerPointsRecord, CustomerPoints customerPointsInfo){
-        BigDecimal integral = b1.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
-        logger.info("该用户本次消费获取积分值:"+integral.toString());
-        //设置积分多倍时间时
-        logger.info("积分双倍时间:" +datePicker);
-        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()));
-    }
+//    public void  countIntegral (BigDecimal b1, IntegralRuleDetail integralRuleDetail,
+//                                String[] datePicker, String currentTime, List<IntegralRule> rule,
+//                                CustomerPoints customerPoints, CustomerPointsRecord customerPointsRecord, CustomerPoints customerPointsInfo){
+//        BigDecimal integral = b1.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
+//        logger.info("该用户本次消费获取积分值:"+integral.toString());
+//        //设置积分多倍时间时
+//        logger.info("积分双倍时间:" +datePicker);
+//        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()));
+//    }
 
     /*
      * 微信公众号消息推送
@@ -991,29 +1007,187 @@ public class PayController {
      * @param customerPointsRecordIntegral  用户积分记录
      * @param customerPointsIntegral        用户当前还剩余的积分
      */
-    public void weiXinPushIntegralInfo (String stationId, String consumer, String customerPointsRecordIntegral, String customerPointsIntegral, String openId){
-        //客户公众号积分增加通知
+//    public void weiXinPushIntegralInfo (String stationId, String consumer, String customerPointsRecordIntegral, String customerPointsIntegral, String openId){
+//        //客户公众号积分增加通知
+//        String gzhAppId ="";
+//        String gzhAppSecret ="";
+//        String stationName = "";        //油站名称
+//        Map<String, String> m = stationService.getStationAppIdAndAppSecret(Integer.valueOf(stationId));
+//        if(m !=null && m.containsKey("stationName") && m.containsKey("gzhAppId") && m.containsKey("gzhAppSecret")){
+//            stationName = m.get("stationName");
+//            gzhAppId = m.get("gzhAppId");
+//            gzhAppSecret = m.get("gzhAppSecret");
+//        }
+//        List<WxMpTemplateData> wxMpTemplate = new ArrayList<>();
+//        wxMpTemplate.add(new WxMpTemplateData("first","尊敬的"+consumer+",您好:\n" + "您在"+stationName+"的积分最新交易信息如下"));
+//        wxMpTemplate.add(new WxMpTemplateData("time", new SimpleDateFormat("yyyy年MM月dd日HH时mm分").format(new Date())));
+//        wxMpTemplate.add(new WxMpTemplateData("type", "增加"));
+//        wxMpTemplate.add(new WxMpTemplateData("Point", customerPointsRecordIntegral));
+//        wxMpTemplate.add(new WxMpTemplateData("From", stationName));
+//        wxMpTemplate.add(new WxMpTemplateData("remark",
+//                "截止至" + new SimpleDateFormat(" yyyy年MM月dd日HH时mm分").format(new Date())+",您在"+stationName+"的可用积分为 "+customerPointsIntegral+" 分"));
+//        String templateId = "G9tN--a3tGM5BN3otqZr73b4ErQCYWISSgyshbTqLYc";  //积分兑换成功通知模板
+//        //wxPushUtil.push(gzhAppId, gzhAppSecret, templateId, customerPoints.getBlogOpenId(), wxMpTemplate);
+//        wxPushUtil.push(gzhAppId, gzhAppSecret, templateId, openId, wxMpTemplate);  //oJR5R6r4EJhaORFcPap70r_mtFZo
+//    }
+
+    /**
+     * 计算消费生成积分
+     */
+    public void calculateIntegralAndPushIntegral(CalculateIntegral calculateIntegral){
+        int integral =0;
+        IntegralRule integralRule = new IntegralRule();
+        integralRule.setStationId(calculateIntegral.getStationId());
+        integralRule.setEmptyDate(new Date());
+        integralRule.setOilName(calculateIntegral.getOilName());
+        integralRule.setOilType(calculateIntegral.getOilType());
+        //获取该油站的积分规则
+        List<IntegralRule> integralRuleList = integralRuleService.getIntegralRule(integralRule);
+        if(integralRuleList !=null && integralRuleList.size() >0){
+            List<IntegralRuleDetail> integralRuleDetailList = integralRuleList.get(0).getIntegralRuleDetailList();
+            String currentTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
+            String datePicker=null;         //活动时间
+            String[] datePickerArray ={};
+            String integralActivity = integralRuleList.get(0).getIntegralActivity();
+            String integralProportion =null;
+            if(integralActivity.equals("1")){
+                datePicker = integralRuleList.get(0).getDatePicker();
+                integralProportion = integralRuleList.get(0).getIntegralProportion();
+                if(datePicker.contains(",")){
+                    datePickerArray = datePicker.split(",");
+                }else {
+                    datePickerArray= new String[1];
+                    datePickerArray[0] = datePicker;
+                }
+            }
+            if(integralRuleDetailList !=null && integralRuleDetailList.size() >0){
+                for (IntegralRuleDetail integralRuleDetail : integralRuleDetailList){
+                    if(integralRuleDetail.getOilType().equals("1")){    //油品
+                        if (integralRuleDetail.getRuleType().equals("1")){  //按照实收金额
+                            if(calculateIntegral.getAmt().compareTo(integralRuleDetail.getRuleTerms()) == 1 || calculateIntegral.getAmt().compareTo(integralRuleDetail.getRuleTerms()) == 0){
+                                BigDecimal divide = calculateIntegral.getAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
+                                BigDecimal multiply = divide.multiply(integralRuleDetail.getIntegral());
+                                if(integralActivity.equals("1") && datePickerArray !=null && integralProportion !=null){
+                                    for (String s : datePickerArray){
+                                        if(s.contains(currentTime)){
+                                            multiply = multiply.multiply(new BigDecimal(integralProportion));
+                                            break;
+                                        }
+                                    }
+                                }
+                                integral =multiply.intValue();
+                                break;
+                            }
+                        }else if (integralRuleDetail.getRuleType().equals("2")){    //按应收金额
+                            if(calculateIntegral.getReceivableAmt().compareTo(integralRuleDetail.getRuleTerms()) ==1 || calculateIntegral.getReceivableAmt().compareTo(integralRuleDetail.getRuleTerms()) ==0){
+                                BigDecimal divide = calculateIntegral.getReceivableAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
+                                BigDecimal multiply = divide.multiply(integralRuleDetail.getIntegral());
+                                if(integralActivity.equals("1") && datePickerArray !=null && integralProportion !=null){
+                                    for (String s : datePickerArray){
+                                        if(s.contains(currentTime)){
+                                            multiply = multiply.multiply(new BigDecimal(integralProportion));
+                                            break;
+                                        }
+                                    }
+                                }
+                                integral = multiply.intValue();
+                                break;
+                            }
+                        }else if (integralRuleDetail.getRuleType().equals("3")){    //按照加油升数
+                            if(calculateIntegral.getOilLiters().compareTo(integralRuleDetail.getRuleTerms()) ==1 || calculateIntegral.getOilLiters().compareTo(integralRuleDetail.getRuleTerms()) ==0){
+                                BigDecimal divide = calculateIntegral.getOilLiters().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
+                                BigDecimal multiply = divide.multiply(integralRuleDetail.getIntegral());
+                                if(integralActivity.equals("1") && datePickerArray !=null && integralProportion !=null){
+                                    for (String s : datePickerArray){
+                                        if(s.contains(currentTime)){
+                                            multiply = multiply.multiply(new BigDecimal(integralProportion));
+                                            break;
+                                        }
+                                    }
+                                }
+                                integral =multiply.intValue();
+                                break;
+                            }
+                        }
+                    }else if (integralRuleDetail.getOilType().equals("2")){     //非油品
+                        if (calculateIntegral.getReceivableAmt().compareTo(integralRuleDetail.getRuleTerms()) ==1 || calculateIntegral.getReceivableAmt().compareTo(integralRuleDetail.getRuleTerms()) ==0){
+                            BigDecimal divide = calculateIntegral.getReceivableAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
+                            BigDecimal multiply = divide.multiply(integralRuleDetail.getIntegral());
+                            if(integralActivity.equals("1") && datePickerArray !=null && integralProportion !=null){
+                                for (String s : datePickerArray){
+                                    if(s.contains(currentTime)){
+                                        multiply = multiply.multiply(new BigDecimal(integralProportion));
+                                        break;
+                                    }
+                                }
+                            }
+                            integral = multiply.intValue();
+                            break;
+                        }
+                    }
+                }
+            }
+            this.pushIntegral(calculateIntegral.getStationId(), integral, calculateIntegral.getOpenId());
+        }
+    }
+
+    /*
+     * 公众号推送积分
+     * @param stationId 油站ID
+     * @param integral  本次所得积分
+     * @param openId    小程序用户openID
+     */
+    public void pushIntegral(Integer stationId, int integral, String openId){
         String gzhAppId ="";
         String gzhAppSecret ="";
         String stationName = "";        //油站名称
-        Map<String, String> m = stationService.getStationAppIdAndAppSecret(Integer.valueOf(stationId));
-        if(m !=null && m.containsKey("stationName") && m.containsKey("gzhAppId") && m.containsKey("gzhAppSecret")){
-            stationName = m.get("stationName");
-            gzhAppId = m.get("gzhAppId");
-            gzhAppSecret = m.get("gzhAppSecret");
+        BigDecimal surplusIntegral=null;
+        String customerName =null;
+        if(StringUtils.isNotBlank(openId)){
+            Map<String, String> m = stationService.getStationAppIdAndAppSecret(stationId);
+            if(m !=null && m.containsKey("stationName") && m.containsKey("gzhAppId") && m.containsKey("gzhAppSecret")){
+                stationName = m.get("stationName");
+                gzhAppId = m.get("gzhAppId");
+                gzhAppSecret = m.get("gzhAppSecret");
+            }
+            CustomerPoints customerPoints = new CustomerPoints();
+            customerPoints.setStationId(stationId);
+            customerPoints.setMinaOpenId(openId);
+            CustomerPoints customerPointsInfo = customerPointsService.getCustomerPointsInfoByMinaOpenId(customerPoints);
+            if(customerPointsInfo !=null){
+                customerName =customerPointsInfo.getCustomerName();
+                surplusIntegral =new BigDecimal(customerPointsInfo.getPoints()).add(new BigDecimal(integral));
+                CustomerPointsRecord customerPointsRecord = new CustomerPointsRecord();
+                customerPointsRecord.setCreateTime(new Date());
+                customerPointsRecord.setCustomerName(customerName);
+                customerPointsRecord.setStationName(stationName);
+                customerPointsRecord.setStationId(stationId);
+                customerPointsRecord.setRecordType("+");
+                customerPointsRecord.setUnionId(customerPointsInfo.getUnionId());
+                customerPointsRecord.setIntegral(integral);
+                customerPointsRecordService.insertCustomerPointsRecordInfo(customerPointsRecord);
+                customerPoints.setUnionId(customerPointsInfo.getUnionId());
+                customerPoints.setPoints(surplusIntegral.intValue());
+                //更新客户积分
+                customerPointsService.updateCustomerPointsInfo(customerPoints);
+                String blogOpenId = customerPointsInfo.getBlogOpenId();     //公众号openId
+                if(blogOpenId !=null){
+                    //推送模板
+                    List<WxMpTemplateData> wxMpTemplate = new ArrayList<>();
+                    wxMpTemplate.add(new WxMpTemplateData("first","尊敬的"+customerName+",您好:\n" + "您在"+stationName+"的积分最新交易信息如下"));
+                    wxMpTemplate.add(new WxMpTemplateData("time", new SimpleDateFormat("yyyy年MM月dd日HH时mm分").format(new Date())));
+                    wxMpTemplate.add(new WxMpTemplateData("type", "增加"));
+                    wxMpTemplate.add(new WxMpTemplateData("Point", String.valueOf(integral)));
+                    wxMpTemplate.add(new WxMpTemplateData("From", stationName));
+                    wxMpTemplate.add(new WxMpTemplateData("remark",
+                            "截止至" + new SimpleDateFormat(" yyyy年MM月dd日HH时mm分").format(new Date())+",您在"+stationName+"的可用积分为 "+surplusIntegral.toString()+" 分"));
+                    String templateId = "G9tN--a3tGM5BN3otqZr73b4ErQCYWISSgyshbTqLYc";  //积分兑换成功通知模板
+                    wxPushUtil.push(gzhAppId, gzhAppSecret, templateId, blogOpenId, wxMpTemplate);  //oJR5R6r4EJhaORFcPap70r_mtFZo
+                }
+
+            }
+
         }
-        List<WxMpTemplateData> wxMpTemplate = new ArrayList<>();
-        wxMpTemplate.add(new WxMpTemplateData("first","尊敬的"+consumer+",您好:\n" + "您在"+stationName+"的积分最新交易信息如下"));
-        wxMpTemplate.add(new WxMpTemplateData("time", new SimpleDateFormat("yyyy年MM月dd日HH时mm分").format(new Date())));
-        wxMpTemplate.add(new WxMpTemplateData("type", "增加"));
-        wxMpTemplate.add(new WxMpTemplateData("Point", customerPointsRecordIntegral));
-        wxMpTemplate.add(new WxMpTemplateData("From", stationName));
-        wxMpTemplate.add(new WxMpTemplateData("remark",
-                "截止至" + new SimpleDateFormat(" yyyy年MM月dd日HH时mm分").format(new Date())+",您在"+stationName+"的可用积分为 "+customerPointsIntegral+" 分"));
-        String templateId = "G9tN--a3tGM5BN3otqZr73b4ErQCYWISSgyshbTqLYc";  //积分兑换成功通知模板
-        //wxPushUtil.push(gzhAppId, gzhAppSecret, templateId, customerPoints.getBlogOpenId(), wxMpTemplate);
-        wxPushUtil.push(gzhAppId, gzhAppSecret, templateId, openId, wxMpTemplate);  //oJR5R6r4EJhaORFcPap70r_mtFZo
     }
 
-
 }

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

@@ -279,11 +279,11 @@ public class PayOrderController {
                     calculateIntegral.setOilName(payOrder.getOilName());
                     calculateIntegral.setOilType(payOrder.getOrderType());
                     calculateIntegral.setStationId(payOrder.getStationId());
-                    int integral = this.calculateIntegral(calculateIntegral);
+                    calculateIntegral.setOpenId(payOrderRequest.getOpenId());   //小程序openId
+                    //计算积分且推送积分
+                    this.calculateIntegralAndPushIntegral(calculateIntegral);
                     resultMap.put("ordNo", ordNo);
                     resultData = ResultData.success(resultMap);
-                    //推送加油赠送积分
-                    pushIntegral(payOrderRequest.getStationId(), integral, payOrderRequest.getOpenId());
                 }else {
                     resultData=ResultData.error(CodeMsg.BALANCE_NOT_EENOUGH);
                 }
@@ -515,7 +515,7 @@ public class PayOrderController {
     /**
      * 计算消费生成积分
      */
-    public int calculateIntegral(CalculateIntegral calculateIntegral){
+    public void calculateIntegralAndPushIntegral(CalculateIntegral calculateIntegral){
         int integral =0;
         IntegralRule integralRule = new IntegralRule();
         integralRule.setStationId(calculateIntegral.getStationId());
@@ -608,15 +608,15 @@ public class PayOrderController {
                     }
                 }
             }
+            this.pushIntegral(calculateIntegral.getStationId(), integral, calculateIntegral.getOpenId());
         }
-        return integral;
     }
 
     /*
      * 公众号推送积分
      * @param stationId 油站ID
      * @param integral  本次所得积分
-     * @param openId    用户openID
+     * @param openId    小程序用户openID
      */
     public void pushIntegral(Integer stationId, int integral, String openId){
         String gzhAppId ="";