diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java b/mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java index efb78d4b3..d09d68f73 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java +++ b/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 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; } diff --git a/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java b/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java index c04e59669..3de2b470a 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java +++ b/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); + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index 735258abb..7deb87054 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/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()); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java index 6c28a4df1..e3dfa1634 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java +++ b/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; + } }