Просмотр исходного кода

[支付成长值][修改]:基于业态设定不同的成长值

release_toaliyun_real
Stormeye Wu 7 лет назад
Родитель
Сommit
3d9b634a91
4 измененных файлов: 74 добавлений и 66 удалений
  1. +20
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java
  2. +5
    -0
      mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java
  3. +2
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java
  4. +47
    -64
      mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java

+ 20
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java Просмотреть файл

@@ -129,6 +129,26 @@ public class WxScoreRules implements Serializable {
return null;
}

public JSONObject getRuleObj(EnumScoreType scoreType) {
if (rules == null)
return null;

List<JSONObject> list = JSONObject.parseArray(rules, JSONObject.class);
if (list == null)
return null;
if (list.size() == 0)
return null;

for (JSONObject jo:list) {
Integer id = jo.getInteger(WxScoreRules.ID);
if ( id!= null && id.equals(scoreType.getCode())){
return jo;
}
}

return null;
}

public Date getCreateDate() {
return createDate;
}


+ 5
- 0
mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java Просмотреть файл

@@ -27,4 +27,9 @@ public interface WxScoreRulesService {
*/
int addScore(EnumScoreType scoreType, Object param);

/**
* 增加成长值
*/
int addScore2(EnumScoreType scoreType, Object param1, Object param2);

}

+ 2
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java Просмотреть файл

