package com.platform.yijia.controller; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.platform.yijia.dao.PayOrderMapper; import com.platform.yijia.param.request.PayOrderRequest; import com.platform.yijia.pojo.*; import com.platform.yijia.service.*; import com.platform.yijia.utils.CodeMsg; import com.platform.yijia.utils.ResultData; import com.platform.yijia.utils.weixinapp.WxPushUtil; import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.javassist.util.HotSwapAgent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.naming.ldap.HasControls; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; @Controller @RequestMapping("/demo") public class PayOrderController { private static Logger logger =(Logger) LoggerFactory.getLogger(PayOrderController.class); @Resource private PayOrderService payOrderService; @Resource private AppUserInfoService appUserInfoService; @Resource private StationService stationService; @Resource private CustomerGradeServices customerGradeServices; @Resource private PayOrderMapper payOrderMapper; @Resource private ElectronicMembershipCardService electronicMembershipCardService; @Resource private WxPushUtil wxPushUtil; @Resource private IntegralRuleService integralRuleService; @Resource private CustomerPointsService customerPointsService; @Resource private CustomerPointsRecordService customerPointsRecordService; @Resource private GzhNewsTemplateService gzhNewsTemplateService; @Resource private CustomerManagerService customerManagerService; //一键支付,生成订单 @RequestMapping(value = "/AddPayOrderInfo", consumes = "application/json", method = RequestMethod.POST) @ResponseBody public String AddPayOrderInfo(@RequestBody PayOrderRequest payOrderRequest){ logger.info("获取订单前端传来参数openID:"+ payOrderRequest.getOpenId()); logger.info("获取订单前端传来参数userType:"+ payOrderRequest.getUserType()); Gson gson =new Gson(); ResultData resultData =null; //根据token 和登录类型 身份验证 AppUserInfo appUserInfo =new AppUserInfo(); //订单类型 是小程序还是公众号 appUserInfo.setUserType(payOrderRequest.getUserType()); if(payOrderRequest.getUserType().equals("1")){ //1 是公众号 appUserInfo.setBlogOpenid(payOrderRequest.getOpenId()); }else if(payOrderRequest.getUserType().equals("2")){ //2是小程序 appUserInfo.setMinaOpenid(payOrderRequest.getOpenId()); } List appUserInfoList =appUserInfoService.Authentication(appUserInfo); //判断登录人员是否验证成功 if(appUserInfoList!=null&&appUserInfoList.size()>0){ PayOrder payOrder=new PayOrder(); payOrder.setConsumer(appUserInfoList.get(0).getBlogNickName()); //昵称 payOrder.setConsumerId(appUserInfoList.get(0).getUserId()); //用户id //添加订单信息,返回订单号 String ordNo =payOrderService.AddPayOrderInfo(payOrderRequest, payOrder); if(ordNo.equals("0")){ resultData=ResultData.error(CodeMsg.CHECK_DATA); }else if(ordNo.equals("1")){ resultData=ResultData.error(CodeMsg.PARAMS_NUll); }else { resultData=ResultData.success(ordNo); } }else{ //登录人验证失败 resultData=ResultData.error(CodeMsg.USER_NOT_EXSIST); } return gson.toJson(resultData); } //小程序支付生成订单 @RequestMapping(value = "/AddPayOrderInfoNew", consumes = "application/json", method = RequestMethod.POST) @ResponseBody @Transactional public String AddPayOrderInfoNew(@RequestBody PayOrderRequest payOrderRequest){ logger.info("获取订单前端传来参数openId:"+ payOrderRequest.getOpenId()); logger.info("获取订单前端传来参数userType:"+ payOrderRequest.getUserType()); Gson gson =new Gson(); ResultData resultData =null; AppUserInfo appUserInfo =new AppUserInfo(); appUserInfo.setUserType(payOrderRequest.getUserType()); //订单类型 是小程序还是公众号 if(payOrderRequest.getUserType().equals("1")){ appUserInfo.setBlogOpenid(payOrderRequest.getOpenId()); //1 是公众号 }else if(payOrderRequest.getUserType().equals("2")){ appUserInfo.setMinaOpenid(payOrderRequest.getOpenId()); //2是小程序 } List appUserInfoList =appUserInfoService.Authentication(appUserInfo); Map resultMap = new HashMap<>(); //返回结果集 //判断登录人员是否验证成功 if(appUserInfoList!=null && appUserInfoList.size()>0){ PayOrder payOrder = new PayOrder(); payOrder.setConsumer(appUserInfoList.get(0).getBlogNickName()); //昵称 payOrder.setConsumerId(appUserInfoList.get(0).getUserId()); //用户id Random random = new Random(); String result=""; for(int i=0;i<6;i++){ result+=random.nextInt(10); } String ordNo=System.nanoTime()+result; payOrder.setOrderNo(ordNo); //订单号 logger.info("生成的订单号:" + ordNo); payOrder.setDiscountCouponAmt(payOrderRequest.getDiscountCouponAmt()); //优惠劵金额 payOrder.setDiscountCoupon(payOrderRequest.getDiscountCoupon()); //优惠券 payOrder.setCarNo(payOrderRequest.getCarNo()); //车牌号、 payOrder.setCustomerGrade(payOrderRequest.getCustomerGrade()); //客户电话 payOrder.setMemberNo(payOrderRequest.getMemberNo()); //会员卡号 payOrder.setMemberAmt(payOrderRequest.getMemberAmt()); //会员支付金额 //payOrder.setPrintCount(payOrderRequest.getPrintCount()); //小票数量 payOrder.setScore(payOrderRequest.getScore()); //积分 payOrder.setStationId(payOrderRequest.getStationId()); //油站id payOrder.setStatus("0"); //创建订单 未支付状态 0 if(StringUtils.isNotBlank(payOrderRequest.getUserType())){ String userType = payOrderRequest.getUserType(); //支付方式:02公众号,03小程序', switch (userType){ case "1": payOrder.setPayWay("02"); break; case "2": payOrder.setPayWay("03"); break; } } payOrder.setCreatedDate(new Date()); //创建时间 payOrder.setOrderType(payOrderRequest.getOrderType()); //订单类型 payOrder.setOilGun(payOrderRequest.getOilGun()); //油枪号 //根据油站和油枪获取加油员和油品价格 油站名称 HashMap params = new HashMap<>(); params.put("oliGunNo", payOrderRequest.getOilGun()); params.put("stationId", payOrderRequest.getStationId()); String oilPersonnel = ""; //使用list原因:一个枪号对应多个加油员场景 List mapResultList = payOrderMapper.selectPersonelName(params); if(mapResultList != null && mapResultList.size() > 0){ for (Map per : mapResultList){ if(per.containsKey("personelName") && per.get("personelName").toString() !=null && per.get("personelName").toString() !=""){ oilPersonnel += per.get("personelName").toString() +","; } } if(oilPersonnel !=""){ payOrder.setOilPersonnel(oilPersonnel.substring(0, oilPersonnel.length()-1)); //加油员 } if(mapResultList.get(0).containsKey("stationName") && mapResultList.get(0).get("stationName").toString() !="" && mapResultList.get(0).get("stationName").toString() !=null ){ payOrder.setStationName(mapResultList.get(0).get("stationName").toString()); //油站名称 } } String orderType = payOrderRequest.getOrderType(); //获取订单类型 if(orderType.equals("1")){ //订单类型是油品时计算 resultMap = this.calculateAmt(payOrderRequest); //计算油价 加油升数 优惠金额 实收金额 优惠价格 payOrder.setOilPirce(resultMap.get("oilPrice").toString()); payOrder.setOrderLiters(resultMap.get("oilLiters").toString()); payOrder.setDiscountAmt(Double.valueOf(resultMap.get("discountAmt").toString())); payOrder.setAmt(Double.valueOf(resultMap.get("amt").toString())); } payOrder.setReceivableAmt(payOrderRequest.getReceivableAmt()); //订单应收金额 String oilName =payOrderRequest.getOilName(); payOrder.setOilName(oilName); //油品名称 switch (oilName){ //根据油品名称存储油品类型 1.柴油 2 汽油 case "92#": payOrder.setOilType("1"); break; case "95#": payOrder.setOilType("1"); break; case "97#": payOrder.setOilType("1"); break; case "0#": payOrder.setOilType("2"); break; case "-10#": payOrder.setOilType("2"); break; case "-20#": payOrder.setOilType("2"); break; } payOrder.setOilType(orderType); String stationCardEnabledFlag = electronicMembershipCardService.getStationCardEnabledFlag(payOrderRequest.getStationId()); //查询油站是否开启电子会员卡功能 if(stationCardEnabledFlag.equals("1")){ String balance = this.selectCardBalance(payOrderRequest.getStationId(), oilName, appUserInfoList.get(0).getUnionId()); resultMap.put("balance", balance); } StationInfo stationInfo = new StationInfo(); stationInfo.setStationId(payOrderRequest.getStationId()); StationInfo stationInfos = stationService.selectStationInfo(stationInfo); if(stationInfos !=null){ //获取油站图片和名称 resultMap.put("stationPic", stationInfos.getStationPic()); resultMap.put("stationName", stationInfos.getStationName()); } //payOrder.setPayType("wx"); //支付类型 switch (orderType){ case "1": //油品 payOrderMapper.insertSelective(payOrder); resultMap.put("ordNo", ordNo); break; case "2": //非油品 Map m = stationService.getStationAppIdAndAppSecret(payOrderRequest.getStationId()); if(m.containsKey("stationName") && m.get("stationName") !=null){ payOrder.setStationName(m.get("stationName")); } payOrder.setAmt(Double.valueOf(payOrderRequest.getReceivableAmt())); //非油品金额 payOrder.setDiscountAmt(Double.valueOf(0)); //优惠金额 payOrder.setOilPirce(payOrderRequest.getReceivableAmt().toString()); //非油品价格 payOrder.setOrderLiters("0"); resultMap.put("discountAmt", "0"); //优惠价格 resultMap.put("amt", payOrderRequest.getReceivableAmt()); //实收价格 resultMap.put("receivableAmt", payOrderRequest.getReceivableAmt()); //应收价格 resultMap.put("oilLiters", "0"); resultMap.put("discountPrice", "0"); payOrderMapper.insertSelective(payOrder); resultMap.put("ordNo", ordNo); break; } resultData = ResultData.success(resultMap); }else{ //登录人验证失败 resultData=ResultData.error(CodeMsg.USER_NOT_EXSIST); } return gson.toJson(resultData); } //查询用户电子会员卡余额 public String selectCardBalance(Integer stationId, String oilName, String unionId) { String cardOilsType =""; switch (oilName){ //根据油品名称存储电子卡油品类型 1.柴油 2 汽油 case "92#": cardOilsType ="1"; break; case "95#": cardOilsType ="1"; break; case "97#": cardOilsType ="1"; break; case "0#": cardOilsType ="2"; break; case "-10#": cardOilsType ="2"; break; case "-20#": cardOilsType ="2"; break; } CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard(); customerElectronicCard.setCardOilsType(cardOilsType); customerElectronicCard.setStationId(stationId); customerElectronicCard.setUnionId(unionId); CustomerElectronicCard electronicCardInfo = electronicMembershipCardService.getElectronicCardInfoByUnionId(customerElectronicCard); BigDecimal balance = null; if(electronicCardInfo !=null){ balance = electronicCardInfo.getAmt(); } return balance.toString(); } /*** * 计算订单金额 * @return */ public Map calculateAmt(PayOrderRequest payOrderRequest){ Map resultMap = new HashMap<>(); if(payOrderRequest.getReceivableAmt() !=null){ //应收金额 Double receivableAmt = payOrderRequest.getReceivableAmt(); //应收金额 用户输入的金额 Integer stationId = payOrderRequest.getStationId(); //油站ID //String oilGun = payOrderRequest.getOilGun(); //油枪号 String oilName = payOrderRequest.getOilName(); //油品名称 String openId = payOrderRequest.getOpenId(); //用户的openId String mobilePhone = payOrderRequest.getCustomerPhone(); //客户手机号 //获取油品价格 StationOilPrice stationOilPrice = new StationOilPrice(); stationOilPrice.setStationId(stationId); stationOilPrice.setOilName(oilName); StationOilPrice oilPriceInfo = stationService.getStationOilPrice(stationOilPrice); String oilPrice = oilPriceInfo.getOilPrice(); String stationNanme = oilPriceInfo.getStationNanme(); BigDecimal oilLiters = null; BigDecimal discountAmt =null; BigDecimal discountPrice = null; BigDecimal amt = null; //resultMap.put("stationName", stationNanme); resultMap.put("oilPrice", oilPrice); //油品价格 resultMap.put("receivableAmt", receivableAmt); //应收价格 //该油站的优惠方式 String stationDiscountWay = stationService.getStationDiscountWay(stationId.toString()); Map params = new HashMap(); params.put("stationId", stationId); params.put("oilName", oilName); BigDecimal receivableAmt_b = new BigDecimal(receivableAmt); //传入的应收金额 switch (stationDiscountWay){ case "1": //1.等级直降 //查询等级直降的优惠方式 params.put("mobilePhone", mobilePhone); params.put("minaOpenid", openId); //查询客户等级信息 List> customerGradeInfo = customerGradeServices.getCustomerGradeInfo(params); if(customerGradeInfo != null && customerGradeInfo.size() >0){ //已存在客户等级信息 //使用客户已存在的等级计算优惠 oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP); discountAmt = oilLiters.multiply(new BigDecimal(customerGradeInfo.get(0).get("gasoilDiscountLitre").toString())); discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP); amt = receivableAmt_b.subtract(discountAmt); discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); resultMap.put("discountAmt", discountAmt.doubleValue()); resultMap.put("amt", amt.doubleValue()); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", discountPrice.doubleValue()); }else { //不存在客户等级信息时,查询油站的客户等级直降优惠(查询结果根据会员成长值条件做升序查询) List customerGradeList = customerGradeServices.getCustomerGradeList(params); //如果存在 if(customerGradeList !=null && customerGradeList.size() >0){ //用户第一次购买 取等级最低初始会员的优惠条件计算 oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); //加油升数 discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("gasoilDiscountLitre").toString())); discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP); amt = receivableAmt_b.subtract(discountAmt); discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); resultMap.put("discountAmt", discountAmt.doubleValue()); resultMap.put("amt", amt.doubleValue()); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", discountPrice.doubleValue()); }else { //不存在 resultMap.put("discountAmt", 0); resultMap.put("amt", receivableAmt.doubleValue()); oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", oilPrice); } } break; case "2": //2.满减 params.put("discountPlanType", "1"); //营销方案 List customerMarkertPlanList_1 = customerGradeServices.getCustomerMarkertPlanList(params); //有优惠规则 if(customerMarkertPlanList_1 !=null && customerMarkertPlanList_1.size() >0){ boolean flag = true; for (Map m : customerMarkertPlanList_1){ //如果当前应收金额大于条件金额 BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString()); //条件金额 if(receivableAmt_b.compareTo(discountAmt_b) ==1 || receivableAmt_b.compareTo(discountAmt_b) ==0){ BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString()); //每满多少优惠多少的金额 discountAmt = receivableAmt_b.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(gasoilDiscountAmt_b); //优惠金额 discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP); amt = receivableAmt_b.subtract(discountAmt); //实收金额 oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP); //加油升数 discountPrice = amt.divide(oilLiters); //优惠价格 resultMap.put("discountAmt", discountAmt.doubleValue()); resultMap.put("amt", amt.doubleValue()); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", discountPrice.doubleValue()); flag = false; break; } } if(flag){ resultMap.put("discountAmt", 0); resultMap.put("amt", receivableAmt.doubleValue()); oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", oilPrice); } }else { //没有优惠规则 resultMap.put("discountAmt", 0); resultMap.put("amt", receivableAmt.doubleValue()); oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", oilPrice); } break; case "3": //3.立减 params.put("discountPlanType", "2"); //营销方案 List customerMarkertPlanList_2 = customerGradeServices.getCustomerMarkertPlanList(params); if(customerMarkertPlanList_2 !=null && customerMarkertPlanList_2.size() >0){ boolean flag = true; for (Map m : customerMarkertPlanList_2){ //如果当前应收金额大于条件金额 BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString()); //条件金额 if(receivableAmt_b.compareTo(discountAmt_b) ==1 || receivableAmt_b.compareTo(discountAmt_b) ==0){ BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString()); //每满多少优惠多少的金额 discountAmt = gasoilDiscountAmt_b; //优惠金额 amt = receivableAmt_b.subtract(gasoilDiscountAmt_b); //实收金额 oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); //加油升数 discountPrice = amt.divide(oilLiters); //优惠价格 resultMap.put("discountAmt", discountAmt.doubleValue()); resultMap.put("amt", amt.doubleValue()); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", discountPrice.doubleValue()); flag = false; break; } } if(flag){ //用户加油金额不符合优惠条件 resultMap.put("discountAmt", 0); resultMap.put("amt", receivableAmt.doubleValue()); oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", oilPrice); } }else { //没有优惠规则 resultMap.put("discountAmt", 0); resultMap.put("amt", receivableAmt.doubleValue()); oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", oilPrice); } break; case "4": //4.独立直降 params.put("discountPlanType", "3"); //营销方案 List customerMarkertPlanList_3 = customerGradeServices.getCustomerMarkertPlanList(params); if(customerMarkertPlanList_3 !=null && customerMarkertPlanList_3.size() >0){ boolean flag= true; for(Map m : customerMarkertPlanList_3){ BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString()); //条件金额 BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString()); oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); //加油升数 if(m.get("discountTerm").toString().equals("1")){ //按升数优惠 if(oilLiters.compareTo(discountAmt_b) ==1 || oilLiters.compareTo(discountAmt_b) ==0){ //计算 discountAmt = oilLiters.multiply(gasoilDiscountAmt_b); discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP); amt = receivableAmt_b.subtract(discountAmt); discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格 resultMap.put("discountAmt", discountAmt.doubleValue()); resultMap.put("amt", amt.doubleValue()); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", discountPrice.doubleValue()); flag =false; break; } }else if(m.get("discountTerm").toString().equals("2")){ //按金额优惠 if(receivableAmt_b.compareTo(discountAmt_b) ==1 || receivableAmt_b.compareTo(discountAmt_b) ==0){ discountAmt = oilLiters.multiply(gasoilDiscountAmt_b); discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP); amt = receivableAmt_b.subtract(discountAmt); discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格 resultMap.put("discountAmt", discountAmt.doubleValue()); resultMap.put("amt", amt.doubleValue()); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", discountPrice.doubleValue()); flag =false; break; } } } if(flag){ resultMap.put("discountAmt", 0); resultMap.put("amt", receivableAmt.doubleValue()); oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); resultMap.put("oilLiters", oilLiters.doubleValue()); resultMap.put("discountPrice", oilPrice); } }else { //没有优惠规则 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", oilPrice); } break; } //resultData = ResultData.success(resultMap); } return resultMap; } /** * 计算消费生成积分 */ public void calculateIntegralAndPushIntegral(CalculateIntegral calculateIntegral, CustomerManage customerManage){ int integral =0; //获取该油站的优惠方式 String discountPlanType = stationService.getStationDiscountWay(calculateIntegral.getStationId().toString()); IntegralRule integralRule = new IntegralRule(); integralRule.setStationId(calculateIntegral.getStationId()); integralRule.setEmptyDate(new Date()); integralRule.setOilName(calculateIntegral.getOilName()); integralRule.setOilType(calculateIntegral.getOilType()); //获取该油站的积分规则 List integralRuleList = integralRuleService.getIntegralRule(integralRule); if(integralRuleList !=null && integralRuleList.size() >0){ List integralRuleDetailList = integralRuleList.get(0).getIntegralRuleDetailList(); String currentTime = null; String datePickerTime=null; //活动时间 String[] datePickerTimeArray ={}; String integralActivity = integralRuleList.get(0).getIntegralActivity(); String integralProportion =null; if(integralActivity.equals("1")){ datePickerTime = integralRuleList.get(0).getDatePickerTime(); integralProportion = integralRuleList.get(0).getIntegralProportion(); if(datePickerTime.contains(",")){ datePickerTimeArray = datePickerTime.split(","); }else { datePickerTimeArray= new String[1]; datePickerTimeArray[0] = datePickerTime; } } if(integralRuleDetailList !=null && integralRuleDetailList.size() >0){ Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); //获取当前时间 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 = null; BigDecimal multiply = null; //判断油站配置的优惠类型 if(discountPlanType.equals("1") && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){ //等级直降 divide = calculateIntegral.getAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN); multiply = divide.multiply(integralRuleDetail.getIntegral()); }else { divide = calculateIntegral.getAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN); multiply = divide.multiply(integralRuleDetail.getIntegral()); } if(integralActivity.equals("1") && datePickerTimeArray !=null && integralProportion !=null){ String datePicker = integralRuleList.get(0).getDatePicker(); switch (datePicker){ case "1": // 1.按周来 int day_Week = calendar.get(Calendar.DAY_OF_WEEK); day_Week= day_Week-1; //减一原因:数据库存的下标从零开始 currentTime = String.valueOf(day_Week); break; case "2": // 2.每月的多少号 int day_month = calendar.get(Calendar.DAY_OF_MONTH); day_month = day_month-1; //减一原因:数据库存的下标从零开始 currentTime = String.valueOf(day_month); //当前时间 break; case "3": // 3.固定日期 currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间 break; } for (String s : datePickerTimeArray){ if(s.equals(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 = null; BigDecimal multiply = null; //判断油站配置的优惠类型 if(discountPlanType.equals("1") && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){ //等级直降 divide = calculateIntegral.getReceivableAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN); multiply = divide.multiply(integralRuleDetail.getIntegral()); }else { divide = calculateIntegral.getReceivableAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN); multiply = divide.multiply(integralRuleDetail.getIntegral()); } if(integralActivity.equals("1") && datePickerTimeArray !=null && integralProportion !=null){ String datePicker = integralRuleList.get(0).getDatePicker(); switch (datePicker){ case "1": // 1.按周来 int day_Week = calendar.get(Calendar.DAY_OF_WEEK); day_Week= day_Week-1; //减一原因:数据库存的下标从零开始 currentTime = String.valueOf(day_Week); break; case "2": // 2.每月的多少号 int day_month = calendar.get(Calendar.DAY_OF_MONTH); day_month = day_month-1; //减一原因:数据库存的下标从零开始 currentTime = String.valueOf(day_month); //当前时间 break; case "3": // 3.固定日期 currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间 break; } for (String s : datePickerTimeArray){ if(s.equals(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 = null; BigDecimal multiply = null; //判断油站配置的优惠类型 if(discountPlanType.equals("1") && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){ //等级直降 divide = calculateIntegral.getOilLiters().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN); multiply = divide.multiply(integralRuleDetail.getIntegral()); }else { divide = calculateIntegral.getOilLiters().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN); multiply = divide.multiply(integralRuleDetail.getIntegral()); } if(integralActivity.equals("1") && datePickerTimeArray !=null && integralProportion !=null){ String datePicker = integralRuleList.get(0).getDatePicker(); switch (datePicker){ case "1": // 1.按周来 int day_Week = calendar.get(Calendar.DAY_OF_WEEK); day_Week= day_Week-1; //减一原因:数据库存的下标从零开始 currentTime = String.valueOf(day_Week); break; case "2": // 2.每月的多少号 int day_month = calendar.get(Calendar.DAY_OF_MONTH); day_month = day_month-1; //减一原因:数据库存的下标从零开始 currentTime = String.valueOf(day_month); //当前时间 break; case "3": // 3.固定日期 currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间 break; } for (String s : datePickerTimeArray){ if(s.equals(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 = null; BigDecimal multiply = null; //判断油站配置的优惠类型 if(discountPlanType.equals("1") && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){ //等级直降 divide = calculateIntegral.getReceivableAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN); multiply = divide.multiply(integralRuleDetail.getIntegral()); }else { divide = calculateIntegral.getReceivableAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN); multiply = divide.multiply(integralRuleDetail.getIntegral()); } if(integralActivity.equals("1") && datePickerTimeArray !=null && integralProportion !=null){ String datePicker = integralRuleList.get(0).getDatePicker(); switch (datePicker){ case "1": // 1.按周来 int day_Week = calendar.get(Calendar.DAY_OF_WEEK); day_Week= day_Week-1; //减一原因:数据库存的下标从零开始 currentTime = String.valueOf(day_Week); break; case "2": // 2.每月的多少号 int day_month = calendar.get(Calendar.DAY_OF_MONTH); day_month = day_month-1; //减一原因:数据库存的下标从零开始 currentTime = String.valueOf(day_month); //当前时间 break; case "3": // 3.固定日期 currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间 break; } for (String s : datePickerTimeArray){ if(s.equals(currentTime)){ multiply = multiply.multiply(new BigDecimal(integralProportion)); break; } } } integral = multiply.intValue(); break; } } } } calculateIntegral.setIntegral(integral); this.pushIntegral(calculateIntegral); } } /* * 公众号推送积分 * @param stationId 油站ID * @param integral 本次所得积分 * @param openId 小程序用户openID */ public void pushIntegral(CalculateIntegral calculateIntegral){ Integer stationId = calculateIntegral.getStationId(); int integral = calculateIntegral.getIntegral(); String openId = calculateIntegral.getOpenId(); String unionId = calculateIntegral.getUnionId(); String gzhAppId =""; String gzhAppSecret =""; String stationName = ""; //油站名称 BigDecimal surplusIntegral=null; String customerName =null; if(StringUtils.isNotBlank(openId)){ Map 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.setUnionId(unionId); CustomerPoints customerPointsInfo = customerPointsService.getCustomerPointsInfoByUnionId(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 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()+" 分")); GzhNewsTemplate gzhNewsTemplate = new GzhNewsTemplate(); gzhNewsTemplate.setStationId(stationId); gzhNewsTemplate.setTemplateType("1"); GzhNewsTemplate gzhNewsTemplateInfo = gzhNewsTemplateService.getGzhNewsTemplate(gzhNewsTemplate); if(gzhNewsTemplateInfo !=null && gzhNewsTemplateInfo.getTemplateId() !=null){ wxPushUtil.push(gzhAppId, gzhAppSecret, gzhNewsTemplateInfo.getTemplateId(), blogOpenId, wxMpTemplate); } } } } } /** * 根据订单号获取订单信息 * produces="application/json;charset=UTF-8",consumes = "application/json", * @RequestBody String orderno * @param * @return */ @RequestMapping(value = "/getPayOrderList", method = RequestMethod.GET) @ResponseBody public String getPayOrderList(@RequestParam String orderNo,String openId,String userType){ Gson gson =new Gson(); ResultData resultData =null; //根据token 和 usertype来判断用户是否存在 boolean flag = appUserInfoService.selectAppUserInfo(openId,userType); if(flag){ if(StringUtils.isNotBlank(orderNo)){ PayOrderRequest payOrderRequest =new PayOrderRequest(); payOrderRequest.setOrderNo(orderNo); List payOrderList = payOrderService.getPayOrderList(payOrderRequest.getOrderNo()); resultData=ResultData.success(payOrderList); }else { resultData=ResultData.error(CodeMsg.SEARCH_FAIL); } }else{ resultData=ResultData.error(CodeMsg.USER_NOT_EXSIST); } return gson.toJson(resultData); } /* * 根据用户openId和用户类型userType查询用户订单 * @param openId * @param userType * @return */ @RequestMapping(value = "/getOrderListByOpenIdAndUserType", method = RequestMethod.GET) @ResponseBody public String getOrderListByOpenIdAndUserType(@RequestParam("openId") String openId, @RequestParam("userType") String userType){ Gson gson =new Gson(); ResultData resultData =null; if(StringUtils.isNotBlank(openId) && StringUtils.isNotBlank(userType)){ AppUserInfo appUserInfo = new AppUserInfo(); switch (userType){ case "1": appUserInfo.setBlogOpenid(openId); break; case "2": appUserInfo.setMinaOpenid(openId); break; } List payOrderList = payOrderService.getOrderListByOpenIdAndUserType(appUserInfo); resultData=ResultData.success(payOrderList); }else { resultData=ResultData.error(CodeMsg.SEARCH_FAIL); } return gson.toJson(resultData); } }