Ver código fonte

feat: 按流量计算金额

xdd 1 mês atrás
pai
commit
be8915fea1

+ 6 - 0
fs-service-system/src/main/java/com/fs/course/mapper/FsCourseTrafficLogMapper.java

@@ -87,4 +87,10 @@ public interface FsCourseTrafficLogMapper
      */
     Long getMonthTrafficLog();
 
+    /**
+     * 昨天
+     * @return Long
+     */
+    Long getYesterdayTrafficLog();
+
 }

+ 5 - 0
fs-service-system/src/main/java/com/fs/statis/dto/TrafficLogDTO.java

@@ -9,6 +9,11 @@ import java.io.Serializable;
  */
 @Data
 public class TrafficLogDTO implements Serializable {
+
+    /**
+     * 昨天
+     */
+    private Long yesterday;
     /**
      * 今日流量
      */

+ 3 - 0
fs-service-system/src/main/java/com/fs/statis/mapper/ConsumptionBalanceMapper.java

@@ -118,4 +118,7 @@ public interface ConsumptionBalanceMapper {
      * @return 趋势
      */
     List<RewardMoneyTrendDTO> rewardMoneyTrendDTO(AnalysisPreviewQueryDTO param);
+
+    BigDecimal getCurrentBalance();
+
 }

+ 50 - 1
fs-service-system/src/main/java/com/fs/statis/service/impl/StatisticsServiceImpl.java

@@ -16,8 +16,11 @@ import com.fs.store.service.IFsStorePaymentService;
 import com.fs.store.service.IFsStoreProductService;
 import com.fs.store.service.IFsUserService;
 import com.fs.store.service.cache.IFsUserCourseCacheService;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.service.ISysConfigService;
 import com.hc.openapi.tool.util.ObjectUtils;
 import com.hc.openapi.tool.util.StringUtils;
+import org.apache.http.util.Asserts;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -62,6 +65,9 @@ public class StatisticsServiceImpl implements IStatisticsService {
     @Autowired
     private IFsStoreProductService productService;
 
+    @Autowired
+    private ISysConfigService configService;
+
     @Override
     public void dataOverviewTask() {
         DealerAggregatedDTO dealerAggregatedDTO = this.dealerAggregated();
@@ -601,9 +607,50 @@ public class StatisticsServiceImpl implements IStatisticsService {
 
     @Override
     public ConsumptionBalanceDataDTO rechargeConsumption() {
-        return consumptionBalanceMapper.rechargeConsumption();
+        // 获取流量统计数据
+        TrafficLogDTO trafficLog = this.getTrafficLog();
+
+        // 获取流量价格配置
+        SysConfig config = configService.selectConfigByConfigKey("statis.config");
+        Asserts.notNull(config, "流量价格配置不能为空!");
+        JSONObject jsonObject = JSONObject.parseObject(config.getConfigValue());
+        float trafficPrice = jsonObject.getFloatValue("trafficPrice");
+
+        // 创建消费余额数据对象
+        ConsumptionBalanceDataDTO consumptionBalanceData = new ConsumptionBalanceDataDTO();
+
+        // 计算消费金额(将流量从字节转换为GB,然后乘以每GB价格)
+        BigDecimal todayConsumption = calculateTrafficCost(trafficLog.getToday(), trafficPrice);
+        BigDecimal yesterdayConsumption = calculateTrafficCost(trafficLog.getYesterday(), trafficPrice);
+
+        // 设置消费数据
+        consumptionBalanceData.setTodayComsumption(todayConsumption);
+        consumptionBalanceData.setYesterdayComsumption(yesterdayConsumption);
+
+        // 从数据库获取当前余额
+        BigDecimal currentBalance = consumptionBalanceMapper.getCurrentBalance();
+        consumptionBalanceData.setBalance(currentBalance);
+
+        return consumptionBalanceData;
     }
+    /**
+     * 计算流量消费金额
+     * @param trafficBytes 流量字节数
+     * @param pricePerGB 每GB价格
+     * @return 消费金额
+     */
+    private BigDecimal calculateTrafficCost(Long trafficBytes, float pricePerGB) {
+        if (trafficBytes == null || trafficBytes <= 0) {
+            return BigDecimal.ZERO;
+        }
+
+        // 将字节转换为GB (1GB = 1024^3 bytes)
+        BigDecimal trafficGB = new BigDecimal(trafficBytes)
+                .divide(new BigDecimal(1024 * 1024 * 1024), 6, BigDecimal.ROUND_HALF_UP);
 
+        // 计算消费金额
+        return trafficGB.multiply(new BigDecimal(pricePerGB)).setScale(2, BigDecimal.ROUND_HALF_UP);
+    }
     @Override
     public AnalysisPreviewDTO analysisPreview(AnalysisPreviewQueryDTO param) {
         AnalysisPreviewDTO dto = new AnalysisPreviewDTO();
@@ -788,9 +835,11 @@ public class StatisticsServiceImpl implements IStatisticsService {
     public TrafficLogDTO getTrafficLog() {
         TrafficLogDTO trafficLogDTO = new TrafficLogDTO();
         Long todayTrafficLog = fsCourseTrafficLogMapper.getTodayTrafficLog();
+        Long yesterdayTrafficLog = fsCourseTrafficLogMapper.getYesterdayTrafficLog();
         Long monthTrafficLog = fsCourseTrafficLogMapper.getMonthTrafficLog();
         trafficLogDTO.setToday(todayTrafficLog);
         trafficLogDTO.setThisMonth(monthTrafficLog);
+        trafficLogDTO.setYesterday(yesterdayTrafficLog);
         return trafficLogDTO;
     }
 

+ 8 - 0
fs-service-system/src/main/resources/mapper/course/FsCourseTrafficLogMapper.xml

@@ -93,6 +93,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             YEAR(create_time) = YEAR(CURDATE())
           AND MONTH(create_time) = MONTH(CURDATE())
     </select>
+    <select id="getYesterdayTrafficLog" resultType="java.lang.Long">
+        SELECT
+            COALESCE(SUM(internet_traffic), 0) AS yesterday_traffic_bytes
+        FROM
+            fs_course_traffic_log
+        WHERE
+            DATE(create_time) = CURDATE() - INTERVAL 1 DAY
+    </select>
 
     <insert id="insertFsCourseTrafficLog" parameterType="FsCourseTrafficLog" useGeneratedKeys="true" keyProperty="logId">
         insert into fs_course_traffic_log

+ 3 - 0
fs-service-system/src/main/resources/mapper/statis/ConsumptionBalanceMapper.xml

@@ -299,5 +299,8 @@
         </where>
         group by start_date
     </select>
+    <select id="getCurrentBalance" resultType="java.math.BigDecimal">
+        select sum(money) from company
+    </select>
 
 </mapper>

+ 1 - 1
fs-service-system/src/main/resources/mapper/store/FsStoreProductPackageMapper.xml

@@ -129,7 +129,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                                             <if test="status != null">
                                                 status = #{status},
                                             </if>
-                                             <if test="company_id !=null">
+                                             <if test="companyId !=null">
                                                  company_id = #{companyId},
                                                  products = null
                                              </if>