fix(issuance): repair module two database compatibility

chore/issuance-comments-zh
chenyuan 1 month ago
parent e1e6c31c23
commit 3c4fafe1eb

@ -97,7 +97,8 @@ public class IssuanceTrainingResetService {
Integer resettable = jdbc.queryForObject("SELECT COUNT(*) FROM commercial_bank_currency c "
+ "JOIN central_bank_currency_ownership o ON o.currency_id=c.currency_id "
+ "WHERE c.issuance_request_id=? AND c.status='可用' AND o.owner_type='BANK' "
+ "AND o.owner_id=c.bank_code AND o.status='AVAILABLE' AND o.lock_business_type IS NULL "
+ "AND CAST(o.owner_id AS BINARY)=CAST(c.bank_code AS BINARY) "
+ "AND o.status='AVAILABLE' AND o.lock_business_type IS NULL "
+ "AND o.lock_business_id IS NULL AND o.last_transaction_id IS NULL", Integer.class, requestId);
if (!safeEquals(issued, resettable)) {
throw validation("模块二发行的数字货币已被后续模块使用,不能从模块二重置");

@ -0,0 +1,34 @@
-- 修复模块二取消、重新实训接口依赖的线上数据库结构。
-- 适用问题:
-- 1. POST /api/v1/issuance/attempts/{attemptId}/cancel 返回 500;
-- 2. POST /api/v1/issuance/training/reset 返回 500。
-- 3. POST /api/v1/central-banks/issuance/requests/{id}/business-review 返回 500。
CREATE TABLE IF NOT EXISTS issuance_source_currency_usage (
id BIGINT PRIMARY KEY,
source_currency_id BIGINT NOT NULL,
source_batch_id BIGINT NOT NULL,
issuance_request_id CHAR(36) NOT NULL,
status VARCHAR(16) NOT NULL,
reserved_at TIMESTAMP NOT NULL,
released_at TIMESTAMP NULL,
issued_at TIMESTAMP NULL,
audit_user_id VARCHAR(36) NOT NULL,
audit_username VARCHAR(64) NOT NULL,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
CONSTRAINT uk_issuance_source_currency UNIQUE (source_currency_id),
INDEX idx_issuance_source_request (issuance_request_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE central_bank_currency_ownership
ADD COLUMN lock_business_type VARCHAR(32) NULL AFTER status,
ADD COLUMN lock_business_id VARCHAR(96) NULL AFTER lock_business_type,
ADD INDEX idx_currency_ownership_available (owner_type, owner_id, status),
ADD INDEX idx_currency_ownership_lock_business (lock_business_type, lock_business_id);
-- commercial_bank_currency 来自较新的默认排序规则,而兑换权属相关表沿用
-- utf8mb4_unicode_ci。统一关联键,避免 owner_id=bank_code 查询触发 collation 冲突。
ALTER TABLE commercial_bank_currency
MODIFY COLUMN bank_code VARCHAR(32)
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;
Loading…
Cancel
Save