fix(core): 修复 BigDecimal 字段反序列化 null 值问题
- 新增 BigDecimalDeserializer 自定义反序列化器,处理 null值和空字符串 - 添加 DatabaseFixController 控制器,用于检查和修复数据库中的 null值问题 - 修改 ShopUserCouponController 中的查询逻辑,确保 BigDecimal 字段不为 null - 更新 ShopCoupon 和 ShopUserCoupon 实体类,为 BigDecimal 字段添加 JsonSerialize 和 JsonInclude 注解 - 新增 SQL 脚本 fix_bigdecimal_null_values.sql,用于修复数据库中的 null 值问题- 修改 application.yml,配置 Jackson序列化和反序列化相关参数
This commit is contained in:
107
src/main/resources/sql/fix_bigdecimal_null_values.sql
Normal file
107
src/main/resources/sql/fix_bigdecimal_null_values.sql
Normal file
@@ -0,0 +1,107 @@
|
||||
-- 修复BigDecimal字段的null值问题
|
||||
-- 将null值替换为0.00,避免JSON序列化异常
|
||||
|
||||
-- ========================================
|
||||
-- 1. 修复用户优惠券表的null值
|
||||
-- ========================================
|
||||
|
||||
-- 检查当前null值情况
|
||||
SELECT
|
||||
'shop_user_coupon null值检查' as table_name,
|
||||
COUNT(*) as total_records,
|
||||
COUNT(CASE WHEN reduce_price IS NULL THEN 1 END) as null_reduce_price,
|
||||
COUNT(CASE WHEN min_price IS NULL THEN 1 END) as null_min_price
|
||||
FROM shop_user_coupon;
|
||||
|
||||
-- 修复reduce_price字段的null值
|
||||
UPDATE shop_user_coupon
|
||||
SET reduce_price = 0.00
|
||||
WHERE reduce_price IS NULL;
|
||||
|
||||
-- 修复min_price字段的null值
|
||||
UPDATE shop_user_coupon
|
||||
SET min_price = 0.00
|
||||
WHERE min_price IS NULL;
|
||||
|
||||
-- ========================================
|
||||
-- 2. 修复优惠券模板表的null值
|
||||
-- ========================================
|
||||
|
||||
-- 检查当前null值情况
|
||||
SELECT
|
||||
'shop_coupon null值检查' as table_name,
|
||||
COUNT(*) as total_records,
|
||||
COUNT(CASE WHEN reduce_price IS NULL THEN 1 END) as null_reduce_price,
|
||||
COUNT(CASE WHEN min_price IS NULL THEN 1 END) as null_min_price
|
||||
FROM shop_coupon;
|
||||
|
||||
-- 修复reduce_price字段的null值
|
||||
UPDATE shop_coupon
|
||||
SET reduce_price = 0.00
|
||||
WHERE reduce_price IS NULL;
|
||||
|
||||
-- 修复min_price字段的null值
|
||||
UPDATE shop_coupon
|
||||
SET min_price = 0.00
|
||||
WHERE min_price IS NULL;
|
||||
|
||||
-- ========================================
|
||||
-- 3. 设置字段默认值(可选)
|
||||
-- ========================================
|
||||
|
||||
-- 为用户优惠券表字段设置默认值
|
||||
ALTER TABLE shop_user_coupon
|
||||
MODIFY COLUMN reduce_price DECIMAL(10,2) DEFAULT 0.00 COMMENT '满减券-减免金额';
|
||||
|
||||
ALTER TABLE shop_user_coupon
|
||||
MODIFY COLUMN min_price DECIMAL(10,2) DEFAULT 0.00 COMMENT '最低消费金额';
|
||||
|
||||
-- 为优惠券模板表字段设置默认值
|
||||
ALTER TABLE shop_coupon
|
||||
MODIFY COLUMN reduce_price DECIMAL(10,2) DEFAULT 0.00 COMMENT '满减券-减免金额';
|
||||
|
||||
ALTER TABLE shop_coupon
|
||||
MODIFY COLUMN min_price DECIMAL(10,2) DEFAULT 0.00 COMMENT '最低消费金额';
|
||||
|
||||
-- ========================================
|
||||
-- 4. 验证修复结果
|
||||
-- ========================================
|
||||
|
||||
-- 检查修复后的情况
|
||||
SELECT
|
||||
'shop_user_coupon 修复后检查' as table_name,
|
||||
COUNT(*) as total_records,
|
||||
COUNT(CASE WHEN reduce_price IS NULL THEN 1 END) as null_reduce_price,
|
||||
COUNT(CASE WHEN min_price IS NULL THEN 1 END) as null_min_price,
|
||||
MIN(reduce_price) as min_reduce_price,
|
||||
MIN(min_price) as min_min_price
|
||||
FROM shop_user_coupon;
|
||||
|
||||
SELECT
|
||||
'shop_coupon 修复后检查' as table_name,
|
||||
COUNT(*) as total_records,
|
||||
COUNT(CASE WHEN reduce_price IS NULL THEN 1 END) as null_reduce_price,
|
||||
COUNT(CASE WHEN min_price IS NULL THEN 1 END) as null_min_price,
|
||||
MIN(reduce_price) as min_reduce_price,
|
||||
MIN(min_price) as min_min_price
|
||||
FROM shop_coupon;
|
||||
|
||||
-- ========================================
|
||||
-- 5. 检查其他可能的BigDecimal字段
|
||||
-- ========================================
|
||||
|
||||
-- 检查订单相关表的BigDecimal字段
|
||||
SELECT
|
||||
'shop_order BigDecimal字段检查' as check_type,
|
||||
COUNT(*) as total_records,
|
||||
COUNT(CASE WHEN order_price IS NULL THEN 1 END) as null_order_price,
|
||||
COUNT(CASE WHEN pay_price IS NULL THEN 1 END) as null_pay_price
|
||||
FROM shop_order;
|
||||
|
||||
-- 如果发现null值,可以执行以下修复
|
||||
/*
|
||||
UPDATE shop_order SET order_price = 0.00 WHERE order_price IS NULL;
|
||||
UPDATE shop_order SET pay_price = 0.00 WHERE pay_price IS NULL;
|
||||
*/
|
||||
|
||||
SELECT 'BigDecimal null值修复完成!' as result;
|
||||
Reference in New Issue
Block a user