| package com.zy.acs.fake.service.impl; | 
|   | 
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
| import com.zy.acs.common.utils.GsonUtils; | 
| import com.zy.acs.fake.entity.Config; | 
| import com.zy.acs.fake.enums.ConfigType; | 
| import com.zy.acs.fake.mapper.ConfigMapper; | 
| import com.zy.acs.fake.service.ConfigService; | 
| import com.zy.acs.framework.common.DateUtils; | 
| import org.springframework.stereotype.Service; | 
|   | 
| import java.util.Date; | 
| import java.util.List; | 
|   | 
| /** | 
|  * Created by vincent on 8/30/2024 | 
|  */ | 
| @Service("configService") | 
| public class ConfigServiceImpl extends ServiceImpl<ConfigMapper, Config> implements ConfigService { | 
|   | 
|     @Override | 
|     @SuppressWarnings("unchecked") | 
|     public <T> T getVal(String key, Class<T> clazz) { | 
|         List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key)); | 
|         Config config = list.stream().findFirst().orElse(null); | 
|         if (null == config) { | 
|             return null; | 
|         } | 
|         String val = config.getVal(); | 
|         switch (ConfigType.query(config.getType())) { | 
|             case BOOLEAN: | 
|                 if (val.equals("1") || val.trim().toUpperCase().equals("TRUE")) { | 
|                     return (T) Boolean.TRUE; | 
|                 } | 
|                 return (T) Boolean.FALSE; | 
|             case NUMBER: | 
|                 if (clazz == Integer.class) { | 
|                     return (T) Integer.valueOf(val); | 
|                 } else if (clazz == Short.class) { | 
|                     return (T) Short.valueOf(val); | 
|                 } else if (clazz == Long.class) { | 
|                     return (T) Long.valueOf(val); | 
|                 } else if (clazz == Double.class) { | 
|                     return (T) Double.valueOf(val); | 
|                 } | 
|                 throw new UnsupportedOperationException("Unsupported type: " + clazz.getName()); | 
|             case STRING: | 
|                 return (T) val; | 
|             case JSON: | 
|                 return GsonUtils.fromJson(val, clazz); | 
|             case DATE: | 
|                 return (T) DateUtils.convert(val); | 
|             default: | 
|                 return null; | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public <T> boolean setVal(String key, T val) { | 
|         List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key)); | 
|         Config config = list.stream().findFirst().orElse(null); | 
|         if (config == null) { | 
|             return false; | 
|         } | 
|         ConfigType configType = ConfigType.query(config.getType()); | 
|         switch (configType) { | 
|             case BOOLEAN: | 
|                 if (!(val instanceof Boolean)) { | 
|                     throw new IllegalArgumentException("Expected Boolean value for key: " + key); | 
|                 } | 
|                 config.setVal((Boolean) val ? "TRUE" : "FALSE"); | 
|                 break; | 
|             case NUMBER: | 
|                 if (val instanceof Integer || val instanceof Short || val instanceof Long || val instanceof Double) { | 
|                     config.setVal(String.valueOf(val)); | 
|                 } else { | 
|                     throw new IllegalArgumentException("Expected a numeric value for key: " + key); | 
|                 } | 
|                 break; | 
|             case STRING: | 
|                 if (!(val instanceof String)) { | 
|                     throw new IllegalArgumentException("Expected a String value for key: " + key); | 
|                 } | 
|                 config.setVal((String) val); | 
|                 break; | 
|             case JSON: | 
|                 config.setVal(GsonUtils.toJson(val)); | 
|                 break; | 
|             case DATE: | 
|                 if (!(val instanceof Date)) { | 
|                     throw new IllegalArgumentException("Expected a Date value for key: " + key); | 
|                 } | 
|                 config.setVal(DateUtils.convert((Date) val)); | 
|                 break; | 
|             default: | 
|                 throw new UnsupportedOperationException("Unsupported ConfigType: " + configType); | 
|         } | 
|   | 
|         return this.updateById(config); | 
|     } | 
|   | 
| } |