@@ -685,7 +685,7 @@ public class WxOrderServiceImpl implements WxOrderService {

// 成长值 计算
try {
wxScoreRulesService.addScore(EnumScoreType.CONSUMPTION,updateOrder);
wxScoreRulesService.addScore2(EnumScoreType.CONSUMPTION, updateOrder, coupon.getBusiness());
} catch (Exception e) {
logger.error("成长值:" + e.getMessage());
}
@@ -715,7 +715,7 @@ public class WxOrderServiceImpl implements WxOrderService {

// 成长值 计算
try {
wxScoreRulesService.addScore(EnumScoreType.CONSUMPTION,updateOrder);
wxScoreRulesService.addScore2(EnumScoreType.CONSUMPTION, updateOrder, "6"); // bussinessId 6 其他
} catch (Exception e) {
logger.error("成长值:" + e.getMessage());
}


+ 47
- 64
mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java Просмотреть файл

@@ -1,5 +1,6 @@
package com.iformall.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.iformall.common.IdWorker;
import com.iformall.domain.po.*;
import com.iformall.enums.EnumScoreType;
@@ -141,20 +142,12 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService {
user.setScore(addScoreNumber);

// 3. 记录历史
final IdWorker idWorker = IdWorker.get();
WxScoreHistory history = new WxScoreHistory();
history.setId(idWorker.nextId());
history.setTenantId(user.getTenantId());
history.setCUserId(user.getId());
history.setCreateDate(new Date());
history.setScoreType(EnumScoreType.LOGIN.getCode());
history.setScoreAmount(addScoreNumber);
wxScoreHistoryMapper.insert(history);
recordScoreHistory(addScoreNumber, user.getTenantId(), user.getId(), EnumScoreType.LOGIN);

return addScoreNumber;
}

private int payAddScore(WxOrder order) {
private int payAddScore(WxOrder order, String bussinessId) {
int addScoreNumber = 0;
// 订单金额为0时不计入
if (order.getPayment() == 0)
@@ -162,30 +155,29 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService {
// 1. 获取score rules
WxScoreRules scoreRules = getScoreRules(order.getTenantId());

// 2. 获取成长值
int priceCondition = scoreRules.getRule(EnumScoreType.CONSUMPTION,WxScoreRules.STEP) * 100; // 元->分
int baseScore = scoreRules.getRule(EnumScoreType.CONSUMPTION,WxScoreRules.SCORE);//消费增长积分
// 2. 获取成长值 by id
JSONObject payRule = scoreRules.getRuleObj(EnumScoreType.CONSUMPTION);
// 3. 获取成长值 by 业态
JSONObject busRule = payRule.getJSONObject(bussinessId);
if(busRule == null) {
busRule = payRule.getJSONObject("6"); // 其他 bussinessId 6
}
if (busRule == null) {
busRule = payRule;
}
int priceCondition = busRule.getInteger(WxScoreRules.STEP) * 100; // 元->分
int baseScore = busRule.getInteger(WxScoreRules.SCORE); // 消费增长积分

// 3. 计算成长值
// 4. 计算成长值
Long dScoreT = Math.round(order.getPayment() * 1.0d / priceCondition * baseScore);
addScoreNumber = dScoreT.intValue();

// 4. 增长的成长值
// 5. 增长的成长值
updateScore(order.getCUserId(), addScoreNumber);

// 5. 记录历史
final IdWorker idWorker = IdWorker.get();
WxScoreHistory history = new WxScoreHistory();
history.setId(idWorker.nextId());
history.setTenantId(order.getTenantId());
history.setCUserId(order.getCUserId());
history.setCreateDate(new Date());
history.setScoreType(EnumScoreType.CONSUMPTION.getCode());
history.setOrderId(order.getId());
history.setPayType(order.getPaymentType());
history.setPayAmount(order.getPayment());
history.setScoreAmount(addScoreNumber);
wxScoreHistoryMapper.insert(history);
// 6. 记录历史
recordScoreHistory(addScoreNumber, order.getTenantId(), order.getCUserId(), EnumScoreType.CONSUMPTION);

return addScoreNumber;
}

@@ -202,15 +194,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService {
updateScore(userCar.getCUserId(), addScoreNumber);

// 4. 记录历史
final IdWorker idWorker = IdWorker.get();
WxScoreHistory history = new WxScoreHistory();
history.setId(idWorker.nextId());
history.setTenantId(userCar.getTenantId());
history.setCUserId(userCar.getCUserId());
history.setCreateDate(new Date());
history.setScoreType(EnumScoreType.BIND_CAR.getCode());
history.setScoreAmount(addScoreNumber);
wxScoreHistoryMapper.insert(history);
recordScoreHistory(addScoreNumber, userCar.getTenantId(), userCar.getCUserId(), EnumScoreType.BIND_CAR);
return addScoreNumber;
}

@@ -231,15 +215,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService {
updateScore(user.getId(), addScoreNumber);

// 4. 记录历史
final IdWorker idWorker = IdWorker.get();
WxScoreHistory history = new WxScoreHistory();
history.setId(idWorker.nextId());
history.setTenantId(user.getTenantId());
history.setCUserId(user.getId());
history.setCreateDate(new Date());
history.setScoreType(EnumScoreType.WECHAT_PERSION.getCode());
history.setScoreAmount(addScoreNumber);
wxScoreHistoryMapper.insert(history);
recordScoreHistory(addScoreNumber, user.getTenantId(), user.getId(), EnumScoreType.WECHAT_PERSION);
return addScoreNumber;
}

@@ -255,15 +231,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService {
updateScore(user.getId(), addScoreNumber);

// 4. 记录历史
final IdWorker idWorker = IdWorker.get();
WxScoreHistory history = new WxScoreHistory();
history.setId(idWorker.nextId());
history.setTenantId(user.getTenantId());
history.setCUserId(user.getId());
history.setCreateDate(new Date());
history.setScoreType(EnumScoreType.WECHAT_PHONE.getCode());
history.setScoreAmount(addScoreNumber);
wxScoreHistoryMapper.insert(history);
recordScoreHistory(addScoreNumber, user.getTenantId(), user.getId(), EnumScoreType.WECHAT_PHONE);
return addScoreNumber;
}

@@ -292,31 +260,31 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService {
updateScore(user.getId(), addScoreNumber);

// 4. 记录历史
recordScoreHistory(addScoreNumber, user.getTenantId(), user.getId(), EnumScoreType.COMPLETE_INFO);
return addScoreNumber;
}

private void recordScoreHistory(int addScoreNumber, String tenantId, Long id, EnumScoreType wechatPhone) {
final IdWorker idWorker = IdWorker.get();
WxScoreHistory history = new WxScoreHistory();
history.setId(idWorker.nextId());
history.setTenantId(user.getTenantId());
history.setCUserId(user.getId());
history.setTenantId(tenantId);
history.setCUserId(id);
history.setCreateDate(new Date());
history.setScoreType(EnumScoreType.COMPLETE_INFO.getCode());
history.setScoreType(wechatPhone.getCode());
history.setScoreAmount(addScoreNumber);
wxScoreHistoryMapper.insert(history);
return addScoreNumber;
}


@Override
public int addScore(EnumScoreType scoreType ,Object param) {
public int addScore(EnumScoreType scoreType, Object param) {

switch (scoreType){
case LOGIN: {
WxCUser user = (WxCUser) param;
return loginAddScore(user);
}
case CONSUMPTION: {
WxOrder order = (WxOrder) param;
return payAddScore(order);
}
case BIND_CAR:{
WxCUserCar userCar = (WxCUserCar) param;
return bindCarAddScore(userCar);
@@ -341,4 +309,19 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService {
}
return 0;
}

@Override
public int addScore2(EnumScoreType scoreType, Object param1, Object param2) {

switch (scoreType){
case CONSUMPTION: {
WxOrder order = (WxOrder) param1;
String bussinessId = param2.toString();
return payAddScore(order, bussinessId);
}
default: {
}
}
return 0;
}
}

Загрузка…
Отмена
Сохранить