REQ-3540: 记录kb

This commit is contained in:
yanglin 2025-03-28 16:12:20 +08:00
parent df64dcb265
commit 938ab42353
4 changed files with 28 additions and 10 deletions

View File

@ -1,9 +1,11 @@
package cn.axzo.nanopart.doc.api.filedb.response;
import cn.axzo.nanopart.doc.api.enums.DatabaseType;
import java.math.BigDecimal;
import com.alibaba.fastjson.JSON;
import cn.axzo.nanopart.doc.api.enums.DatabaseType;
import cn.axzo.nanopart.doc.api.enums.FileDatabaseState;
import cn.axzo.nanopart.doc.api.templatedb.domain.TemplateDatabaseInfo;
import lombok.Getter;
@ -79,7 +81,7 @@ public class FileDatabaseInfoResponse {
/**
* 已使用的容量, 单位GB
*/
private Integer usedCapacity;
private BigDecimal usedCapacity;
/**
* 资料库信息

View File

@ -1,6 +1,7 @@
package cn.axzo.nanopart.doc.dao;
import java.math.BigDecimal;
import java.util.Date;
import org.springframework.stereotype.Repository;
@ -62,10 +63,11 @@ public class FileDatabaseDao extends ServiceImpl<FileDatabaseMapper, FileDatabas
.remove();
}
public void updateUsedCapacity(String code, int usedFileSize) {
public void updateUsedCapacity(String code, int usedFileSizeKb, BigDecimal usedFileSizeGb) {
lambdaUpdate() //
.eq(FileDatabase::getCode, code) //
.set(FileDatabase::getUsedCapacity, usedFileSize) //
.set(FileDatabase::getUsedCapacity, usedFileSizeGb) //
.set(FileDatabase::getUsedCapacityKb, usedFileSizeKb) //
.update();
}

View File

@ -1,6 +1,7 @@
package cn.axzo.nanopart.doc.entity;
import java.math.BigDecimal;
import java.util.Date;
import com.alibaba.fastjson.JSON;
@ -76,7 +77,12 @@ public class FileDatabase extends BaseEntity<FileDatabase> implements IndexNodeS
/**
* 已使用的容量, 单位GB
*/
private Integer usedCapacity;
private BigDecimal usedCapacity;
/**
* 已使用的容量, 单位kb
*/
private Integer usedCapacityKb;
public boolean isActivated() {
return state == FileDatabaseState.ACTIVATED;

View File

@ -3,6 +3,8 @@ package cn.axzo.nanopart.doc.file.filedb;
import static java.util.stream.Collectors.toList;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
@ -108,7 +110,7 @@ public class FileDatabaseService {
if (request.getExpiredDateMs() != null)
db.setExpireDate(new Date(request.getExpiredDateMs()));
db.setAllowedCapacity(request.getAllowedCapacity());
db.setUsedCapacity(0);
db.setUsedCapacity(BigDecimal.ZERO);
db.setCreateAt(new Date());
db.setUpdateAt(new Date());
fileDatabaseDao.save(db);
@ -173,9 +175,11 @@ public class FileDatabaseService {
FileDatabase db = fileDatabaseDao.findForUpdateOrNull(indexNode.scopeCode());
if (db == null)
return;
int usedFileSize = indexQueryService.getUsedFileSize(db);
fileDatabaseDao.updateUsedCapacity(db.getCode(), usedFileSize);
if (db.isActivated() && db.getAllowedCapacity() <= usedFileSize)
int usedFileSizeKb = indexQueryService.getUsedFileSize(db);
BigDecimal usedFileSizeGb = BigDecimal.valueOf(usedFileSizeKb) //
.divide(BigDecimal.valueOf(1024 * 1024), 2, RoundingMode.HALF_UP);
fileDatabaseDao.updateUsedCapacity(db.getCode(), usedFileSizeKb, usedFileSizeGb);
if (db.isActivated() && isCapacityExhausted(db.getAllowedCapacity(), usedFileSizeGb))
fileDatabaseDao.updateState(db.getCode(), FileDatabaseState.CAPACITY_EXHAUSTED);
}
@ -185,12 +189,16 @@ public class FileDatabaseService {
FileDatabase db = fileDatabaseDao.getForUpdateOrThrow(request.getCode());
updateCapacity(request) //
.set(FileDatabase::getState, //
request.getAllowedCapacity() <= db.getUsedCapacity() //
isCapacityExhausted(request.getAllowedCapacity(), db.getUsedCapacity()) //
? FileDatabaseState.CAPACITY_EXHAUSTED //
: FileDatabaseState.ACTIVATED) //
.update();
}
private boolean isCapacityExhausted(Integer allowedCapacity, BigDecimal usedCapacity) {
return BigDecimal.valueOf(allowedCapacity).compareTo(usedCapacity) <= 0;
}
@BizTransactional
public void expandCapacity(FileDatabaseExpandCapacityRequest request) {
docLogDao.logRequest("expandCapacity", request.getCode(), request);