| @@ -78,6 +78,9 @@ open class StockTakeRecord : BaseEntity<Long>() { | |||||
| @Column(name = "stockTakeEndTime") | @Column(name = "stockTakeEndTime") | ||||
| open var stockTakeEndTime: LocalDateTime? = null | open var stockTakeEndTime: LocalDateTime? = null | ||||
| @Column(name = "lastSelect") | |||||
| open var lastSelect: Int? = null | |||||
| @Column(name = "approverTime") | @Column(name = "approverTime") | ||||
| open var approverTime: LocalDateTime? = null | open var approverTime: LocalDateTime? = null | ||||
| @Column(name = "date", nullable = false) | @Column(name = "date", nullable = false) | ||||
| @@ -368,6 +368,7 @@ class StockTakeRecordService( | |||||
| stockTakerName = stockTakeRecord?.stockTakerName, | stockTakerName = stockTakeRecord?.stockTakerName, | ||||
| stockTakeEndTime = stockTakeRecord?.stockTakeEndTime, | stockTakeEndTime = stockTakeRecord?.stockTakeEndTime, | ||||
| approverTime = stockTakeRecord?.approverTime, | approverTime = stockTakeRecord?.approverTime, | ||||
| lastSelect = stockTakeRecord?.lastSelect, | |||||
| ) | ) | ||||
| } | } | ||||
| @@ -1105,6 +1106,19 @@ return RecordsRes(paginatedResult, filteredResults.size) | |||||
| this.varianceQty = varianceQty | this.varianceQty = varianceQty | ||||
| this.status = "completed" | this.status = "completed" | ||||
| this.approverTime = java.time.LocalDateTime.now() | this.approverTime = java.time.LocalDateTime.now() | ||||
| this.lastSelect = request.lastSelect ?: run { | |||||
| // 兼容:旧客户端未传 lastSelect 时,尝试根据请求类型推断 | |||||
| if (request.approverQty != null && request.approverBadQty != null) { | |||||
| 3 | |||||
| } else if ( | |||||
| this.pickerSecondStockTakeQty != null && | |||||
| this.pickerSecondStockTakeQty!!.compareTo(request.qty) == 0 | |||||
| ) { | |||||
| 2 | |||||
| } else { | |||||
| 1 | |||||
| } | |||||
| } | |||||
| // stockTakeEndTime 目前只在 saveStockTakeRecord「第二次盤點」時寫入;只做第一次盤點時會一直是 null。 | // stockTakeEndTime 目前只在 saveStockTakeRecord「第二次盤點」時寫入;只做第一次盤點時會一直是 null。 | ||||
| // 審核通過時若仍為空,補上時間,讓列表「審核/完成時間」有值(不覆寫已有第二次盤點結束時間)。 | // 審核通過時若仍為空,補上時間,讓列表「審核/完成時間」有值(不覆寫已有第二次盤點結束時間)。 | ||||
| if (this.stockTakeEndTime == null) { | if (this.stockTakeEndTime == null) { | ||||
| @@ -1217,6 +1231,10 @@ open fun batchSaveApproverStockTakeRecords( | |||||
| this.approverStockTakeQty = qty | this.approverStockTakeQty = qty | ||||
| this.approverBadQty = badQty | this.approverBadQty = badQty | ||||
| this.varianceQty = varianceQty | this.varianceQty = varianceQty | ||||
| this.lastSelect = if ( | |||||
| record.pickerSecondStockTakeQty != null && | |||||
| record.pickerSecondStockTakeQty!! > BigDecimal.ZERO | |||||
| ) 2 else 1 | |||||
| this.status = "completed" | this.status = "completed" | ||||
| this.approverTime = java.time.LocalDateTime.now() | this.approverTime = java.time.LocalDateTime.now() | ||||
| if (this.stockTakeEndTime == null) { | if (this.stockTakeEndTime == null) { | ||||
| @@ -68,6 +68,7 @@ data class InventoryLotDetailResponse( | |||||
| val stockTakeEndTime: LocalDateTime? = null, | val stockTakeEndTime: LocalDateTime? = null, | ||||
| @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") | @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") | ||||
| val approverTime: LocalDateTime? = null, | val approverTime: LocalDateTime? = null, | ||||
| val lastSelect: Int? = null, | |||||
| ) | ) | ||||
| data class InventoryLotLineListRequest( | data class InventoryLotLineListRequest( | ||||
| val warehouseCode: String | val warehouseCode: String | ||||
| @@ -87,6 +88,7 @@ data class SaveApproverStockTakeRecordRequest( | |||||
| val approverId: Long? = null, | val approverId: Long? = null, | ||||
| val approverQty: BigDecimal? = null, | val approverQty: BigDecimal? = null, | ||||
| val approverBadQty: BigDecimal? = null, | val approverBadQty: BigDecimal? = null, | ||||
| val lastSelect: Int? = null, | |||||
| //val remark: String? = null | //val remark: String? = null | ||||
| ) | ) | ||||
| data class BatchSaveStockTakeRecordRequest( | data class BatchSaveStockTakeRecordRequest( | ||||
| @@ -0,0 +1,8 @@ | |||||
| -- liquibase formatted sql | |||||
| -- changeset Enson:alter_stocktakerecord_lastSelect | |||||
| ALTER TABLE `fpsmsdb`.`stocktakerecord` | |||||
| ADD COLUMN `lastSelect` INT NULL AFTER `stockTakeEndTime`; | |||||
| @@ -0,0 +1,14 @@ | |||||
| -- liquibase formatted sql | |||||
| -- changeset Enson:fill_stocktakerecord_lastSelect | |||||
| UPDATE `fpsmsdb`.`stocktakerecord` | |||||
| SET lastSelect = CASE | |||||
| WHEN approverStockTakeQty = pickerSecondStockTakeQty | |||||
| AND COALESCE(approverBadQty, 0) = COALESCE(pickerSecondBadQty, 0) THEN 2 | |||||
| WHEN approverStockTakeQty = pickerFirstStockTakeQty | |||||
| AND COALESCE(approverBadQty, 0) = COALESCE(pickerFirstBadQty, 0) THEN 1 | |||||
| WHEN approverStockTakeQty IS NOT NULL THEN 3 | |||||
| ELSE lastSelect | |||||
| END | |||||
| WHERE lastSelect IS NULL; | |||||