diff --git a/CHANGELOG.md b/CHANGELOG.md index a4ad14c7..c57b84af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - 更新了 Service 层的父类,现在无法直接使用 service 对象,进行 Wrapper 条件构造 - 更新了分页查询的排序参数,前端需要对应升级 +- 工具类移动到 common-util 模块, 相应包名已更改,请注意 ### Added @@ -27,6 +28,8 @@ - feat: 分页查询出入参封装,提供 PageParam 作为入参,PageResult 作为出参,不再用 Page 贯穿 - feat: 密码在日志中的存储脱敏 - feat: 数据权限注解提供对于指定 Mapper类,或指定方法的数据权限关闭功能 +- feat: 添加 JsonUtils 根据依赖执行对应的json处理方法 +- feat: 添加 RedisHelper 提供对redis的常用方法支持 - test: 对 client test 跳过登陆验证和密码解密,便于测试,注意生产环境不要开启 test client ### Changed @@ -58,6 +61,7 @@ - 移除 mybatis-plus-extend-mysql 扩展包,相关方法移入 mybatis-plus-extend 扩展中 - 移除 model 的 AR 模式支持 - 移除 hibernate-validator 的版本指定,改为跟随 spring-boot 的依赖版本 +- 移除 JacksonUtils ### Dependency diff --git a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/log/handler/AdminAccessLogHandler.java b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/log/handler/AdminAccessLogHandler.java index a416cc6b..98d90797 100644 --- a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/log/handler/AdminAccessLogHandler.java +++ b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/log/handler/AdminAccessLogHandler.java @@ -12,7 +12,7 @@ import com.hccake.ballcat.commom.log.constant.LogConstant; import com.hccake.ballcat.commom.log.util.LogUtils; import com.hccake.ballcat.common.desensitize.enums.RegexDesensitizationTypeEnum; import com.hccake.ballcat.common.desensitize.handler.RegexDesensitizationHandler; -import com.hccake.ballcat.common.core.util.IPUtil; +import com.hccake.ballcat.common.util.IpUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.slf4j.MDC; @@ -73,7 +73,7 @@ public class AdminAccessLogHandler implements AccessLogHandler { .setTraceId(MDC.get(LogConstant.TRACE_ID)) .setCreateTime(LocalDateTime.now()) .setTime(time) - .setIp(IPUtil.getIpAddr(request)) + .setIp(IpUtils.getIpAddr(request)) .setMethod(request.getMethod()) .setUserAgent(request.getHeader("user-agent")) .setUri(uri) diff --git a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/lov/typehandler/ListLovSelectOptionTypeHandler.java b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/lov/typehandler/ListLovSelectOptionTypeHandler.java index 3cedf8af..15f781dc 100644 --- a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/lov/typehandler/ListLovSelectOptionTypeHandler.java +++ b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/lov/typehandler/ListLovSelectOptionTypeHandler.java @@ -3,7 +3,7 @@ package com.hccake.ballcat.admin.modules.lov.typehandler; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.hccake.ballcat.admin.modules.lov.model.entity.LovSelectOptions; -import com.hccake.ballcat.common.core.util.SpringUtil; +import com.hccake.ballcat.common.conf.util.SpringUtils; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.TypeHandler; @@ -23,7 +23,7 @@ public class ListLovSelectOptionTypeHandler implements TypeHandler phoneList = userList.stream().map(SysUser::getPhone).filter(StrUtil::isNotBlank) .collect(Collectors.toList()); // 短信文本去除 html 标签 - String content = HtmlUtil.toText(notifyInfo.getContent()); + String content = HtmlUtils.toText(notifyInfo.getContent()); // TODO 对接短信发送平台 System.out.println("短信推送"); } diff --git a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/controller/SysUserController.java b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/controller/SysUserController.java index 45b34b67..82007958 100644 --- a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/controller/SysUserController.java +++ b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/controller/SysUserController.java @@ -20,7 +20,7 @@ import com.hccake.ballcat.common.core.domain.SelectData; import com.hccake.ballcat.common.core.result.BaseResultCode; import com.hccake.ballcat.common.core.result.R; import com.hccake.ballcat.common.core.result.SystemResultCode; -import com.hccake.ballcat.common.core.util.PasswordUtil; +import com.hccake.ballcat.common.util.PasswordUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -99,7 +99,7 @@ public class SysUserController { return R.failed(BaseResultCode.LOGIC_CHECK_ERROR, "用户名已存在"); } // 明文密码 - String password = PasswordUtil.decodeAES(sysUserDTO.getPass(), passwordSecretKey); + String password = PasswordUtils.decodeAES(sysUserDTO.getPass(), passwordSecretKey); sysUserDTO.setPassword(password); return sysUserService.addSysUser(sysUserDTO) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "新增系统用户失败"); @@ -180,7 +180,7 @@ public class SysUserController { } // 明文密码 - String password = PasswordUtil.decodeAES(pass, passwordSecretKey); + String password = PasswordUtils.decodeAES(pass, passwordSecretKey); return sysUserService.updatePassword(userId, password) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改用户密码失败!"); } diff --git a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/service/impl/SysOrganizationServiceImpl.java b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/service/impl/SysOrganizationServiceImpl.java index d07a3bad..54c5162d 100644 --- a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/service/impl/SysOrganizationServiceImpl.java +++ b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/service/impl/SysOrganizationServiceImpl.java @@ -9,7 +9,7 @@ import com.hccake.ballcat.admin.modules.sys.model.entity.SysOrganization; import com.hccake.ballcat.admin.modules.sys.model.vo.SysOrganizationTree; import com.hccake.ballcat.admin.modules.sys.service.SysOrganizationService; import com.hccake.ballcat.common.core.constant.GlobalConstants; -import com.hccake.ballcat.common.core.util.TreeUtil; +import com.hccake.ballcat.common.util.TreeUtils; import com.hccake.extend.mybatis.plus.service.impl.ExtendServiceImpl; import org.springframework.stereotype.Service; @@ -31,7 +31,7 @@ public class SysOrganizationServiceImpl extends ExtendServiceImpl listTree() { List list = baseMapper.selectList(null); - return TreeUtil.buildTree(list, 0, SysOrganizationConverter.INSTANCE::poToTree); + return TreeUtils.buildTree(list, 0, SysOrganizationConverter.INSTANCE::poToTree); } /** diff --git a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/service/impl/SysUserServiceImpl.java b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/service/impl/SysUserServiceImpl.java index 7738d893..36053cfc 100644 --- a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/service/impl/SysUserServiceImpl.java +++ b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/service/impl/SysUserServiceImpl.java @@ -22,7 +22,7 @@ import com.hccake.ballcat.admin.modules.sys.service.*; import com.hccake.ballcat.common.core.domain.PageParam; import com.hccake.ballcat.common.core.domain.PageResult; import com.hccake.ballcat.common.core.domain.SelectData; -import com.hccake.ballcat.common.core.util.PasswordUtil; +import com.hccake.ballcat.common.util.PasswordUtils; import com.hccake.extend.mybatis.plus.service.impl.ExtendServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.context.ApplicationEventPublisher; @@ -133,7 +133,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl parameterMap = new HashMap<>(request.getParameterMap()); try { if (request.getParameter(GRANT_TYPE).equals(PASSWORD)) { - String password = PasswordUtil.decodeAES(request.getParameter(PASSWORD), secretKey); + String password = PasswordUtils.decodeAES(request.getParameter(PASSWORD), secretKey); parameterMap.put(PASSWORD, new String[] { password }); } } diff --git a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/oauth/listener/LoginEventListener.java b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/oauth/listener/LoginEventListener.java index 1405a56a..dae89d35 100644 --- a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/oauth/listener/LoginEventListener.java +++ b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/oauth/listener/LoginEventListener.java @@ -8,7 +8,7 @@ import com.hccake.ballcat.admin.modules.log.service.AdminLoginLogService; import com.hccake.ballcat.commom.log.constant.LogConstant; import com.hccake.ballcat.commom.log.operation.enums.LogStatusEnum; import com.hccake.ballcat.commom.log.util.LogUtils; -import com.hccake.ballcat.common.core.util.IPUtil; +import com.hccake.ballcat.common.util.IpUtils; import lombok.RequiredArgsConstructor; import org.slf4j.MDC; import org.springframework.context.event.EventListener; @@ -89,7 +89,7 @@ public class LoginEventListener { // 获取 Request HttpServletRequest request = LogUtils.getHttpServletRequest(); AdminLoginLog adminLoginLog = new AdminLoginLog().setLoginTime(LocalDateTime.now()) - .setIp(IPUtil.getIpAddr(request)).setStatus(LogStatusEnum.SUCCESS.getValue()) + .setIp(IpUtils.getIpAddr(request)).setStatus(LogStatusEnum.SUCCESS.getValue()) .setTraceId(MDC.get(LogConstant.TRACE_ID)).setUsername(source.getName()); // 根据 ua 获取浏览器和操作系统 UserAgent ua = UserAgentUtil.parse(request.getHeader("user-agent")); diff --git a/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/PushEventListener.java b/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/PushEventListener.java index 54875679..854656e9 100644 --- a/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/PushEventListener.java +++ b/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/PushEventListener.java @@ -11,7 +11,7 @@ import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser; import com.hccake.ballcat.admin.websocket.message.AnnouncementCloseMessage; import com.hccake.ballcat.admin.websocket.message.AnnouncementPushMessage; import com.hccake.ballcat.admin.websocket.message.DictChangeMessage; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; @@ -44,7 +44,7 @@ public class PushEventListener { // 构建字典修改的消息体 DictChangeMessage dictChangeMessage = new DictChangeMessage(); dictChangeMessage.setDictCode(event.getDictCode()); - String msg = JacksonUtils.toJson(dictChangeMessage); + String msg = JsonUtils.toJson(dictChangeMessage); // 广播修改信息 MessageDO messageDO = new MessageDO().setMessageText(msg).setNeedBroadcast(true); @@ -61,7 +61,7 @@ public class PushEventListener { // 构建字典修改的消息体 AnnouncementCloseMessage message = new AnnouncementCloseMessage(); message.setId(event.getId()); - String msg = JacksonUtils.toJson(message); + String msg = JsonUtils.toJson(message); // 广播修改信息 MessageDO messageDO = new MessageDO().setMessageText(msg).setNeedBroadcast(true); @@ -88,7 +88,7 @@ public class PushEventListener { message.setContent(announcementNotifyInfo.getContent()); message.setImmortal(announcementNotifyInfo.getImmortal()); message.setDeadline(announcementNotifyInfo.getDeadline()); - String msg = JacksonUtils.toJson(message); + String msg = JsonUtils.toJson(message); List userAnnouncements = new ArrayList<>(); List sessionKeys = new ArrayList<>(); diff --git a/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/RedisMessageDistributor.java b/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/RedisMessageDistributor.java index 9f6d2ae0..95ce9f0a 100644 --- a/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/RedisMessageDistributor.java +++ b/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/RedisMessageDistributor.java @@ -1,6 +1,6 @@ package com.hccake.ballcat.admin.websocket.distribute; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; @@ -21,7 +21,7 @@ public class RedisMessageDistributor implements MessageDistributor { */ @Override public void distribute(MessageDO messageDO) { - String str = JacksonUtils.toJson(messageDO); + String str = JsonUtils.toJson(messageDO); stringRedisTemplate.convertAndSend(RedisWebsocketMessageListener.CHANNEL, str); } diff --git a/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/RedisWebsocketMessageListener.java b/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/RedisWebsocketMessageListener.java index 81b7d6ce..33fad04f 100644 --- a/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/RedisWebsocketMessageListener.java +++ b/ballcat-admin/ballcat-admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/distribute/RedisWebsocketMessageListener.java @@ -1,6 +1,6 @@ package com.hccake.ballcat.admin.websocket.distribute; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener; @@ -30,7 +30,7 @@ public class RedisWebsocketMessageListener implements MessageListener, MessageSe if (CHANNEL.equals(channel)) { byte[] bodyBytes = message.getBody(); String body = stringSerializer.deserialize(bodyBytes); - MessageDO messageDO = JacksonUtils.toObj(body, MessageDO.class); + MessageDO messageDO = JsonUtils.toObj(body, MessageDO.class); doSend(messageDO); } } diff --git a/ballcat-codegen/ballcat-codegen-backend/src/main/java/com/hccake/ballcat/codegen/service/impl/TemplateDirectoryEntryServiceImpl.java b/ballcat-codegen/ballcat-codegen-backend/src/main/java/com/hccake/ballcat/codegen/service/impl/TemplateDirectoryEntryServiceImpl.java index 8df57116..00c25368 100644 --- a/ballcat-codegen/ballcat-codegen-backend/src/main/java/com/hccake/ballcat/codegen/service/impl/TemplateDirectoryEntryServiceImpl.java +++ b/ballcat-codegen/ballcat-codegen-backend/src/main/java/com/hccake/ballcat/codegen/service/impl/TemplateDirectoryEntryServiceImpl.java @@ -18,7 +18,7 @@ import com.hccake.ballcat.codegen.service.TemplateInfoService; import com.hccake.ballcat.common.core.constant.GlobalConstants; import com.hccake.ballcat.common.core.exception.BusinessException; import com.hccake.ballcat.common.core.result.BaseResultCode; -import com.hccake.ballcat.common.core.util.TreeUtil; +import com.hccake.ballcat.common.util.TreeUtils; import com.hccake.extend.mybatis.plus.service.impl.ExtendServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -150,10 +150,10 @@ public class TemplateDirectoryEntryServiceImpl // 1. 获取所有目录项(目录项不会太多,一次查询比较方便) List entryList = baseMapper.selectList(null); // 2. 获取当前删除目录项的孩子节点列表 - List treeList = TreeUtil.buildTree(entryList, entryId, + List treeList = TreeUtils.buildTree(entryList, entryId, TemplateModelConverter.INSTANCE::entryPoToTree); // 3. 获取当前删除目录项的孩子节点Id - List treeNodeIds = TreeUtil.getTreeNodeIds(treeList); + List treeNodeIds = TreeUtils.getTreeNodeIds(treeList); // 4. 删除所有孩子节点 if (CollectionUtil.isNotEmpty(treeNodeIds)) { baseMapper.deleteBatchIds(treeNodeIds); @@ -243,7 +243,7 @@ public class TemplateDirectoryEntryServiceImpl } // 转树形目录结构 - List treeList = TreeUtil.buildTree(list, GlobalConstants.TREE_ROOT_ID, + List treeList = TreeUtils.buildTree(list, GlobalConstants.TREE_ROOT_ID, TemplateModelConverter.INSTANCE::entryPoToTree); // 填充模板文件 diff --git a/ballcat-common/ballcat-common-conf/pom.xml b/ballcat-common/ballcat-common-conf/pom.xml index 5b0595ad..6b362f21 100644 --- a/ballcat-common/ballcat-common-conf/pom.xml +++ b/ballcat-common/ballcat-common-conf/pom.xml @@ -14,7 +14,7 @@ com.hccake - ballcat-common-core + ballcat-common-util com.hccake diff --git a/ballcat-common/ballcat-common-conf/src/main/java/com/hccake/ballcat/common/conf/config/JacksonConfig.java b/ballcat-common/ballcat-common-conf/src/main/java/com/hccake/ballcat/common/conf/config/JsonConfig.java similarity index 75% rename from ballcat-common/ballcat-common-conf/src/main/java/com/hccake/ballcat/common/conf/config/JacksonConfig.java rename to ballcat-common/ballcat-common-conf/src/main/java/com/hccake/ballcat/common/conf/config/JsonConfig.java index be151d7d..c2a49298 100644 --- a/ballcat-common/ballcat-common-conf/src/main/java/com/hccake/ballcat/common/conf/config/JacksonConfig.java +++ b/ballcat-common/ballcat-common-conf/src/main/java/com/hccake/ballcat/common/conf/config/JsonConfig.java @@ -3,7 +3,8 @@ package com.hccake.ballcat.common.conf.config; import com.fasterxml.jackson.databind.ObjectMapper; import com.hccake.ballcat.common.core.jackson.JavaTimeModule; import com.hccake.ballcat.common.core.jackson.NullSerializerModifier; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; +import com.hccake.ballcat.common.util.json.JacksonAdapter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; @@ -15,24 +16,25 @@ import org.springframework.context.annotation.Configuration; * @date 2019/10/17 22:14 */ @Configuration -@ConditionalOnClass(ObjectMapper.class) -public class JacksonConfig { +public class JsonConfig { /** * 自定义objectMapper * @return ObjectMapper */ @Bean + @ConditionalOnClass(ObjectMapper.class) @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper objectMapper() { - JacksonUtils.config(mapper -> { + JacksonAdapter adapter = (JacksonAdapter) JsonUtils.getAdapter(); + adapter.config(mapper -> { // NULL值修改 mapper.setSerializerFactory( mapper.getSerializerFactory().withSerializerModifier(new NullSerializerModifier())); // 时间解析器 mapper.registerModule(new JavaTimeModule()); }); - return JacksonUtils.getMapper(); + return JacksonAdapter.getMapper(); } } diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/SpringUtil.java b/ballcat-common/ballcat-common-conf/src/main/java/com/hccake/ballcat/common/conf/util/SpringUtils.java similarity index 85% rename from ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/SpringUtil.java rename to ballcat-common/ballcat-common-conf/src/main/java/com/hccake/ballcat/common/conf/util/SpringUtils.java index 528b15b4..5337087a 100644 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/SpringUtil.java +++ b/ballcat-common/ballcat-common-conf/src/main/java/com/hccake/ballcat/common/conf/util/SpringUtils.java @@ -1,4 +1,4 @@ -package com.hccake.ballcat.common.core.util; +package com.hccake.ballcat.common.conf.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; @@ -12,13 +12,13 @@ import java.util.Map; * @author lingting 2020/6/12 16:36 */ @Component -public class SpringUtil implements ApplicationContextAware { +public class SpringUtils implements ApplicationContextAware { private static ApplicationContext context; @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - context = applicationContext; + public void setApplicationContext(ApplicationContext context) throws BeansException { + SpringUtils.context = context; } @SuppressWarnings("unchecked") diff --git a/ballcat-common/ballcat-common-conf/src/main/resources/META-INF/spring.factories b/ballcat-common/ballcat-common-conf/src/main/resources/META-INF/spring.factories index 80825eca..b17927f6 100644 --- a/ballcat-common/ballcat-common-conf/src/main/resources/META-INF/spring.factories +++ b/ballcat-common/ballcat-common-conf/src/main/resources/META-INF/spring.factories @@ -1,8 +1,9 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.hccake.ballcat.common.conf.web.FilterConfig,\ - com.hccake.ballcat.common.conf.config.JacksonConfig,\ + com.hccake.ballcat.common.conf.config.JsonConfig,\ com.hccake.ballcat.common.conf.exception.ExceptionHandleAutoConfiguration,\ com.hccake.ballcat.common.conf.mybatis.MybatisPlusConfig,\ com.hccake.ballcat.common.conf.web.WebMvcConfig,\ - com.hccake.ballcat.common.conf.config.ExceptionHandleConfig + com.hccake.ballcat.common.conf.config.ExceptionHandleConfig,\ + com.hccake.ballcat.common.conf.util.SpringUtils diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/JacksonUtils.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/JacksonUtils.java deleted file mode 100644 index f4742f1e..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/JacksonUtils.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.hccake.ballcat.common.core.util; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.jsontype.NamedType; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import java.io.InputStream; -import java.lang.reflect.Type; -import java.util.function.Consumer; -import lombok.Getter; -import lombok.SneakyThrows; - -/** - * @author lingting 2020-12-02 20:06 - */ -public class JacksonUtils { - - @Getter - static ObjectMapper mapper = new ObjectMapper(); - - static { - mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); - } - - /** - * 对 mapper 进行配置 - * @author lingting 2020-12-02 20:24 - */ - public static void config(Consumer consumer) { - consumer.accept(mapper); - } - - /** - * 对象转 json string - * @author lingting 2020-12-02 20:08 - */ - @SneakyThrows - public static String toJson(Object o) { - return mapper.writeValueAsString(o); - } - - /** - * @param json json string - * @param 目标类型 - * @author lingting 2020-12-02 20:12 - */ - @SneakyThrows - public static T toObj(String json, Class t) { - return mapper.readValue(json, t); - } - - /** - * @param json json string - * @param type 目标类型 - * @author lingting 2020-12-02 20:12 - */ - @SneakyThrows - public static T toObj(String json, Type type) { - return mapper.readValue(json, mapper.constructType(type)); - } - - /** - * @param json json string - * @param ref 目标类型 - * @author lingting 2020-12-02 20:12 - */ - @SneakyThrows - public static T toObj(String json, TypeReference ref) { - return mapper.readValue(json, ref); - } - - /** - * @param inputStream json string 输入流 - * @param 目标类型 - * @author lingting 2020-12-02 20:12 - */ - @SneakyThrows - public static T toObj(InputStream inputStream, Class t) { - return mapper.readValue(inputStream, t); - } - - /** - * @param inputStream json string 输入流 - * @param type 目标类型 - * @author lingting 2020-12-02 20:12 - */ - @SneakyThrows - public static T toObj(InputStream inputStream, Type type) { - return mapper.readValue(inputStream, mapper.constructType(type)); - } - - /** - * @param inputStream json string 输入流 - * @param ref 目标类型 - * @author lingting 2020-12-02 20:12 - */ - @SneakyThrows - public static T toObj(InputStream inputStream, TypeReference ref) { - return mapper.readValue(inputStream, ref); - } - - /** - * @param json json string - * @return {@link JsonNode} - */ - @SneakyThrows - public static JsonNode toJsonNode(String json) { - return mapper.readTree(json); - } - - /** - * @author lingting 2020-12-02 20:18 - */ - public static void registerSubtype(Class clz, String type) { - mapper.registerSubtypes(new NamedType(clz, type)); - } - - /** - * @author lingting 2020-12-02 20:18 - */ - public static ObjectNode createEmptyJsonNode() { - return new ObjectNode(mapper.getNodeFactory()); - } - - /** - * @author lingting 2020-12-02 20:18 - */ - public static ArrayNode createEmptyArrayNode() { - return new ArrayNode(mapper.getNodeFactory()); - } - - /** - * @author lingting 2020-12-02 20:18 - */ - public static JsonNode transferToJsonNode(Object obj) { - return mapper.valueToTree(obj); - } - - /** - * @author lingting 2020-12-02 20:18 - */ - public static JavaType constructJavaType(Type type) { - return mapper.constructType(type); - } - -} diff --git a/ballcat-common/ballcat-common-core/src/main/resources/META-INF/spring.factories b/ballcat-common/ballcat-common-core/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 8777a4c3..00000000 --- a/ballcat-common/ballcat-common-core/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.hccake.ballcat.common.core.util.SpringUtil \ No newline at end of file diff --git a/ballcat-common/ballcat-common-util/pom.xml b/ballcat-common/ballcat-common-util/pom.xml new file mode 100644 index 00000000..7dd4637a --- /dev/null +++ b/ballcat-common/ballcat-common-util/pom.xml @@ -0,0 +1,42 @@ + + + + ballcat-common + com.hccake + 0.0.8-SNAPSHOT + + 4.0.0 + + ballcat-common-util + + + 8 + 8 + + + + + com.hccake + ballcat-common-core + + + cn.hutool + hutool-json + true + + + + com.alibaba + fastjson + true + + + + com.google.code.gson + gson + true + + + \ No newline at end of file diff --git a/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/ClassUtils.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/ClassUtils.java new file mode 100644 index 00000000..e1b125ef --- /dev/null +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/ClassUtils.java @@ -0,0 +1,27 @@ +package com.hccake.ballcat.common.util; + +import cn.hutool.core.util.ClassUtil; + +/** + * @author lingting 2021/2/25 21:17 + */ +public class ClassUtils extends ClassUtil { + + /** + * + * 确定class是否可以被加载 + * @param className 完整类名 + * @param classLoader 类加载 + * @author lingting 2021-02-25 21:17 + */ + public static boolean isPresent(String className, ClassLoader classLoader) { + try { + Class.forName(className, true, classLoader); + return true; + } + catch (Throwable ex) { + return false; + } + } + +} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/HtmlUtil.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/HtmlUtils.java similarity index 95% rename from ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/HtmlUtil.java rename to ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/HtmlUtils.java index 9a7b3367..c7cc4252 100644 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/HtmlUtil.java +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/HtmlUtils.java @@ -1,4 +1,4 @@ -package com.hccake.ballcat.common.core.util; +package com.hccake.ballcat.common.util; import cn.hutool.core.util.StrUtil; import org.jsoup.Jsoup; @@ -9,7 +9,7 @@ import org.jsoup.safety.Whitelist; * @author Hccake 2020/12/21 * @version 1.0 */ -public class HtmlUtil { +public class HtmlUtils { /** * html 转字符串,保留换行样式 diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/IPUtil.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/IpUtils.java similarity index 94% rename from ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/IPUtil.java rename to ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/IpUtils.java index 3114490a..f053a2ec 100644 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/IPUtil.java +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/IpUtils.java @@ -1,4 +1,4 @@ -package com.hccake.ballcat.common.core.util; +package com.hccake.ballcat.common.util; import cn.hutool.core.util.ArrayUtil; import cn.hutool.extra.servlet.ServletUtil; @@ -10,7 +10,7 @@ import javax.servlet.http.HttpServletRequest; * * @author Hccake */ -public class IPUtil { +public class IpUtils { /** * 如果在前端和服务端中间还有一层Node服务 在Node对前端数据进行处理并发起新请求时,需携带此头部信息 便于获取真实IP diff --git a/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/JsonUtils.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/JsonUtils.java new file mode 100644 index 00000000..e72eec46 --- /dev/null +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/JsonUtils.java @@ -0,0 +1,65 @@ +package com.hccake.ballcat.common.util; + +import com.hccake.ballcat.common.util.json.FastjsonAdapter; +import com.hccake.ballcat.common.util.json.GsonAdapter; +import com.hccake.ballcat.common.util.json.HuToolJsonAdapter; +import com.hccake.ballcat.common.util.json.JacksonAdapter; +import com.hccake.ballcat.common.util.json.JsonAdapter; +import com.hccake.ballcat.common.util.json.TypeReference; +import java.lang.reflect.Type; +import lombok.Getter; +import lombok.SneakyThrows; + +/** + * @author lingting 2021/2/25 20:38 + */ +public class JsonUtils { + + + @Getter + private static JsonAdapter adapter; + + static { + ClassLoader classLoader = JsonUtils.class.getClassLoader(); + if (ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader)) { + adapter = new JacksonAdapter(); + } else if (ClassUtils.isPresent("com.google.gson.Gson", classLoader)) { + adapter = new GsonAdapter(); + } else if (ClassUtils.isPresent("cn.hutool.json.JSONConfig", classLoader)) { + adapter = new HuToolJsonAdapter(); + } else if (ClassUtils.isPresent("com.alibaba.fastjson.JSON", classLoader)) { + adapter = new FastjsonAdapter(); + } + } + + /** + * 切换适配器. 请注意 本方法全局生效 + * + * @author lingting 2021-02-26 11:18 + */ + public static void switchAdapter(JsonAdapter adapter) { + JsonUtils.adapter = adapter; + } + + @SneakyThrows + public static String toJson(Object obj) { + return adapter.toJson(obj); + } + + @SneakyThrows + public static T toObj(String json, Class r) { + return adapter.toObj(json, r); + } + + @SneakyThrows + public static T toObj(String json, Type t) { + return adapter.toObj(json, t); + } + + @SneakyThrows + public static T toObj(String json, TypeReference t) { + return adapter.toObj(json, t); + } + + +} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/PasswordUtil.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/PasswordUtils.java similarity index 96% rename from ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/PasswordUtil.java rename to ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/PasswordUtils.java index 6165a480..57219dc9 100644 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/PasswordUtil.java +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/PasswordUtils.java @@ -1,4 +1,4 @@ -package com.hccake.ballcat.common.core.util; +package com.hccake.ballcat.common.util; import cn.hutool.core.codec.Base64; import cn.hutool.crypto.Mode; @@ -17,7 +17,7 @@ import java.nio.charset.StandardCharsets; * @version 1.0 * @date 2019/9/25 15:14 */ -public class PasswordUtil { +public class PasswordUtils { public static final PasswordEncoder ENCODER = new BCryptPasswordEncoder(); diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/TreeUtil.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/TreeUtils.java similarity index 93% rename from ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/TreeUtil.java rename to ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/TreeUtils.java index 3cf64f4c..c3d58493 100644 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/util/TreeUtil.java +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/TreeUtils.java @@ -1,4 +1,4 @@ -package com.hccake.ballcat.common.core.util; +package com.hccake.ballcat.common.util; import cn.hutool.core.collection.CollectionUtil; import com.hccake.ballcat.common.core.tree.TreeNode; @@ -16,7 +16,7 @@ import java.util.stream.Collectors; * @version 1.0 */ @UtilityClass -public class TreeUtil { +public class TreeUtils { /** * 根据一个TreeNode集合,返回构建好的树列表 @@ -27,7 +27,7 @@ public class TreeUtil { * @return 树列表 */ public , I> List buildTree(List nodes, I rootId) { - return TreeUtil.buildTree(nodes, rootId, Function.identity()); + return TreeUtils.buildTree(nodes, rootId, Function.identity()); } /** @@ -50,7 +50,7 @@ public class TreeUtil { // 根据根节点ID拿到一级节点 List treeList = childrenMap.get(rootId); // 遍历所有一级节点,赋值其子节点 - treeList.forEach(node -> TreeUtil.setChildren(node, childrenMap)); + treeList.forEach(node -> TreeUtils.setChildren(node, childrenMap)); return treeList; } @@ -65,7 +65,7 @@ public class TreeUtil { // 如果有孩子节点则赋值,且给孩子节点的孩子节点赋值 if (CollectionUtil.isNotEmpty(children)) { parent.setChildren(children); - children.forEach(node -> TreeUtil.setChildren(node, childrenMap)); + children.forEach(node -> TreeUtils.setChildren(node, childrenMap)); } else { parent.setChildren(new ArrayList<>()); diff --git a/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/FastjsonAdapter.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/FastjsonAdapter.java new file mode 100644 index 00000000..996e1290 --- /dev/null +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/FastjsonAdapter.java @@ -0,0 +1,67 @@ +package com.hccake.ballcat.common.util.json; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.parser.Feature; +import com.alibaba.fastjson.serializer.SerializerFeature; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiConsumer; + +/** + * @author lingting 2021/2/26 10:32 + */ +public class FastjsonAdapter implements JsonAdapter { + + /** + * json str -> obj 时 + */ + static final List FEATURES = new ArrayList<>(Feature.values().length); + + /** + * obj -> json str + */ + static final List SERIALIZER_FEATURES = new ArrayList<>(SerializerFeature.values().length); + + private static Feature[] features = new Feature[0]; + + private static SerializerFeature[] serializerFeatures = new SerializerFeature[0]; + + /** + * 不要使用 config 以外的形式更新配置 + */ + public void config(BiConsumer, List> consumer) { + consumer.accept(FEATURES, SERIALIZER_FEATURES); + features = FEATURES.toArray(new Feature[0]); + serializerFeatures = SERIALIZER_FEATURES.toArray(new SerializerFeature[0]); + } + + @Override + public String toJson(Object obj) { + return JSON.toJSONString(obj, serializerFeatures); + } + + @Override + public T toObj(String json, Class r) { + return JSON.parseObject(json, r, features); + } + + @Override + public T toObj(String json, Type t) { + return JSON.parseObject(json, t, features); + } + + @Override + public T toObj(String json, TypeReference t) { + /* + 由于 fastjson 下面这个方法 + com.alibaba.fastjson.JSON.parseObject(java.lang.String, com.alibaba.fastjson.TypeReference, com.alibaba + .fastjson.parser.Feature...) + 直接调用了 type.type, 而不是使用的 getType()方法. 所以使用 com.debug.json.FastjsonAdapter.toObj(java.lang.String, java.lang + .reflect.Type) 方法 + */ + + return toObj(json, t.getType()); + } + +} diff --git a/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/GsonAdapter.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/GsonAdapter.java new file mode 100644 index 00000000..e76f61a7 --- /dev/null +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/GsonAdapter.java @@ -0,0 +1,53 @@ +package com.hccake.ballcat.common.util.json; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.lang.reflect.Type; +import java.util.function.Consumer; +import lombok.Getter; + +/** + * @author lingting 2021/2/26 10:22 + */ +public class GsonAdapter implements JsonAdapter { + + @Getter + static Gson gson = new GsonBuilder().create(); + + static { + // 初始化gson配置 + } + + /** + * 由于 gson 实例不能更新. 需要 create 之后生成新的实例. 请避免在运行中更新配置. + * + * @author lingting 2021-02-26 10:29 + */ + public void config(Consumer consumer) { + GsonBuilder builder = gson.newBuilder(); + consumer.accept(builder); + // 更新 gson + gson = builder.create(); + } + + @Override + public String toJson(Object obj) { + return gson.toJson(obj); + } + + @Override + public T toObj(String json, Class r) { + return gson.fromJson(json,r); + } + + @Override + public T toObj(String json, Type t) { + return gson.fromJson(json,t); + } + + @Override + public T toObj(String json, TypeReference t) { + return gson.fromJson(json, t.getType()); + } + +} diff --git a/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/HuToolJsonAdapter.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/HuToolJsonAdapter.java new file mode 100644 index 00000000..637c9aef --- /dev/null +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/HuToolJsonAdapter.java @@ -0,0 +1,50 @@ +package com.hccake.ballcat.common.util.json; + +import cn.hutool.json.JSONConfig; +import cn.hutool.json.JSONUtil; +import java.lang.reflect.Type; +import java.util.function.Consumer; +import lombok.Getter; + +/** + * @author lingting 2021/2/26 10:00 + */ +public class HuToolJsonAdapter implements JsonAdapter { + + @Getter + static JSONConfig jsonConfig = JSONConfig.create(); + + static { + + } + + public void config(Consumer consumer) { + consumer.accept(jsonConfig); + } + + @Override + public String toJson(Object obj) { + return JSONUtil.parse(obj, jsonConfig).toJSONString(0); + } + + @Override + public T toObj(String json, Class r) { + return JSONUtil.parse(json, jsonConfig).toBean(r); + } + + @Override + public T toObj(String json, Type t) { + return JSONUtil.parse(json, jsonConfig).toBean(t); + } + + @Override + public T toObj(String json, TypeReference t) { + return JSONUtil.parse(json, jsonConfig).toBean(new cn.hutool.core.lang.TypeReference() { + @Override + public Type getType() { + return t.getType(); + } + }); + } + +} diff --git a/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/JacksonAdapter.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/JacksonAdapter.java new file mode 100644 index 00000000..5f66a43b --- /dev/null +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/JacksonAdapter.java @@ -0,0 +1,55 @@ +package com.hccake.ballcat.common.util.json; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.lang.reflect.Type; +import java.util.function.Consumer; +import lombok.Getter; +import lombok.SneakyThrows; + +/** + * @author lingting 2021/2/25 21:04 + */ +public class JacksonAdapter implements JsonAdapter { + + @Getter + static ObjectMapper mapper = new ObjectMapper(); + + static { + mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + } + + public void config(Consumer consumer) { + consumer.accept(mapper); + } + + @SneakyThrows + @Override + public String toJson(Object obj) { + return mapper.writeValueAsString(obj); + } + + @SneakyThrows + @Override + public T toObj(String json, Class r) { + return mapper.readValue(json, r); + } + + @SneakyThrows + @Override + public T toObj(String json, Type t) { + return mapper.readValue(json, mapper.constructType(t)); + } + + @SneakyThrows + @Override + public T toObj(String json, TypeReference t) { + return mapper.readValue(json, new com.fasterxml.jackson.core.type.TypeReference() { + @Override + public Type getType() { + return t.getType(); + } + }); + } + +} diff --git a/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/JsonAdapter.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/JsonAdapter.java new file mode 100644 index 00000000..b1fbb055 --- /dev/null +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/JsonAdapter.java @@ -0,0 +1,48 @@ +package com.hccake.ballcat.common.util.json; + +import java.lang.reflect.Type; + +/** + * json 相关 util类需实现本类 + * + * @author lingting 2021/2/25 20:43 + */ +public interface JsonAdapter { + + /** + * obj -> jsonStr + * @param obj obj + * @return java.lang.String + * @author lingting 2021-02-25 21:00 + */ + String toJson(Object obj); + + /** + * jsonStr -> obj + * @param json json str + * @param r obj.class + * @return T + * @author lingting 2021-02-25 21:02 + */ + T toObj(String json, Class r); + + /** + * jsonStr -> obj + * @param json json str + * @param t (obj.class)type + * @return T + * @author lingting 2021-02-25 21:02 + */ + T toObj(String json, Type t); + + /** + * + * jsonStr -> obj + * @param json json str + * @param t TypeReference + * @return T + * @author lingting 2021-02-25 21:49 + */ + T toObj(String json, TypeReference t); + +} diff --git a/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/TypeReference.java b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/TypeReference.java new file mode 100644 index 00000000..c355d784 --- /dev/null +++ b/ballcat-common/ballcat-common-util/src/main/java/com/hccake/ballcat/common/util/json/TypeReference.java @@ -0,0 +1,31 @@ +package com.hccake.ballcat.common.util.json; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +/** + * @author lingting 2021/2/25 21:46 + */ +public abstract class TypeReference implements Comparable> { + + protected final Type type; + + protected TypeReference() { + Type superClass = getClass().getGenericSuperclass(); + if (superClass instanceof Class) { + throw new IllegalArgumentException( + "Internal error: TypeReference constructed without actual type information"); + } + type = ((ParameterizedType) superClass).getActualTypeArguments()[0]; + } + + public Type getType() { + return type; + } + + @Override + public int compareTo(TypeReference o) { + return 0; + } + +} diff --git a/ballcat-common/pom.xml b/ballcat-common/pom.xml index 76348d0c..3cbf98fc 100644 --- a/ballcat-common/pom.xml +++ b/ballcat-common/pom.xml @@ -16,7 +16,8 @@ ballcat-common-core ballcat-common-conf ballcat-common-desensitize - + ballcat-common-util + diff --git a/ballcat-dependencies/pom.xml b/ballcat-dependencies/pom.xml index 950b9f42..02fbd318 100644 --- a/ballcat-dependencies/pom.xml +++ b/ballcat-dependencies/pom.xml @@ -51,6 +51,7 @@ 2.0.8 2.5.0 5.5.8 + 1.2.9 3.4.2 3.3.1 2.3.0 @@ -133,6 +134,11 @@ ballcat-common-core ${revision} + + com.hccake + ballcat-common-util + ${revision} + com.hccake ballcat-common-desensitize @@ -354,6 +360,19 @@ hutool-extra ${hutool.version} + + cn.hutool + hutool-json + ${hutool.version} + + + + + com.alibaba + fastjson + ${fastjson.version} + true + com.github.ulisesbocchio diff --git a/ballcat-extends/ballcat-extend-pay-ali/pom.xml b/ballcat-extends/ballcat-extend-pay-ali/pom.xml index 8ce97794..11052676 100644 --- a/ballcat-extends/ballcat-extend-pay-ali/pom.xml +++ b/ballcat-extends/ballcat-extend-pay-ali/pom.xml @@ -18,7 +18,7 @@ com.hccake - ballcat-common-core + ballcat-common-util com.alipay.sdk diff --git a/ballcat-extends/ballcat-extend-pay-ali/src/main/java/com/hccake/starte/pay/ali/domain/AliPayCallback.java b/ballcat-extends/ballcat-extend-pay-ali/src/main/java/com/hccake/starte/pay/ali/domain/AliPayCallback.java index fd6c940a..a042ebb4 100644 --- a/ballcat-extends/ballcat-extend-pay-ali/src/main/java/com/hccake/starte/pay/ali/domain/AliPayCallback.java +++ b/ballcat-extends/ballcat-extend-pay-ali/src/main/java/com/hccake/starte/pay/ali/domain/AliPayCallback.java @@ -1,9 +1,7 @@ package com.hccake.starte.pay.ali.domain; -import static com.hccake.ballcat.common.core.util.JacksonUtils.toJson; -import static com.hccake.ballcat.common.core.util.JacksonUtils.toObj; - import com.fasterxml.jackson.annotation.JsonProperty; +import com.hccake.ballcat.common.util.JsonUtils; import com.hccake.starte.pay.ali.enums.TradeStatus; import java.math.BigDecimal; import java.util.HashMap; @@ -28,10 +26,10 @@ public class AliPayCallback { public static AliPayCallback of(Map callbackParams) { Map map = new HashMap<>(callbackParams); String fundBillListStr = callbackParams.get("fund_bill_list").replaceAll(""", "\""); - map.put("fund_bill_list", toObj(fundBillListStr, List.class)); + map.put("fund_bill_list", JsonUtils.toObj(fundBillListStr, List.class)); // 覆盖原值 callbackParams.put("fund_bill_list", fundBillListStr); - return toObj(toJson(map), AliPayCallback.class); + return JsonUtils.toObj(JsonUtils.toJson(map), AliPayCallback.class); } @JsonProperty("gmt_create") diff --git a/ballcat-extends/ballcat-extend-pay-virtual/pom.xml b/ballcat-extends/ballcat-extend-pay-virtual/pom.xml index 86bd2d0a..78447ba4 100644 --- a/ballcat-extends/ballcat-extend-pay-virtual/pom.xml +++ b/ballcat-extends/ballcat-extend-pay-virtual/pom.xml @@ -24,7 +24,7 @@ com.hccake - ballcat-common-core + ballcat-common-util \ No newline at end of file diff --git a/ballcat-extends/ballcat-extend-pay-wx/pom.xml b/ballcat-extends/ballcat-extend-pay-wx/pom.xml index 09e85abd..5967cbd1 100644 --- a/ballcat-extends/ballcat-extend-pay-wx/pom.xml +++ b/ballcat-extends/ballcat-extend-pay-wx/pom.xml @@ -19,7 +19,7 @@ com.hccake - ballcat-common-core + ballcat-common-util cn.hutool diff --git a/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayCallback.java b/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayCallback.java index ef8fa15d..83c52690 100644 --- a/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayCallback.java +++ b/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayCallback.java @@ -1,7 +1,7 @@ package com.hccake.starte.pay.wx.response; import com.fasterxml.jackson.annotation.JsonProperty; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import com.hccake.starte.pay.wx.WxPay; import com.hccake.starte.pay.wx.enums.ResponseCode; import com.hccake.starte.pay.wx.enums.TradeType; @@ -68,7 +68,7 @@ public class WxPayCallback { private ResponseCode returnCode; public static WxPayCallback of(Map res) { - return JacksonUtils.toObj(JacksonUtils.toJson(res), WxPayCallback.class).setRaw(res); + return JsonUtils.toObj(JsonUtils.toJson(res), WxPayCallback.class).setRaw(res); } /** diff --git a/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayOrderQueryResponse.java b/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayOrderQueryResponse.java index 203d9840..75eef485 100644 --- a/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayOrderQueryResponse.java +++ b/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayOrderQueryResponse.java @@ -1,7 +1,7 @@ package com.hccake.starte.pay.wx.response; import com.fasterxml.jackson.annotation.JsonProperty; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import com.hccake.starte.pay.wx.enums.ResponseCode; import com.hccake.starte.pay.wx.enums.TradeState; import com.hccake.starte.pay.wx.enums.TradeType; @@ -83,7 +83,7 @@ public class WxPayOrderQueryResponse { private ResponseCode returnCode; public static WxPayOrderQueryResponse of(Map res) { - return JacksonUtils.toObj(JacksonUtils.toJson(res), WxPayOrderQueryResponse.class).setRaw(res); + return JsonUtils.toObj(JsonUtils.toJson(res), WxPayOrderQueryResponse.class).setRaw(res); } /** diff --git a/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayResponse.java b/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayResponse.java index f1ab6fc1..0d5d6798 100644 --- a/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayResponse.java +++ b/ballcat-extends/ballcat-extend-pay-wx/src/main/java/com/hccake/starte/pay/wx/response/WxPayResponse.java @@ -1,15 +1,11 @@ package com.hccake.starte.pay.wx.response; -import static com.hccake.starte.pay.wx.enums.ResponseCode.SUCCESS; - import com.fasterxml.jackson.annotation.JsonProperty; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import com.hccake.starte.pay.wx.enums.ResponseCode; import com.hccake.starte.pay.wx.enums.TradeType; import java.util.Map; import lombok.Data; -import lombok.Getter; -import lombok.Setter; import lombok.experimental.Accessors; /** @@ -20,7 +16,7 @@ import lombok.experimental.Accessors; public class WxPayResponse { public static WxPayResponse of(Map res) { - return JacksonUtils.toObj(JacksonUtils.toJson(res), WxPayResponse.class).setRaw(res); + return JsonUtils.toObj(JsonUtils.toJson(res), WxPayResponse.class).setRaw(res); } /** diff --git a/ballcat-samples/ballcat-sample-monitor/pom.xml b/ballcat-samples/ballcat-sample-monitor/pom.xml index 365d1910..0ffb49d0 100644 --- a/ballcat-samples/ballcat-sample-monitor/pom.xml +++ b/ballcat-samples/ballcat-sample-monitor/pom.xml @@ -35,7 +35,7 @@ com.hccake - ballcat-common-core + ballcat-common-util diff --git a/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/AbstractThread.java b/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/AbstractThread.java index 2fc53f29..be1747c1 100644 --- a/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/AbstractThread.java +++ b/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/AbstractThread.java @@ -1,6 +1,6 @@ package com.hccake.sample.pay.virtual.thread; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import com.hccake.sample.pay.virtual.domain.Result; import com.hccake.sample.pay.virtual.entity.Order; import com.hccake.starter.pay.viratual.AbstractVerifyThread; @@ -31,7 +31,7 @@ public abstract class AbstractThread extends AbstractVerifyThread @Override public void errorLog(Throwable e, List list) { // 读取缓存 和 接收数据时出现异常执行此方法 - log.error("读取缓存 和 接收数据时出现异常执行此方法, 数据: " + JacksonUtils.toJson(list), e); + log.error("读取缓存 和 接收数据时出现异常执行此方法, 数据: " + JsonUtils.toJson(list), e); } @Override @@ -91,7 +91,7 @@ public abstract class AbstractThread extends AbstractVerifyThread @Override public void error(Order obj, Throwable e) { // 校验订单 和 获取交易数据时出现异常执行此方法 - log.error("校验订单 和 获取交易数据时出现异常执行此方法, 出错订单: " + JacksonUtils.toJson(obj), e); + log.error("校验订单 和 获取交易数据时出现异常执行此方法, 出错订单: " + JsonUtils.toJson(obj), e); // 可根据业务需求在此进行其他处理. @@ -107,16 +107,16 @@ public abstract class AbstractThread extends AbstractVerifyThread @Override public void success(Order obj, Optional optional, Result verifyResult) { - log.info("交易成功, 订单数据: {}, 交易信息: {}, 结果: {}", JacksonUtils.toJson(obj), - !optional.isPresent() ? "null" : JacksonUtils.toJson(optional.get()), - JacksonUtils.toJson(verifyResult)); + log.info("交易成功, 订单数据: {}, 交易信息: {}, 结果: {}", JsonUtils.toJson(obj), + !optional.isPresent() ? "null" : JsonUtils.toJson(optional.get()), + JsonUtils.toJson(verifyResult)); } @Override public void failed(Order obj, Optional optional, Result verifyResult) { - log.info("交易失败, 订单数据: {}, 交易信息: {}, 结果: {}", JacksonUtils.toJson(obj), - !optional.isPresent() ? "null" : JacksonUtils.toJson(optional.get()), - JacksonUtils.toJson(verifyResult)); + log.info("交易失败, 订单数据: {}, 交易信息: {}, 结果: {}", JsonUtils.toJson(obj), + !optional.isPresent() ? "null" : JsonUtils.toJson(optional.get()), + JsonUtils.toJson(verifyResult)); } @Override diff --git a/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/EtherscanThread.java b/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/EtherscanThread.java index b673b75b..3c923334 100644 --- a/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/EtherscanThread.java +++ b/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/EtherscanThread.java @@ -1,6 +1,6 @@ package com.hccake.sample.pay.virtual.thread; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import com.hccake.sample.pay.virtual.entity.Order; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -30,7 +30,7 @@ public class EtherscanThread extends AbstractThread { return service.getTransactionByHash(obj.getHash()); } catch (Throwable e) { - log.error("查询订单出错, 订单: " + JacksonUtils.toJson(obj), e); + log.error("查询订单出错, 订单: " + JsonUtils.toJson(obj), e); // 查询出错, 返回 empty return Optional.empty(); } diff --git a/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/OmniThread.java b/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/OmniThread.java index e3234f2c..3ca47a5d 100644 --- a/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/OmniThread.java +++ b/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/OmniThread.java @@ -1,6 +1,6 @@ package com.hccake.sample.pay.virtual.thread; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import com.hccake.sample.pay.virtual.entity.Order; import live.lingting.virtual.currency.Transaction; import live.lingting.virtual.currency.service.impl.BtcOmniServiceImpl; @@ -31,7 +31,7 @@ public class OmniThread extends AbstractThread { return service.getTransactionByHash(obj.getHash()); } catch (Throwable e) { - log.error("查询订单出错, 订单: " + JacksonUtils.toJson(obj), e); + log.error("查询订单出错, 订单: " + JsonUtils.toJson(obj), e); // 查询出错, 返回 empty return Optional.empty(); } diff --git a/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/TronscanThread.java b/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/TronscanThread.java index d1c3bdcd..38144a26 100644 --- a/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/TronscanThread.java +++ b/ballcat-samples/ballcat-sample-pay/src/main/java/com/hccake/sample/pay/virtual/thread/TronscanThread.java @@ -1,6 +1,6 @@ package com.hccake.sample.pay.virtual.thread; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import com.hccake.sample.pay.virtual.entity.Order; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -30,7 +30,7 @@ public class TronscanThread extends AbstractThread { return service.getTransactionByHash(obj.getHash()); } catch (Throwable e) { - log.error("查询订单出错, 订单: " + JacksonUtils.toJson(obj), e); + log.error("查询订单出错, 订单: " + JsonUtils.toJson(obj), e); // 查询出错, 返回 empty return Optional.empty(); } diff --git a/ballcat-starters/ballcat-spring-boot-starter-log/pom.xml b/ballcat-starters/ballcat-spring-boot-starter-log/pom.xml index 1c14e5be..b41a73ea 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-log/pom.xml +++ b/ballcat-starters/ballcat-spring-boot-starter-log/pom.xml @@ -14,7 +14,7 @@ com.hccake - ballcat-common-core + ballcat-common-util org.springframework.boot diff --git a/ballcat-starters/ballcat-spring-boot-starter-log/src/main/java/com/hccake/ballcat/commom/log/operation/aspect/OperationLogAspect.java b/ballcat-starters/ballcat-spring-boot-starter-log/src/main/java/com/hccake/ballcat/commom/log/operation/aspect/OperationLogAspect.java index ea403fd1..7b39d1e2 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-log/src/main/java/com/hccake/ballcat/commom/log/operation/aspect/OperationLogAspect.java +++ b/ballcat-starters/ballcat-spring-boot-starter-log/src/main/java/com/hccake/ballcat/commom/log/operation/aspect/OperationLogAspect.java @@ -9,7 +9,7 @@ import com.hccake.ballcat.commom.log.operation.enums.LogStatusEnum; import com.hccake.ballcat.commom.log.operation.event.OperationLogEvent; import com.hccake.ballcat.commom.log.operation.model.OperationLogDTO; import com.hccake.ballcat.commom.log.util.LogUtils; -import com.hccake.ballcat.common.core.util.IPUtil; +import com.hccake.ballcat.common.util.IpUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; @@ -102,7 +102,7 @@ public class OperationLogAspect { // @formatter:off return new OperationLogDTO() .setCreateTime(LocalDateTime.now()) - .setIp(IPUtil.getIpAddr(request)) + .setIp(IpUtils.getIpAddr(request)) .setMethod(request.getMethod()) .setOperator(Objects.requireNonNull(LogUtils.getUsername())) .setStatus(LogStatusEnum.SUCCESS.getValue()) diff --git a/ballcat-starters/ballcat-spring-boot-starter-pay/pom.xml b/ballcat-starters/ballcat-spring-boot-starter-pay/pom.xml index 9389b2f1..36ff6892 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-pay/pom.xml +++ b/ballcat-starters/ballcat-spring-boot-starter-pay/pom.xml @@ -32,7 +32,7 @@ com.hccake - ballcat-common-core + ballcat-common-util diff --git a/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/common/redis/RedisHelper.java b/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/common/redis/RedisHelper.java new file mode 100644 index 00000000..06d9973d --- /dev/null +++ b/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/common/redis/RedisHelper.java @@ -0,0 +1,423 @@ +package com.hccake.ballcat.common.redis; + +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.ListOperations; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.SessionCallback; +import org.springframework.data.redis.core.SetOperations; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.core.script.RedisScript; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.lang.Nullable; + +/** + * @author lingting 2020/4/17 11:49 + */ +@Slf4j +public class RedisHelper { + + @Getter + @Setter + static StringRedisTemplate template; + + /* + * common ---------------------------------------------------------- + */ + + /** + * @author lingting 2020-04-29 15:04:39 + */ + public static HashOperations getHash() { + return template.opsForHash(); + } + + /** + * @author lingting 2020-04-29 15:04:40 + */ + public static ValueOperations getValue() { + return template.opsForValue(); + } + + public static ListOperations getList() { + return template.opsForList(); + } + + public static SetOperations getSet() { + return template.opsForSet(); + } + + public static boolean hasKey(String key) { + Boolean b = template.hasKey(key); + return b != null && b; + } + + /** + * 设置过期时间 + * @param time 时间,单位 秒 + * @author lingting 2020-07-28 13:28:41 + */ + public static boolean expire(String key, long time) { + Boolean b = template.expire(key, time, TimeUnit.SECONDS); + return b != null && b; + } + + /** + * 获取所有符合指定表达式的 key + * @param pattern 表达式 + * @return java.util.Set + * @author lingting 2020-04-27 15:44:09 + */ + public static Set keys(String pattern) { + return template.keys(pattern); + } + + /* + * lua 脚本 ---------------------------------------------------------- + */ + + /** + * 执行 lua脚本 + * @param action + * @return T + * @author lingting 2021-02-26 15:22 + */ + public static T execute(RedisCallback action) { + return template.execute(action); + } + + @Nullable + public static T execute(RedisCallback action, boolean exposeConnection) { + return execute(action, exposeConnection, false); + } + + @Nullable + public static T execute(RedisCallback action, boolean exposeConnection, boolean pipeline) { + return template.execute(action, exposeConnection, pipeline); + } + + public static T execute(SessionCallback session) { + return template.execute(session); + } + + public static T execute(RedisScript script, List keys, Object... args) { + return template.execute(script, keys, args); + } + + public static T execute(RedisScript script, RedisSerializer argsSerializer, + RedisSerializer resultSerializer, List keys, Object... args) { + return template.execute(script, argsSerializer, resultSerializer, keys, args); + } + + /* + * pipelined 操作 ---------------------------------------------------------- + */ + + /** + * 操作 pipelined + * @author lingting 2021-02-26 15:23 + */ + public static List executePipelined(SessionCallback session) { + return template.executePipelined(session); + } + + public static List executePipelined(SessionCallback session, + @Nullable RedisSerializer resultSerializer) { + return template.executePipelined(session, resultSerializer); + } + + public static List executePipelined(RedisCallback action) { + return template.executePipelined(action); + } + + public static List executePipelined(RedisCallback action, + @Nullable RedisSerializer resultSerializer) { + return template.executePipelined(action, resultSerializer); + } + + /* + * string ---------------------------------------------------------- + */ + + /** + * @author lingting 2020-04-29 15:04:48 + */ + public static String get(String key) { + return getValue().get(key); + } + + public static void set(String key, String val) { + getValue().set(key, val); + } + + /** + * 缓存数据 + * @param key key + * @param val val + * @param second 过期时间 单位:秒 + * @author lingting 2020-04-22 11:38:13 + */ + public static void set(String key, String val, long second) { + if (second > 0) { + getValue().set(key, val, second, TimeUnit.SECONDS); + } + } + + /** + * 缓存数据 + * @param key key + * @param val val + * @param instant 在指定时间过期 + * @author lingting 2021-02-02 10:31 + */ + public static void set(String key, String val, Instant instant) { + getValue().set(key, val); + getTemplate().expireAt(key, instant); + } + + public static boolean delete(String key) { + Boolean b = template.delete(key); + return b != null && b; + } + + public static long delete(Collection keys) { + Long l = template.delete(keys); + return l == null ? 0 : l; + } + + /** + * 如果 key 不存在,则设置 key为 val 并设置过期时间 + * @param key key + * @param value val + * @return boolean + * @author lingting 2020-04-29 15:56:51 + */ + public static boolean setIfAbsent(String key, String value) { + Boolean b = getValue().setIfAbsent(key, value); + return b != null && b; + } + + /** + * 如果key存在则设置 + * @param key key + * @param value 值 + * @param time 过期时间, 单位 秒 + * @return boolean + * @author lingting 2021-01-18 14:59 + */ + public static boolean setIfAbsent(String key, String value, long time) { + Boolean b = getValue().setIfAbsent(key, value, Duration.ofSeconds(time)); + return b != null && b; + } + + public static List multiGet(Collection keys) { + List list = getValue().multiGet(keys); + return list == null ? new ArrayList<>() : new ArrayList<>(list); + } + + /** + * 给 key +1 + * + * @author lingting 2020-05-13 11:04:17 + */ + public static Long increment(String key) { + return getValue().increment(key); + } + + /** + * 给 key 增加 指定数值 + * + * @author lingting 2020-05-13 11:04:17 + */ + public static Long increment(String key, long delta) { + return getValue().increment(key, delta); + } + + public static Long incrementAndExpire(String key, long time) { + return incrementAndExpire(key, 1, time); + } + + public static Long incrementAndExpire(String key, long delta, long time) { + Long increment = getValue().increment(key, delta); + expire(key, time); + return increment; + } + + /* + * list ---------------------------------------------------------- + */ + + /** + * @author lingting 2020-04-29 15:04:52 + */ + public static List listGet(String key) { + return getList().range(key, 0, listSize(key) - 1); + } + + /** + * 获取指定值在指定key中的索引 + * @author lingting 2020-12-17 11:06 + */ + public static Long listIndexOf(String key, String val) { + return getList().indexOf(key, val); + } + + /** + * 获知指定key中指定索引的值 + * @author lingting 2020-12-17 11:07 + */ + public static String listIndex(String key, long index) { + return getList().index(key, index); + } + + public static Long listRemove(String key, String val) { + return listRemove(key, 1, val); + } + + /** + * @param count 删除多少个 + * @author lingting 2020-12-16 19:13 + */ + public static Long listRemove(String key, long count, String val) { + return getList().remove(key, count, val); + } + + public static long listSize(String key) { + Long size = getList().size(key); + return size == null ? 0 : size; + } + + private static long listSet(String key, List list) { + long l = 0; + for (String str : list) { + l += listLeftPush(key, str); + } + return l; + } + + /** + * 插入list 并设置过期时间 + * @param key key + * @param list list 值 + * @param time 过期时间 + * @return long + * @author lingting 2020-04-22 15:22:02 + */ + public static long listSet(String key, List list, long time) { + long l = listSet(key, list); + expire(key, time); + return l; + } + + /** + * 插入列表 + * @param key key + * @param val val + * @author lingting 2020-04-22 15:18:07 + */ + public static Long listLeftPush(String key, String val) { + return getList().leftPush(key, val); + } + + public static String listPop(String key) { + return getList().rightPop(key); + } + + /* + * hash ---------------------------------------------------------- + */ + + /** + * @author lingting 2020-04-29 15:05:41 + */ + public static void hashSet(String key, String field, String value) { + getHash().put(key, field, value); + } + + /** + * 获取 指定 key 中 指定 field 的值 + * @param key key + * @param field field + * @return java.lang.Object + * @author lingting 2020-04-22 17:17:33 + */ + public static String hashGet(String key, String field) { + Object o = getHash().get(key, field); + return o == null ? null : o.toString(); + } + + /** + * 移除指定 key中的 字段 + * @param key key + * @param fields 字段 + * @return java.lang.Long + * @author lingting 2020-12-21 10:16 + */ + public static Long hashDelete(String key, String... fields) { + return getHash().delete(key, (Object[]) fields); + } + + /* + * set ----------------------------------------------------------- + */ + + /** + * set中添加数据 + * + * @author lingting 2020-12-17 10:50 + */ + public static Long setAdd(String key, String... values) { + return getSet().add(key, values); + } + + /** + * 获取集合中元素数量 + * @author lingting 2020-12-17 10:51 + */ + public static Long setSize(String key) { + return getSet().size(key); + } + + /** + * 随机弹出一个元素 + * @author lingting 2020-12-17 10:52 + */ + public static String setPop(String key) { + return getSet().pop(key); + } + + /** + * 移除集合中的元素 + * @author lingting 2020-12-17 10:55 + */ + public static Long setRemove(String key, String... values) { + return getSet().remove(key, (Object[]) values); + } + + public static Object evalLua(String lua, List key, Object... argv) { + String[] arg = Arrays.stream(argv).map(String::valueOf).toArray(String[]::new); + + try { + DefaultRedisScript redisScript = new DefaultRedisScript<>(lua, String.class); + return template.execute(redisScript, new StringRedisSerializer(), new StringRedisSerializer(), key, arg); + } + catch (Exception e) { + log.error("redis evalLua execute fail:lua[{}]", lua, e); + return "false"; + } + } + +} diff --git a/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/common/redis/config/RedisAutoConfiguration.java b/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/common/redis/config/RedisAutoConfiguration.java index 44daaafd..1909158b 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/common/redis/config/RedisAutoConfiguration.java +++ b/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/common/redis/config/RedisAutoConfiguration.java @@ -7,6 +7,7 @@ import com.hccake.ballcat.common.redis.serialize.CacheSerializer; import com.hccake.ballcat.common.redis.serialize.JacksonSerializer; import com.hccake.ballcat.common.redis.serialize.PrefixJdkRedisSerializer; import com.hccake.ballcat.common.redis.serialize.PrefixStringRedisSerializer; +import com.hccake.ballcat.common.redis.RedisHelper; import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -97,4 +98,11 @@ public class RedisAutoConfiguration { return template; } + @Bean(name = "com.hccake.ballcat.common.redis.RedisHelpers") + @ConditionalOnMissingBean(RedisHelper.class) + public RedisHelper redis(StringRedisTemplate template) { + RedisHelper.setTemplate(template); + return new RedisHelper(); + } + } diff --git a/ballcat-starters/ballcat-spring-boot-starter-sms/pom.xml b/ballcat-starters/ballcat-spring-boot-starter-sms/pom.xml index 59d31fb4..5f6b63a5 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-sms/pom.xml +++ b/ballcat-starters/ballcat-spring-boot-starter-sms/pom.xml @@ -22,7 +22,7 @@ com.hccake - ballcat-common-core + ballcat-common-util diff --git a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderResult.java b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderResult.java index 2bbfad92..f7c530ff 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderResult.java +++ b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderResult.java @@ -1,9 +1,8 @@ package com.hccake.starter.sms; import cn.hutool.core.convert.Convert; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.hccake.ballcat.common.core.util.SpringUtil; +import com.hccake.ballcat.common.util.JsonUtils; +import com.hccake.ballcat.common.util.json.TypeReference; import com.hccake.starter.sms.enums.TypeEnum; import java.util.Map; import java.util.Set; @@ -20,10 +19,6 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class SmsSenderResult { - public static ObjectMapper getObjectMapper() { - return SpringUtil.getBean(ObjectMapper.class); - } - /** * 状态字段名 */ @@ -85,7 +80,7 @@ public class SmsSenderResult { SmsSenderResult result = new SmsSenderResult(); result.success = false; result.msg = "短信发送失败,出现异常:" + e.getMessage() + "," + id; - result.target = getObjectMapper().writeValueAsString(phoneNumbers); + result.target = JsonUtils.toJson(phoneNumbers); result.platform = platform.name(); return result; } @@ -102,7 +97,7 @@ public class SmsSenderResult { // 没有异常就是成功! result.success = true; result.platform = TypeEnum.TENCENT.name(); - result.target = getObjectMapper().writeValueAsString(phoneNumbers); + result.target = JsonUtils.toJson(phoneNumbers); result.req = req; return result; } @@ -114,10 +109,10 @@ public class SmsSenderResult { // 没有异常就是成功! result.success = true; result.platform = TypeEnum.TIAN_YI_HONG.name(); - result.target = getObjectMapper().writeValueAsString(phoneNumbers); + result.target = JsonUtils.toJson(phoneNumbers); result.req = req; - Map map = getObjectMapper().readValue(resp, new TypeReference>() { + Map map = JsonUtils.toObj(resp, new TypeReference>() { }); if (Convert.toInt(map.get(TIAN_YI_HONG_STATUS), -1) < 0) { result.success = false; @@ -129,7 +124,7 @@ public class SmsSenderResult { @SneakyThrows @Override public String toString() { - return getObjectMapper().writeValueAsString(this); + return JsonUtils.toJson(this); } } diff --git a/ballcat-starters/ballcat-spring-boot-starter-websocket/pom.xml b/ballcat-starters/ballcat-spring-boot-starter-websocket/pom.xml index 273e3244..75b25347 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-websocket/pom.xml +++ b/ballcat-starters/ballcat-spring-boot-starter-websocket/pom.xml @@ -14,7 +14,7 @@ com.hccake - ballcat-common-core + ballcat-common-util com.hccake diff --git a/ballcat-starters/ballcat-spring-boot-starter-websocket/src/main/java/com/hccake/ballcat/common/websocket/WebSocketMessageSender.java b/ballcat-starters/ballcat-spring-boot-starter-websocket/src/main/java/com/hccake/ballcat/common/websocket/WebSocketMessageSender.java index 125295e4..34066fb3 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-websocket/src/main/java/com/hccake/ballcat/common/websocket/WebSocketMessageSender.java +++ b/ballcat-starters/ballcat-spring-boot-starter-websocket/src/main/java/com/hccake/ballcat/common/websocket/WebSocketMessageSender.java @@ -1,6 +1,6 @@ package com.hccake.ballcat.common.websocket; -import com.hccake.ballcat.common.core.util.JacksonUtils; +import com.hccake.ballcat.common.util.JsonUtils; import com.hccake.ballcat.common.websocket.holder.WebSocketSessionHolder; import com.hccake.ballcat.common.websocket.message.JsonWebSocketMessage; import lombok.extern.slf4j.Slf4j; @@ -36,7 +36,7 @@ public class WebSocketMessageSender { } public static void send(WebSocketSession session, JsonWebSocketMessage message) { - send(session, JacksonUtils.toJson(message)); + send(session, JsonUtils.toJson(message)); } public static boolean send(WebSocketSession session, String message) {