diff --git a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/filedb/response/FileDatabaseInfoResponse.java b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/filedb/response/FileDatabaseInfoResponse.java index 59b0ffc1..d7e89725 100644 --- a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/filedb/response/FileDatabaseInfoResponse.java +++ b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/filedb/response/FileDatabaseInfoResponse.java @@ -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; /** * 资料库信息 diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/dao/FileDatabaseDao.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/dao/FileDatabaseDao.java index 32261f47..f9c365f6 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/dao/FileDatabaseDao.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/dao/FileDatabaseDao.java @@ -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 implements IndexNodeS /** * 已使用的容量, 单位GB */ - private Integer usedCapacity; + private BigDecimal usedCapacity; + + /** + * 已使用的容量, 单位kb + */ + private Integer usedCapacityKb; public boolean isActivated() { return state == FileDatabaseState.ACTIVATED; diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java index 0d473d6f..dd6f2f8b 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java @@ -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);