|
@@ -6,9 +6,7 @@ import com.alibaba.fastjson.parser.Feature;
|
|
|
import com.google.gson.Gson;
|
|
|
import com.platform.yijia.param.request.RechargeBalance;
|
|
|
import com.platform.yijia.pojo.*;
|
|
|
-import com.platform.yijia.service.ElectronicMembershipCardService;
|
|
|
-import com.platform.yijia.service.GzhNewsTemplateService;
|
|
|
-import com.platform.yijia.service.StationService;
|
|
|
+import com.platform.yijia.service.*;
|
|
|
import com.platform.yijia.utils.*;
|
|
|
import com.platform.yijia.utils.weixinapp.WxPushUtil;
|
|
|
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
|
|
@@ -21,6 +19,7 @@ import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
|
|
@@ -43,6 +42,18 @@ public class ElectronicMembershipCardController {
|
|
|
private GzhNewsTemplateService gzhNewsTemplateService;
|
|
|
@Resource
|
|
|
private WxPushUtil wxPushUtil;
|
|
|
+ @Resource
|
|
|
+ private PayOrderService payOrderService;
|
|
|
+ @Resource
|
|
|
+ private CustomerGradeServices customerGradeServices;
|
|
|
+ @Resource
|
|
|
+ private CustomerManagerService customerManagerService;
|
|
|
+ @Resource
|
|
|
+ private CustomerPointsService customerPointsService;
|
|
|
+ @Resource
|
|
|
+ private IntegralRuleService integralRuleService;
|
|
|
+ @Resource
|
|
|
+ private CustomerPointsRecordService customerPointsRecordService;
|
|
|
|
|
|
//查询该油站是否启用电子会员卡
|
|
|
@RequestMapping(value = "/getStationCardEnabledFlag", method = RequestMethod.GET)
|
|
@@ -240,6 +251,173 @@ public class ElectronicMembershipCardController {
|
|
|
return gson.toJson(resultData);
|
|
|
}
|
|
|
|
|
|
+ //电子卡支付
|
|
|
+ @RequestMapping(value = "/dzkPaySet", method = RequestMethod.GET)
|
|
|
+ @ResponseBody
|
|
|
+ @Transactional
|
|
|
+ public String dzkPaySet(@RequestParam String ordNo) throws ParseException {
|
|
|
+ Gson gson =new Gson();
|
|
|
+ ResultData resultData =ResultData.success(CodeMsg.SELECT_ORDER_ERROR);
|
|
|
+ if(ordNo !=null){
|
|
|
+ PayOrder payOrder = new PayOrder();
|
|
|
+ payOrder.setOrderNo(ordNo);
|
|
|
+ //获取用户订单信息
|
|
|
+ Map<String, Object> resultMap = payOrderService.getOrderInfoAndUserInfoByOrderNo(payOrder);
|
|
|
+ if(resultMap !=null && resultMap.get("status").toString().equals("0")){
|
|
|
+ String stationId = resultMap.get("stationId").toString();
|
|
|
+ String oilName =resultMap.get("oilName").toString();
|
|
|
+ String mobilePhone =resultMap.get("mobilePhone").toString();
|
|
|
+ String unionId =resultMap.get("unionId").toString();
|
|
|
+ String minaOpenid =resultMap.get("minaOpenid").toString();
|
|
|
+ String consumerId =resultMap.get("consumerId").toString();
|
|
|
+ String registeDate =resultMap.get("registeDate").toString();
|
|
|
+ String stationName =resultMap.get("stationName").toString();
|
|
|
+ String consumer =resultMap.get("consumer").toString();
|
|
|
+ String oilLiters = resultMap.get("orderLiters").toString(); //orderLiters
|
|
|
+ String receivableAmt = resultMap.get("receivableAmt").toString();
|
|
|
+ String amt = resultMap.get("amt").toString();
|
|
|
+ String orderType = resultMap.get("orderType").toString();
|
|
|
+
|
|
|
+ CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord(); //电子会员卡插入消费记录
|
|
|
+ BigDecimal balance = null; //电子会员卡余额
|
|
|
+ CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
|
|
|
+ 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.setCardOilsType(cardOilsType);
|
|
|
+ customerElectronicCard.setUnionId(resultMap.get("unionId").toString());
|
|
|
+ customerElectronicCard.setStationId(Integer.valueOf(resultMap.get("stationId").toString()));
|
|
|
+ //获取用户电子会员卡信息
|
|
|
+ CustomerElectronicCard cardInfo = electronicMembershipCardService.getElectronicCardInfoByUnionId(customerElectronicCard);
|
|
|
+ if(cardInfo !=null ){
|
|
|
+ customerCardUseRecord.setOrderNo(ordNo); //电子会员卡记录订单号
|
|
|
+ customerCardUseRecord.setUnionId(cardInfo.getUnionId()); //电子会员卡记录用户唯一标识
|
|
|
+ customerCardUseRecord.setCustomerNo(cardInfo.getCustomerNo());
|
|
|
+ customerCardUseRecord.setAmt(new BigDecimal(amt)); //电子会员卡记录用户余额
|
|
|
+ customerCardUseRecord.setStatus("1");
|
|
|
+ customerCardUseRecord.setCardOilsType(cardInfo.getCardOilsType());
|
|
|
+ customerCardUseRecord.setBalance(cardInfo.getAmt().subtract(new BigDecimal(amt)));
|
|
|
+ customerCardUseRecord.setStationName(cardInfo.getStationName());
|
|
|
+ customerCardUseRecord.setStationId(cardInfo.getStationId());
|
|
|
+ customerCardUseRecord.setUsageType("-");
|
|
|
+ customerCardUseRecord.setCustomerName(payOrder.getConsumer());
|
|
|
+ customerCardUseRecord.setCreateTime(new Date());
|
|
|
+ balance = cardInfo.getAmt();
|
|
|
+ }
|
|
|
+ //判断订单金额是否小于电子会员卡的余额
|
|
|
+ if(balance !=null && customerCardUseRecord.getAmt().compareTo(balance) == -1){
|
|
|
+ electronicMembershipCardService.insetCardUseRecordConsumption(customerCardUseRecord);
|
|
|
+ //更新电子会员卡余额
|
|
|
+ CustomerElectronicCard c = new CustomerElectronicCard();
|
|
|
+ c.setAmt(balance.subtract(customerCardUseRecord.getAmt()));
|
|
|
+ c.setUnionId(customerCardUseRecord.getUnionId());
|
|
|
+ c.setStationId(customerCardUseRecord.getStationId());
|
|
|
+ c.setCardOilsType(cardOilsType);
|
|
|
+ electronicMembershipCardService.updateElectronicCardInfoByUnionId(c);
|
|
|
+ payOrder.setPayType("dzk"); //支付方式 //支付类型
|
|
|
+ payOrder.setStatus("1");
|
|
|
+ payOrder.setPayDate(new Date()); //支付时间
|
|
|
+ payOrderService.getUpdatePayOrder(payOrder);
|
|
|
+ //更新客户表
|
|
|
+ CustomerManage customerManage = new CustomerManage();
|
|
|
+ customerManage.setStationId(Integer.valueOf(stationId));
|
|
|
+ customerManage.setMinaOpenid(minaOpenid);
|
|
|
+ customerManage.setOilName(oilName);
|
|
|
+ customerManage.setPhoneNumber(mobilePhone);
|
|
|
+ Map<String, Object> params_1 = new HashMap<>();
|
|
|
+ params_1.put("stationId", stationId);
|
|
|
+ params_1.put("oilName", oilName);
|
|
|
+ //获取该油站的优惠方式
|
|
|
+ String discountPlanType = stationService.getStationDiscountWay(stationId);
|
|
|
+ logger.info("油站优惠方式:"+discountPlanType);
|
|
|
+ CustomerManage customerManageInfo = customerManagerService.getCustomerManageInfo(customerManage);
|
|
|
+ if(customerManageInfo !=null){
|
|
|
+ customerManage.setPhoneNumber(mobilePhone);
|
|
|
+ customerManage.setAmt(customerManageInfo.getAmt().add(new BigDecimal(amt)));
|
|
|
+ customerManage.setLiters(customerManageInfo.getLiters().add(new BigDecimal(oilLiters)));
|
|
|
+ if(discountPlanType !=null && discountPlanType.equals("1")){
|
|
|
+ List<Map> customerGradeInfo = customerGradeServices.getCustomerGradeList(params_1); //直降
|
|
|
+ logger.info("该站直降等级信息:"+ customerGradeInfo);
|
|
|
+ for (Map m: customerGradeInfo){
|
|
|
+ if(Double.valueOf(customerManage.getAmt().toString()) >= Double.valueOf(m.get("memberConditStart").toString()) && Double.valueOf(customerManage.getAmt().toString()) < Double.valueOf(m.get("memberConditEnd").toString())){
|
|
|
+ customerManage.setGrade(m.get("grade").toString()); //存入等级名称
|
|
|
+ customerManage.setMemberGrade(m.get("id").toString()); //存入等级ID
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ logger.info("直降等级信息是否存入客户表:"+ "直降ID:"+ customerManage.getMemberGrade()+ "直降名称: "+customerManage.getGrade());
|
|
|
+ }
|
|
|
+ customerManagerService.updateCustomerInfo(customerManage);
|
|
|
+ }else {
|
|
|
+ customerManage.setCustomerName(consumer);
|
|
|
+ customerManage.setStationName(stationName);
|
|
|
+ customerManage.setLiters(new BigDecimal(oilLiters));
|
|
|
+ customerManage.setAmt(new BigDecimal(amt));
|
|
|
+ customerManage.setPhoneNumber(mobilePhone);
|
|
|
+ customerManage.setMinaUserId(Integer.valueOf(consumerId));
|
|
|
+ customerManage.setUnionId(unionId);
|
|
|
+ customerManage.setRegtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(registeDate));
|
|
|
+ if(discountPlanType !=null && discountPlanType.equals("1")){
|
|
|
+ List<Map> customerGradeInfo = customerGradeServices.getCustomerGradeList(params_1); //直降
|
|
|
+ logger.info("该站直降等级信息:"+ customerGradeInfo);
|
|
|
+ if(customerGradeInfo !=null && customerGradeInfo.size() >0){
|
|
|
+ customerManage.setGrade(customerGradeInfo.get(0).get("grade").toString()); //存入等级名称
|
|
|
+ customerManage.setMemberGrade(customerGradeInfo.get(0).get("id").toString()); //存入等级ID
|
|
|
+ }
|
|
|
+ logger.info("直降等级信息是否存入客户表:"+ "直降ID:"+ customerManage.getMemberGrade()+ "直降名称: "+customerManage.getGrade());
|
|
|
+ }
|
|
|
+ customerManagerService.insertCustomerInfo(customerManage);
|
|
|
+ }
|
|
|
+
|
|
|
+ StationPayManage stationPayManage = new StationPayManage();
|
|
|
+ stationPayManage.setStationId(Integer.valueOf(stationId));
|
|
|
+ StationPayManage stationPayManageInfo = stationService.selectStationPayManage(stationPayManage);
|
|
|
+ //是否启用积分功能
|
|
|
+ if(stationPayManageInfo !=null && stationPayManageInfo.getIntegralFlag().equals("1")){
|
|
|
+ //计算积分
|
|
|
+ CalculateIntegral calculateIntegral = new CalculateIntegral();
|
|
|
+ calculateIntegral.setAmt(new BigDecimal(amt));
|
|
|
+ calculateIntegral.setReceivableAmt(new BigDecimal(receivableAmt));
|
|
|
+ calculateIntegral.setOilLiters(new BigDecimal(oilLiters));
|
|
|
+ calculateIntegral.setOilName(oilName);
|
|
|
+ calculateIntegral.setOilType(orderType);
|
|
|
+ calculateIntegral.setStationId(Integer.valueOf(stationId));
|
|
|
+ calculateIntegral.setUnionId(unionId);
|
|
|
+ calculateIntegral.setOpenId(minaOpenid); //小程序openId
|
|
|
+ //计算积分且推送积分
|
|
|
+ calculateIntegralAndPushIntegral(calculateIntegral, customerManage);
|
|
|
+ }
|
|
|
+ resultData = ResultData.success(CodeMsg.SUCCESS);
|
|
|
+ }else {
|
|
|
+ resultData=ResultData.error(CodeMsg.BALANCE_NOT_EENOUGH);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ resultData=ResultData.error(CodeMsg.NO_ORDER);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return gson.toJson(resultData);
|
|
|
+ }
|
|
|
+
|
|
|
//用户充值电子会员卡(储蓄卡)拉起随行付支付接口
|
|
|
@RequestMapping(value = "/rechargeBalanceSXFPay", method = RequestMethod.POST)
|
|
|
@ResponseBody
|
|
@@ -561,16 +739,16 @@ public class ElectronicMembershipCardController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //获取用户电子会员卡(储蓄卡)充值记录
|
|
|
- @RequestMapping(value = "/getCardRechargeRecord", method = RequestMethod.GET)
|
|
|
+ //获取用户电子会员卡(储蓄卡)充值消费记录
|
|
|
+ @RequestMapping(value = "/getCardRecordList", method = RequestMethod.GET)
|
|
|
@ResponseBody
|
|
|
- public String getCardRechargeRecord(@RequestParam Integer stationId, String unionId){
|
|
|
+ public String getCardRecordList(@RequestParam Integer stationId, String unionId, String usageType){
|
|
|
Gson gson =new Gson();
|
|
|
//返回结果集
|
|
|
ResultData resultData = null;
|
|
|
if(stationId !=null && unionId !=null){
|
|
|
CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord();
|
|
|
- customerCardUseRecord.setUsageType("recharge"); // 'recharge' 代表充值
|
|
|
+ customerCardUseRecord.setUsageType(usageType); // '1' 代表充值 '0' 代表消费
|
|
|
customerCardUseRecord.setStationId(stationId);
|
|
|
customerCardUseRecord.setUnionId(unionId);
|
|
|
List<CustomerCardUseRecord> cardUseRecordList = electronicMembershipCardService.getCardUseRecordList(customerCardUseRecord);
|
|
@@ -581,26 +759,6 @@ public class ElectronicMembershipCardController {
|
|
|
return gson.toJson(resultData);
|
|
|
}
|
|
|
|
|
|
- //获取用户电子会员卡(储蓄卡)消费记录
|
|
|
- @RequestMapping(value = "/getCardConsumptionRecord", method = RequestMethod.GET)
|
|
|
- @ResponseBody
|
|
|
- public String getCardConsumptionRecord(@RequestParam Integer stationId, String unionId){
|
|
|
- Gson gson =new Gson();
|
|
|
- //返回结果集
|
|
|
- ResultData resultData = null;
|
|
|
- if(stationId !=null && unionId !=null){
|
|
|
- CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord();
|
|
|
- customerCardUseRecord.setUnionId(unionId);
|
|
|
- customerCardUseRecord.setStationId(stationId);
|
|
|
- customerCardUseRecord.setUsageType("consumption"); // 'consumption' 代表消费
|
|
|
- List<CustomerCardUseRecord> cardUseRecordList = electronicMembershipCardService.getCardUseRecordList(customerCardUseRecord);
|
|
|
- resultData = ResultData.success(cardUseRecordList);
|
|
|
- }else {
|
|
|
- resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
|
|
|
- }
|
|
|
- return gson.toJson(resultData);
|
|
|
- }
|
|
|
-
|
|
|
//查询油站电子会员卡(储蓄卡)充值设置规则
|
|
|
@RequestMapping(value = "/getCardRechargeSettingList", method = RequestMethod.GET)
|
|
|
@ResponseBody
|
|
@@ -621,4 +779,312 @@ public class ElectronicMembershipCardController {
|
|
|
return gson.toJson(resultData);
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * 计算消费生成积分
|
|
|
+ * 注释: 1.判断油站配置的优惠类型
|
|
|
+ * 2.如果是等级直降则存在等级取对应等级的积分规则,否则按照其他优惠方式
|
|
|
+ */
|
|
|
+ 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<IntegralRule> integralRuleList = integralRuleService.getIntegralRule(integralRule);
|
|
|
+ if(integralRuleList !=null && integralRuleList.size() >0){
|
|
|
+ logger.info("该油站积分规则信息:" + integralRuleList.toString());
|
|
|
+ List<IntegralRuleDetail> integralRuleDetailList = integralRuleList.get(0).getIntegralRuleDetailList();
|
|
|
+ String currentTime = null; //当前时间
|
|
|
+ String datePickerTime=null; //活动时间
|
|
|
+ String[] datePickerTimeArray ={};
|
|
|
+ String integralActivity = integralRuleList.get(0).getIntegralActivity();
|
|
|
+ String integralProportion =null;
|
|
|
+ if(integralActivity !=null && 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 !=null && 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();
|
|
|
+ logger.info("本次客户所得积分:" + integral);
|
|
|
+ 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 !=null && 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();
|
|
|
+ logger.info("本次客户所得积分:" + integral);
|
|
|
+ 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 !=null && 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();
|
|
|
+ logger.info("本次客户所得积分:" + integral);
|
|
|
+ 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 !=null && 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();
|
|
|
+ logger.info("本次客户所得积分:" + integral);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ calculateIntegral.setIntegral(integral);
|
|
|
+ this.pushIntegral(calculateIntegral);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新积分并公众号推送积分
|
|
|
+ public void pushIntegral(CalculateIntegral calculateIntegral){
|
|
|
+ String gzhAppId ="";
|
|
|
+ String gzhAppSecret ="";
|
|
|
+ String stationName = ""; //油站名称
|
|
|
+ BigDecimal surplusIntegral=null;
|
|
|
+ String customerName =calculateIntegral.getNickName(); //客户昵称
|
|
|
+ String openId = calculateIntegral.getOpenId(); //客户小程序ID
|
|
|
+ Integer stationId = calculateIntegral.getStationId(); //油站ID
|
|
|
+ int integral = calculateIntegral.getIntegral(); //当前加油积分
|
|
|
+ String unionId = calculateIntegral.getUnionId();
|
|
|
+ String mobilePhone = calculateIntegral.getMobilePhone();
|
|
|
+ logger.info("客户小程序openId:" + openId);
|
|
|
+ if(StringUtils.isNotBlank(calculateIntegral.getOpenId())){
|
|
|
+ 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(calculateIntegral.getStationId());
|
|
|
+ customerPoints.setMinaOpenId(openId);
|
|
|
+ customerPoints.setUnionId(calculateIntegral.getUnionId());
|
|
|
+ CustomerPoints customerPointsInfo = customerPointsService.getCustomerPointsInfoByUnionId(customerPoints);
|
|
|
+ if(customerPointsInfo !=null){
|
|
|
+ logger.info("当前存在客户:"+ customerPointsInfo.getMinaOpenId());
|
|
|
+ logger.info("当前客户原有剩余积分:"+ customerPointsInfo.getPoints().toString());
|
|
|
+ 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());
|
|
|
+ logger.info("本次加油后客户应有总积分:"+ customerPoints.getPoints().toString());
|
|
|
+ //用户已累积积分
|
|
|
+ BigDecimal add = new BigDecimal(customerPointsInfo.getAccumulatePoints()).add(new BigDecimal(integral));
|
|
|
+ customerPoints.setAccumulatePoints(add.intValue());
|
|
|
+ //更新客户积分
|
|
|
+ customerPointsService.updateCustomerPointsInfo(customerPoints);
|
|
|
+ logger.info("更新客户积分信息成功!");
|
|
|
+ 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()+" 分"));
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }else {
|
|
|
+ logger.info("当前系统不存在该客户积分信息");
|
|
|
+ //customerName =userName;
|
|
|
+ surplusIntegral =new BigDecimal(integral);
|
|
|
+ CustomerPointsRecord customerPointsRecord = new CustomerPointsRecord();
|
|
|
+ customerPointsRecord.setCreateTime(new Date());
|
|
|
+ customerPointsRecord.setCustomerName(customerName);
|
|
|
+ customerPointsRecord.setStationName(stationName);
|
|
|
+ customerPointsRecord.setStationId(stationId);
|
|
|
+ customerPointsRecord.setRecordType("+");
|
|
|
+ customerPointsRecord.setUnionId(unionId);
|
|
|
+ customerPointsRecord.setIntegral(integral);
|
|
|
+ customerPointsRecordService.insertCustomerPointsRecordInfo(customerPointsRecord);
|
|
|
+
|
|
|
+ customerPoints.setUnionId(unionId);
|
|
|
+ customerPoints.setPoints(surplusIntegral.intValue());
|
|
|
+ customerPoints.setPoints(integral);
|
|
|
+ customerPoints.setConsumptionPoints(0);
|
|
|
+ customerPoints.setMobilePhone(mobilePhone);
|
|
|
+ customerPoints.setCustomerName(customerName);
|
|
|
+ customerPoints.setStationName(stationName);
|
|
|
+ customerPoints.setAccumulatePoints(integral);
|
|
|
+ customerPoints.setInvalidPoints(0);
|
|
|
+ customerPoints.setCreateTime(new Date());
|
|
|
+ //新增客户积分
|
|
|
+ customerPointsService.insertCustomerPointsInfo(customerPoints);
|
|
|
+ logger.info("新增客户积分信息成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|