Browse Source

知识库,积分兑换添加对应金额兑换

徐滕 3 weeks atrás
parent
commit
867a37f840

+ 11 - 0
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/entity/WorkKnowledgeBasePoint.java

@@ -73,6 +73,9 @@ public class WorkKnowledgeBasePoint extends DataEntity<WorkKnowledgeBasePoint> {
 	/** 原始贡献积分(兑换前,用于显示可兑换积分) */
 	private Integer originalContributionPoint;
 
+	/** 兑换金额(元) */
+	private Integer exchangeAmount;
+
 	/** 上传文档数量 */
 	private Integer uploadCount;
 
@@ -329,6 +332,14 @@ public class WorkKnowledgeBasePoint extends DataEntity<WorkKnowledgeBasePoint> {
 		this.originalContributionPoint = originalContributionPoint;
 	}
 
+	public Integer getExchangeAmount() {
+		return exchangeAmount;
+	}
+
+	public void setExchangeAmount(Integer exchangeAmount) {
+		this.exchangeAmount = exchangeAmount;
+	}
+
 	public Integer getUploadCount() {
 		return uploadCount;
 	}

+ 66 - 0
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/service/WorkKnowledgeBasePointExchangeService.java

@@ -269,6 +269,8 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
         // 记录每个用户的原始积分(兑换前的值,用于显示“可兑换积分”)
         Map<String, Integer> originalBasicMap = new HashMap<>();
         Map<String, Integer> originalContribMap = new HashMap<>();
+        // 记录每个用户是否首次兑换(用于计算兑换金额)
+        Map<String, Boolean> isFirstExchangeMap = new HashMap<>();
         // 记录参与兑换的用户ID(用于过滤导出列表)
         java.util.Set<String> exchangedUserIds = new java.util.HashSet<>();
 
@@ -292,6 +294,7 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
                         exchangeFlagDao.insert(flag);
                     }
                     boolean isFirstExchange = (flag.getIsFirstExchanged() == 0 || flag.getIsFirstExchanged() == null);
+                    isFirstExchangeMap.put(userId, isFirstExchange);
                     int threshold = isFirstExchange ? firstThreshold : nonFirstThreshold;
                     int basicExchanged = 0;
                     if (basicPoints >= threshold) {
@@ -374,6 +377,16 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
             // 设置原始积分(可兑换积分)到新字段,不覆盖basicPoint/contributionPoint
             item.setOriginalBasicPoint(origBasic);
             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);
         }
@@ -410,6 +423,8 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
         Map<String, Integer> previewExchangedContribMap = new HashMap<>();
         Map<String, Integer> previewOriginalBasicMap = new HashMap<>();
         Map<String, Integer> previewOriginalContribMap = new HashMap<>();
+        // 记录每个用户是否首次兑换(用于计算兑换金额)
+        Map<String, Boolean> previewIsFirstExchangeMap = new HashMap<>();
 
         // 3. 逐用户计算兑换情况(不写DB)
         for (String userId : userIdList) {
@@ -420,6 +435,7 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
 
                     WorkKnowledgeBaseUserExchangeFlag flag = exchangeFlagDao.getByUserId(userId);
                     boolean isFirstExchange = (flag == null || flag.getIsFirstExchanged() == 0 || flag.getIsFirstExchanged() == null);
+                    previewIsFirstExchangeMap.put(userId, isFirstExchange);
                     int threshold = isFirstExchange ? firstThreshold : nonFirstThreshold;
                     int basicExchanged = 0;
                     if (basicPoints >= threshold) {
@@ -470,9 +486,30 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
             item.setRemainingBasicPoint(currentBasic - exBasic);
             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.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;
     }
 
@@ -493,4 +530,33 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
         }
         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;
+        }
+    }
 }

+ 10 - 6
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/web/WorkKnowledgeBasePointController.java

