|
@@ -269,6 +269,8 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
|
|
|
// 记录每个用户的原始积分(兑换前的值,用于显示“可兑换积分”)
|
|
// 记录每个用户的原始积分(兑换前的值,用于显示“可兑换积分”)
|
|
|
Map<String, Integer> originalBasicMap = new HashMap<>();
|
|
Map<String, Integer> originalBasicMap = new HashMap<>();
|
|
|
Map<String, Integer> originalContribMap = new HashMap<>();
|
|
Map<String, Integer> originalContribMap = new HashMap<>();
|
|
|
|
|
+ // 记录每个用户是否首次兑换(用于计算兑换金额)
|
|
|
|
|
+ Map<String, Boolean> isFirstExchangeMap = new HashMap<>();
|
|
|
// 记录参与兑换的用户ID(用于过滤导出列表)
|
|
// 记录参与兑换的用户ID(用于过滤导出列表)
|
|
|
java.util.Set<String> exchangedUserIds = new java.util.HashSet<>();
|
|
java.util.Set<String> exchangedUserIds = new java.util.HashSet<>();
|
|
|
|
|
|
|
@@ -292,6 +294,7 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
|
|
|
exchangeFlagDao.insert(flag);
|
|
exchangeFlagDao.insert(flag);
|
|
|
}
|
|
}
|
|
|
boolean isFirstExchange = (flag.getIsFirstExchanged() == 0 || flag.getIsFirstExchanged() == null);
|
|
boolean isFirstExchange = (flag.getIsFirstExchanged() == 0 || flag.getIsFirstExchanged() == null);
|
|
|
|
|
+ isFirstExchangeMap.put(userId, isFirstExchange);
|
|
|
int threshold = isFirstExchange ? firstThreshold : nonFirstThreshold;
|
|
int threshold = isFirstExchange ? firstThreshold : nonFirstThreshold;
|
|
|
int basicExchanged = 0;
|
|
int basicExchanged = 0;
|
|
|
if (basicPoints >= threshold) {
|
|
if (basicPoints >= threshold) {
|
|
@@ -374,6 +377,16 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
|
|
|
// 设置原始积分(可兑换积分)到新字段,不覆盖basicPoint/contributionPoint
|
|
// 设置原始积分(可兑换积分)到新字段,不覆盖basicPoint/contributionPoint
|
|
|
item.setOriginalBasicPoint(origBasic);
|
|
item.setOriginalBasicPoint(origBasic);
|
|
|
item.setOriginalContributionPoint(origContrib);
|
|
item.setOriginalContributionPoint(origContrib);
|
|
|
|
|
+
|
|
|
|
|
+ // 计算兑换金额
|
|
|
|
|
+ boolean isFirst = isFirstExchangeMap.containsKey(item.getUserId()) ? isFirstExchangeMap.get(item.getUserId()) : false;
|
|
|
|
|
+ int exchangeAmt;
|
|
|
|
|
+ if ("basic".equals(exchangeType)) {
|
|
|
|
|
+ exchangeAmt = calculateExchangeAmount("basic", exBasic, isFirst);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ exchangeAmt = calculateExchangeAmount("contribution", exContrib, false);
|
|
|
|
|
+ }
|
|
|
|
|
+ item.setExchangeAmount(exchangeAmt);
|
|
|
|
|
|
|
|
exportList.add(item);
|
|
exportList.add(item);
|
|
|
}
|
|
}
|
|
@@ -410,6 +423,8 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
|
|
|
Map<String, Integer> previewExchangedContribMap = new HashMap<>();
|
|
Map<String, Integer> previewExchangedContribMap = new HashMap<>();
|
|
|
Map<String, Integer> previewOriginalBasicMap = new HashMap<>();
|
|
Map<String, Integer> previewOriginalBasicMap = new HashMap<>();
|
|
|
Map<String, Integer> previewOriginalContribMap = new HashMap<>();
|
|
Map<String, Integer> previewOriginalContribMap = new HashMap<>();
|
|
|
|
|
+ // 记录每个用户是否首次兑换(用于计算兑换金额)
|
|
|
|
|
+ Map<String, Boolean> previewIsFirstExchangeMap = new HashMap<>();
|
|
|
|
|
|
|
|
// 3. 逐用户计算兑换情况(不写DB)
|
|
// 3. 逐用户计算兑换情况(不写DB)
|
|
|
for (String userId : userIdList) {
|
|
for (String userId : userIdList) {
|
|
@@ -420,6 +435,7 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
|
|
|
|
|
|
|
|
WorkKnowledgeBaseUserExchangeFlag flag = exchangeFlagDao.getByUserId(userId);
|
|
WorkKnowledgeBaseUserExchangeFlag flag = exchangeFlagDao.getByUserId(userId);
|
|
|
boolean isFirstExchange = (flag == null || flag.getIsFirstExchanged() == 0 || flag.getIsFirstExchanged() == null);
|
|
boolean isFirstExchange = (flag == null || flag.getIsFirstExchanged() == 0 || flag.getIsFirstExchanged() == null);
|
|
|
|
|
+ previewIsFirstExchangeMap.put(userId, isFirstExchange);
|
|
|
int threshold = isFirstExchange ? firstThreshold : nonFirstThreshold;
|
|
int threshold = isFirstExchange ? firstThreshold : nonFirstThreshold;
|
|
|
int basicExchanged = 0;
|
|
int basicExchanged = 0;
|
|
|
if (basicPoints >= threshold) {
|
|
if (basicPoints >= threshold) {
|
|
@@ -470,9 +486,30 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
|
|
|
item.setRemainingBasicPoint(currentBasic - exBasic);
|
|
item.setRemainingBasicPoint(currentBasic - exBasic);
|
|
|
item.setRemainingContributionPoint(currentContrib - exContrib);
|
|
item.setRemainingContributionPoint(currentContrib - exContrib);
|
|
|
|
|
|
|
|
|
|
+ // 计算兑换金额
|
|
|
|
|
+ boolean isFirst = previewIsFirstExchangeMap.containsKey(item.getUserId()) ? previewIsFirstExchangeMap.get(item.getUserId()) : false;
|
|
|
|
|
+ int exchangeAmt;
|
|
|
|
|
+ if ("basic".equals(exchangeType)) {
|
|
|
|
|
+ exchangeAmt = calculateExchangeAmount("basic", exBasic, isFirst);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ exchangeAmt = calculateExchangeAmount("contribution", exContrib, false);
|
|
|
|
|
+ }
|
|
|
|
|
+ item.setExchangeAmount(exchangeAmt);
|
|
|
|
|
+
|
|
|
previewList.add(item);
|
|
previewList.add(item);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 按可兑换积分额度倒序排序
|
|
|
|
|
+ previewList.sort((a, b) -> {
|
|
|
|
|
+ int pointsA = "basic".equals(exchangeType)
|
|
|
|
|
+ ? (a.getOriginalBasicPoint() != null ? a.getOriginalBasicPoint() : 0)
|
|
|
|
|
+ : (a.getOriginalContributionPoint() != null ? a.getOriginalContributionPoint() : 0);
|
|
|
|
|
+ int pointsB = "basic".equals(exchangeType)
|
|
|
|
|
+ ? (b.getOriginalBasicPoint() != null ? b.getOriginalBasicPoint() : 0)
|
|
|
|
|
+ : (b.getOriginalContributionPoint() != null ? b.getOriginalContributionPoint() : 0);
|
|
|
|
|
+ return Integer.compare(pointsB, pointsA);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
return previewList;
|
|
return previewList;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -493,4 +530,33 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
|
|
|
}
|
|
}
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 计算兑换金额(元)
|
|
|
|
|
+ * 贡献积分:1积分 = 1元
|
|
|
|
|
+ * 基础积分首次兑换:前300积分给500元,超出部分每100积分给100元
|
|
|
|
|
+ * 基础积分非首次兑换:每100积分给100元
|
|
|
|
|
+ */
|
|
|
|
|
+ public int calculateExchangeAmount(String exchangeType, int exchangedPoints, boolean isFirstExchange) {
|
|
|
|
|
+ if (exchangedPoints <= 0) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ if ("contribution".equals(exchangeType)) {
|
|
|
|
|
+ // 贡献积分:1积分 = 1元
|
|
|
|
|
+ return exchangedPoints;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 基础积分
|
|
|
|
|
+ if (isFirstExchange) {
|
|
|
|
|
+ // 首次兑换:前300积分给500元,超出部分每100积分给100元
|
|
|
|
|
+ int amount = 500;
|
|
|
|
|
+ int remaining = exchangedPoints - 300;
|
|
|
|
|
+ if (remaining > 0) {
|
|
|
|
|
+ amount += (remaining / 100) * 100;
|
|
|
|
|
+ }
|
|
|
|
|
+ return amount;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 非首次兑换:每100积分给100元
|
|
|
|
|
+ return (exchangedPoints / 100) * 100;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|