@@ -274,11 +274,11 @@ public class WorkKnowledgeBasePointController extends BaseController {
             String fileName = "积分兑换人员信息" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
             String[] headers;
             if ("basic".equals(exchangeType)) {
-                // 基础积分兑换:姓名、所属部门、手机号、可兑换积分、基础积分兑换、兑换后剩余积分
-                headers = new String[]{"姓名", "所属部门", "手机号", "可兑换积分", "基础积分兑换", "兑换后剩余积分"};
+                // 基础积分兑换:姓名、所属部门、手机号、可兑换积分、基础积分兑换、兑换后剩余积分、兑换金额
+                headers = new String[]{"姓名", "所属部门", "手机号", "可兑换积分", "基础积分兑换", "兑换后剩余积分", "兑换金额(元)"};
             } else {
-                // 贡献积分兑换:姓名、所属部门、手机号、可兑换积分、贡献积分兑换、兑换后剩余积分
-                headers = new String[]{"姓名", "所属部门", "手机号", "可兑换积分", "贡献积分兑换", "兑换后剩余积分"};
+                // 贡献积分兑换:姓名、所属部门、手机号、可兑换积分、贡献积分兑换、兑换后剩余积分、兑换金额
+                headers = new String[]{"姓名", "所属部门", "手机号", "可兑换积分", "贡献积分兑换", "兑换后剩余积分", "兑换金额(元)"};
             }
             ExportExcel exportExcel = new ExportExcel("积分兑换人员信息", headers);
 
@@ -301,15 +301,19 @@ public class WorkKnowledgeBasePointController extends BaseController {
 
                 // 根据兑换类型添加对应列
                 if ("basic".equals(exchangeType)) {
-                    // 基础积分兑换:显示可兑换积分、基础积分兑换量、兑换后剩余积分
+                    // 基础积分兑换:显示可兑换积分、基础积分兑换量、兑换后剩余积分、兑换金额
                     exportExcel.addCell(row, col++, origBasic, 2, Integer.class);
                     exportExcel.addCell(row, col++, exBasic, 2, Integer.class);
                     exportExcel.addCell(row, col++, remainBasic, 2, Integer.class);
+                    int exchangeAmt = item.getExchangeAmount() != null ? item.getExchangeAmount() : 0;
+                    exportExcel.addCell(row, col++, exchangeAmt, 2, Integer.class);
                 } else {
-                    // 贡献积分兑换:显示可兑换积分、贡献积分兑换量、兑换后剩余积分
+                    // 贡献积分兑换:显示可兑换积分、贡献积分兑换量、兑换后剩余积分、兑换金额
                     exportExcel.addCell(row, col++, origContrib, 2, Integer.class);
                     exportExcel.addCell(row, col++, exContrib, 2, Integer.class);
                     exportExcel.addCell(row, col++, remainContrib, 2, Integer.class);
+                    int exchangeAmt = item.getExchangeAmount() != null ? item.getExchangeAmount() : 0;
+                    exportExcel.addCell(row, col++, exchangeAmt, 2, Integer.class);
                 }
             }
 

+ 4 - 2
src/main/webapp/webpage/modules/WorkKnowledgeBase/workKnowledgeBasePointExchangePreview.jsp

@@ -51,7 +51,8 @@
             {field:'mobile', align:'center', title:'手机号', minWidth:120, templet:function(d){ return d.mobile || d.phone || ''; }},
             {field:'originalBasicPoint', align:'center', title:'当前基础积分', width:120, templet:function(d){ return '<span style="color:#1aa094;font-weight:bold;">' + (d.originalBasicPoint || 0) + '</span>'; }},
             {field:'exchangedBasicPoint', align:'center', title:'预计兑换', width:100, templet:function(d){ return '<span style="color:#FF5722;font-weight:bold;">' + (d.exchangedBasicPoint || 0) + '</span>'; }},
-            {field:'remainingBasicPoint', align:'center', title:'兑换后剩余', width:110}
+            {field:'remainingBasicPoint', align:'center', title:'兑换后剩余', width:110},
+            {field:'exchangeAmount', align:'center', title:'兑换金额(元)', width:120, templet:function(d){ return '<span style="color:#FF5722;font-weight:bold;">' + (d.exchangeAmount || 0) + ' 元</span>'; }}
         ]];
     } else {
         cols = [[
@@ -61,7 +62,8 @@
             {field:'mobile', align:'center', title:'手机号', minWidth:120, templet:function(d){ return d.mobile || d.phone || ''; }},
             {field:'originalContributionPoint', align:'center', title:'当前贡献积分', width:120, templet:function(d){ return '<span style="color:#1aa094;font-weight:bold;">' + (d.originalContributionPoint || 0) + '</span>'; }},
             {field:'exchangedContributionPoint', align:'center', title:'预计兑换', width:100, templet:function(d){ return '<span style="color:#FF5722;font-weight:bold;">' + (d.exchangedContributionPoint || 0) + '</span>'; }},
-            {field:'remainingContributionPoint', align:'center', title:'兑换后剩余', width:110}
+            {field:'remainingContributionPoint', align:'center', title:'兑换后剩余', width:110},
+            {field:'exchangeAmount', align:'center', title:'兑换金额(元)', width:120, templet:function(d){ return '<span style="color:#FF5722;font-weight:bold;">' + (d.exchangeAmount || 0) + ' 元</span>'; }}
         ]];
     }