From 50fa31c6ad294ba8be2fff9857566f5b833b77e4 Mon Sep 17 00:00:00 2001 From: Loki <654612@qq.com> Date: Sat, 30 Apr 2022 14:44:52 +0800 Subject: [PATCH] =?UTF-8?q?app=E7=AB=AF=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/handler/DefaultDBFieldHandler.java | 5 +- .../config/YudaoRedisAutoConfiguration.java | 119 ++++++++++++++++-- .../YudaoSecurityAutoConfiguration.java | 6 +- .../YudaoWebSecurityConfigurerAdapter.java | 6 +- .../filter/JWTAuthenticationTokenFilter.java | 1 + .../src/main/resources/application.yaml | 3 + .../interceptor/PermissionInterceptor.java | 22 ++-- .../rest/AppStoreSeckillController.java | 2 +- .../auth/rest/LetterAppAuthController.java | 6 +- .../order/rest/AppStoreOrderController.java | 9 ++ .../rest/AppStoreProductController.java | 77 +++++------- .../modules/product/rest/ImageController.java | 44 +++++++ .../app/modules/services/AppAuthService.java | 12 +- .../services/CreatShareProductService.java | 21 +--- .../app/modules/shop/rest/CallStack.java | 18 +++ .../modules/shop/rest/IndexController.java | 10 +- .../yixiang/app/modules/shop/vo/IndexVo.java | 3 +- .../user/rest/AppUserRechargeController.java | 2 +- .../user/rest/LetterAppUserController.java | 4 +- .../user/rest/UserAddressController.java | 2 +- .../rest/controller/WxMaUserController.java | 2 +- .../java/co/yixiang/config/MvcConfigure.java | 11 +- .../co/yixiang/constant/ShopConstants.java | 70 +++++------ .../listener/RedisKeyInitialization.java | 97 ++++++++++++++ .../rest/StoreCombinationController.java | 8 +- .../activity/rest/StoreSeckillController.java | 6 +- .../impl/YxStoreCouponUserServiceImpl.java | 2 +- .../activity/vo/YxStoreBargainQueryVo.java | 12 +- .../vo/YxStoreCombinationQueryVo.java | 6 +- .../activity/vo/YxStoreSeckillQueryVo.java | 6 +- .../modules/cart/vo/YxStoreCartQueryVo.java | 6 +- .../rest/StoreCategoryController.java | 6 +- .../modules/mp/listener/TemplateListener.java | 4 +- .../mp/service/WeiXinSubscribeService.java | 6 +- .../mp/service/WeixinTemplateService.java | 12 +- .../order/service/dto/PriceGroupDto.java | 12 +- .../service/impl/YxStoreOrderServiceImpl.java | 18 +-- .../yixiang/modules/order/vo/ComputeVo.java | 12 +- .../yixiang/modules/order/vo/OrderDataVo.java | 2 +- .../domain/YxStoreProductAttrValue.java | 8 +- .../product/rest/StoreProductController.java | 9 +- .../impl/YxStoreProductServiceImpl.java | 4 +- .../product/vo/YxStoreProductQueryVo.java | 10 +- .../vo/YxStoreProductRelationQueryVo.java | 4 +- .../shop/rest/SystemConfigController.java | 4 +- .../shop/rest/SystemGroupDataController.java | 8 +- .../rest/ShippingTemplatesController.java | 2 +- .../service/impl/YxUserSignServiceImpl.java | 2 +- .../wechat/rest/YxWechatLiveController.java | 8 +- .../serializer/BigDecimalSerializer.java | 20 ++- .../config/ExpressAutoConfiguration.java | 4 +- .../java/co/yixiang/utils/QrCodeutil.java | 48 +++++++ .../java/co/yixiang/utils/RedisUtils.java | 60 +++++++-- .../java/co/yixiang/utils/ShopKeyUtils.java | 10 +- 54 files changed, 616 insertions(+), 255 deletions(-) create mode 100644 zsw-bxg/src/main/java/co/yixiang/app/modules/product/rest/ImageController.java create mode 100644 zsw-bxg/src/main/java/co/yixiang/app/modules/shop/rest/CallStack.java create mode 100644 zsw-bxg/src/main/java/co/yixiang/listener/RedisKeyInitialization.java create mode 100644 zsw-bxg/src/main/java/co/yixiang/utils/QrCodeutil.java diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/handler/DefaultDBFieldHandler.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/handler/DefaultDBFieldHandler.java index b646413b..5633fe72 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/handler/DefaultDBFieldHandler.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/handler/DefaultDBFieldHandler.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.framework.mybatis.core.handler; +import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; @@ -40,11 +41,11 @@ public class DefaultDBFieldHandler implements MetaObjectHandler { Long userId = WebFrameworkUtils.getLoginUserId(); // 当前登录用户不为空,创建人为空,则当前登录用户为创建人 - if (metaObject.hasSetter("creator")) { + if (metaObject.hasSetter("creator") && ObjectUtil.isNotEmpty(userId)) { this.setFieldValByName("creator", userId.toString(), metaObject); } - if (metaObject.hasSetter("updater")) { + if (metaObject.hasSetter("updater") && ObjectUtil.isNotEmpty(userId)) { this.setFieldValByName("updater", userId.toString(), metaObject); } diff --git a/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/YudaoRedisAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/YudaoRedisAutoConfiguration.java index 5a74a2bb..8dbeef88 100644 --- a/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/YudaoRedisAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/YudaoRedisAutoConfiguration.java @@ -1,16 +1,33 @@ package cn.iocoder.yudao.framework.redis.config; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.Cache; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.interceptor.CacheErrorHandler; +import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.util.DigestUtils; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; /** * Redis 配置类 */ -@Configuration -public class YudaoRedisAutoConfiguration { +@Slf4j +public class YudaoRedisAutoConfiguration extends CachingConfigurerSupport { /** * 创建 RedisTemplate Bean,使用 JSON 序列化方式 @@ -19,15 +36,101 @@ public class YudaoRedisAutoConfiguration { public RedisTemplate redisTemplate(RedisConnectionFactory factory) { // 创建 RedisTemplate 对象 RedisTemplate template = new RedisTemplate<>(); + //序列化 + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); + // value值的序列化采用fastJsonRedisSerializer + template.setValueSerializer(jackson2JsonRedisSerializer); + template.setHashValueSerializer(jackson2JsonRedisSerializer); + // key的序列化采用StringRedisSerializer + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); // 设置 RedisConnection 工厂。😈 它就是实现多种 Java Redis 客户端接入的秘密工厂。感兴趣的胖友,可以自己去撸下。 template.setConnectionFactory(factory); - // 使用 String 序列化方式,序列化 KEY 。 - template.setKeySerializer(RedisSerializer.string()); - template.setHashKeySerializer(RedisSerializer.string()); - // 使用 JSON 序列化方式(库是 Jackson ),序列化 VALUE 。 - template.setValueSerializer(RedisSerializer.json()); - template.setHashValueSerializer(RedisSerializer.json()); return template; } + /** + * 自定义缓存key生成策略,默认将使用该策略 + */ + @Bean + @Override + public KeyGenerator keyGenerator() { + return (target, method, params) -> { + Map container = new HashMap<>(3); + Class targetClassClass = target.getClass(); + // 类地址 + container.put("class",targetClassClass.toGenericString()); + // 方法名称 + container.put("methodName",method.getName()); + // 包名称 + container.put("package",targetClassClass.getPackage()); + // 参数列表 + for (int i = 0; i < params.length; i++) { + container.put(String.valueOf(i),params[i]); + } + // 转为JSON字符串 + String jsonString = JSONUtil.toJsonStr(container); + // 做SHA256 Hash计算,得到一个SHA256摘要作为Key + return SecureUtil.sha256(jsonString); +// return DigestUtils.sha256Hex(jsonString); + }; + } + + @Bean + @Override + public CacheErrorHandler errorHandler() { + // 异常处理,当Redis发生异常时,打印日志,但是程序正常走 + log.info("初始化 -> [{}]", "Redis CacheErrorHandler"); + return new CacheErrorHandler() { + @Override + public void handleCacheGetError(RuntimeException e, Cache cache, Object key) { + log.error("Redis occur handleCacheGetError:key -> [{}]", key, e); + } + + @Override + public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) { + log.error("Redis occur handleCachePutError:key -> [{}];value -> [{}]", key, value, e); + } + + @Override + public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) { + log.error("Redis occur handleCacheEvictError:key -> [{}]", key, e); + } + + @Override + public void handleCacheClearError(RuntimeException e, Cache cache) { + log.error("Redis occur handleCacheClearError:", e); + } + }; + } + + + class StringRedisSerializer implements RedisSerializer { + + private final Charset charset; + + StringRedisSerializer() { + this(StandardCharsets.UTF_8); + } + + private StringRedisSerializer(Charset charset) { + Assert.notNull(charset, "Charset must not be null!"); + this.charset = charset; + } + + @Override + public String deserialize(byte[] bytes) { + return (bytes == null ? null : new String(bytes, charset)); + } + + @Override + public byte[] serialize(Object object) { + String string = JSONUtil.toJsonStr(object); + if (StrUtil.isBlank(string)) { + return null; + } + string = string.replace("\"", ""); + return string.getBytes(charset); + } + } } diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java index d5953823..8b488562 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java @@ -22,6 +22,7 @@ import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -86,8 +87,11 @@ public class YudaoSecurityAutoConfiguration { * Token 认证过滤器 Bean */ @Bean - public JWTAuthenticationTokenFilter authenticationTokenFilter(MultiUserDetailsAuthenticationProvider authenticationProvider, + public JWTAuthenticationTokenFilter authenticationTokenFilter( + HttpServletRequest request, + MultiUserDetailsAuthenticationProvider authenticationProvider, GlobalExceptionHandler globalExceptionHandler) { + return new JWTAuthenticationTokenFilter(securityProperties, authenticationProvider, globalExceptionHandler); } diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java index 75aca632..3fa07d13 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java @@ -132,7 +132,7 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap .antMatchers("/common/**").permitAll() // 忽略宝享购全部 -// .antMatchers("/bxgApp/**","/bxg/**").hasAnyRole() + .antMatchers("/bxgApp/**").permitAll() // ②:每个项目的自定义规则 .and().authorizeRequests(registry -> // 下面,循环设置自定义规则 @@ -142,8 +142,8 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap .anyRequest().authenticated() ; - // 添加 JWT Filter - httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); +// // 添加 JWT Filter +// httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); } private String buildAdminApi(String url) { diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java index 57344adb..f30df3b3 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java @@ -36,6 +36,7 @@ public class JWTAuthenticationTokenFilter extends OncePerRequestFilter { @SuppressWarnings("NullableProblems") protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { + String token = SecurityFrameworkUtils.obtainAuthorization(request, securityProperties.getTokenHeader()); if (StrUtil.isNotEmpty(token)) { try { diff --git a/yudao-server/src/main/resources/application.yaml b/yudao-server/src/main/resources/application.yaml index 5733a148..14a36018 100644 --- a/yudao-server/src/main/resources/application.yaml +++ b/yudao-server/src/main/resources/application.yaml @@ -36,6 +36,8 @@ spring: db-history-used: true # activiti7 默认 false 不生成历史信息表,需手动设置开启 check-process-definitions: false # 设置为 false,禁用 /resources/processes 自动部署 BPMN XML 流程 history-level: full # full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数 + main: + allow-bean-definition-overriding: true # 工作流 Flowable 配置 flowable: @@ -123,6 +125,7 @@ yudao: - infra_job - infra_job_log - infra_job_log + - yx_system_city sms-code: # 短信验证码相关的配置项 expire-times: 10m send-frequency: 1m diff --git a/zsw-bxg/src/main/java/co/yixiang/app/common/interceptor/PermissionInterceptor.java b/zsw-bxg/src/main/java/co/yixiang/app/common/interceptor/PermissionInterceptor.java index 119f3d61..bb4181f5 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/common/interceptor/PermissionInterceptor.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/common/interceptor/PermissionInterceptor.java @@ -20,8 +20,11 @@ import co.yixiang.modules.user.domain.YxUser; import co.yixiang.modules.user.service.YxUserService; import co.yixiang.utils.RedisUtils; import com.auth0.jwt.interfaces.Claim; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; @@ -35,14 +38,13 @@ import java.util.Optional; * @author hupeng * @date 2020-04-30 */ -public class PermissionInterceptor extends HandlerInterceptorAdapter { +@Slf4j +@Component +public class PermissionInterceptor implements HandlerInterceptor { @Autowired private YxUserService userService; - @Autowired - private RedisUtils redisUtils; - public PermissionInterceptor() { super(); } @@ -74,10 +76,7 @@ public class PermissionInterceptor extends HandlerInterceptorAdapter { String uName = map.get("uName").asString(); - //检测用户是否被踢出 - if (redisUtils.get(ShopConstants.YSHOP_APP_LOGIN_USER + uName + ":" + token) == null) { - throw new UnAuthenticatedException(ApiCode.UNAUTHORIZED); - } + boolean valid = this.hasPermission(authCheck.get(), map); if(valid){ this.setToThreadLocal(map); @@ -86,6 +85,7 @@ public class PermissionInterceptor extends HandlerInterceptorAdapter { } private void setToThreadLocal(Map map) { + log.info("map:{}",map); Integer uid = map.get("uid").asInt(); Integer scope = map.get("scope").asInt(); YxUser user = userService.getById(uid); @@ -104,17 +104,19 @@ public class PermissionInterceptor extends HandlerInterceptorAdapter { return true; } + @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { - super.postHandle(request, response, handler, modelAndView); +// postHandle(request,response,handler,modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { LocalUser.clear(); - super.afterCompletion(request, response, handler, ex); +// super.afterCompletion(request, response, handler, ex); } + private Optional getAuthCheck(Object handler) { if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/activity/rest/AppStoreSeckillController.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/activity/rest/AppStoreSeckillController.java index 0b0f339f..2d36c443 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/activity/rest/AppStoreSeckillController.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/activity/rest/AppStoreSeckillController.java @@ -108,7 +108,7 @@ public class AppStoreSeckillController { SeckillConfigVo seckillConfigVo = new SeckillConfigVo(); YxSystemGroupDataQueryCriteria queryCriteria = new YxSystemGroupDataQueryCriteria(); - queryCriteria.setGroupName(ShopConstants.YSHOP_SECKILL_TIME); + queryCriteria.setGroupName(ShopConstants.ZSW_SECKILL_TIME); queryCriteria.setStatus(1); List yxSystemGroupDataList = yxSystemGroupDataService.queryAll(queryCriteria); diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/auth/rest/LetterAppAuthController.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/auth/rest/LetterAppAuthController.java index b4ab8cbf..189fb4e6 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/auth/rest/LetterAppAuthController.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/auth/rest/LetterAppAuthController.java @@ -106,7 +106,7 @@ public class LetterAppAuthController { @ApiOperation(value = "小程序获取用户信息", notes = "小程序获取用户信息") public ApiResult loginAuth(@Validated @RequestBody LoginParam loginParam) { Long uid = LocalUser.getUidByToken(); - String sessionKey = redisUtil.get(ShopConstants.YSHOP_MINI_SESSION_KET+ uid).toString(); + String sessionKey = redisUtil.get(ShopConstants.ZSW_MINI_SESSION_KET + uid).toString(); YxUser yxUser = authService.loginAuth(loginParam, uid, sessionKey); return ApiResult.ok(yxUser).setMsg("获取成功"); @@ -286,10 +286,10 @@ public class LetterAppAuthController { if (ObjectUtil.isNotNull(redisUtil.get(codeKey))) { return ApiResult.fail("10分钟内有效:" + redisUtil.get(codeKey).toString()); } - String code = RandomUtil.randomNumbers(ShopConstants.YSHOP_SMS_SIZE); + String code = RandomUtil.randomNumbers(ShopConstants.ZSW_SMS_SIZE); //redis存储 - redisUtil.set(codeKey, code, ShopConstants.YSHOP_SMS_REDIS_TIME); + redisUtil.set(codeKey, code, ShopConstants.ZSW_SMS_REDIS_TIME); String enable = redisUtil.getY("sms_enable"); if (ShopCommonEnum.ENABLE_2.getValue().toString().equals(enable)) { diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/order/rest/AppStoreOrderController.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/order/rest/AppStoreOrderController.java index 454dbeda..c42499df 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/order/rest/AppStoreOrderController.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/order/rest/AppStoreOrderController.java @@ -11,6 +11,7 @@ package co.yixiang.app.modules.order.rest; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.qrcode.QrCodeUtil; import co.yixiang.api.ApiResult; import cn.iocoder.yudao.framework.common.exception.YshopException; import co.yixiang.app.common.aop.NoRepeatSubmit; @@ -20,6 +21,7 @@ import co.yixiang.app.modules.order.param.ExpressParam; import co.yixiang.app.modules.services.CreatShareProductService; import co.yixiang.app.modules.services.OrderSupplyService; import cn.iocoder.yudao.framework.security.core.annotations.AuthCheck; +import co.yixiang.constant.SystemConfigConstants; import co.yixiang.enums.*; import co.yixiang.logging.aop.log.AppLog; import co.yixiang.modules.mp.domain.YxWechatTemplate; @@ -37,6 +39,7 @@ import co.yixiang.modules.order.vo.ComputeVo; import co.yixiang.modules.order.vo.ConfirmOrderVo; import co.yixiang.modules.order.vo.OrderCartInfoVo; import co.yixiang.modules.order.vo.YxStoreOrderQueryVo; +import co.yixiang.modules.shop.service.YxSystemConfigService; import co.yixiang.modules.user.domain.YxUser; import co.yixiang.tools.express.ExpressService; import co.yixiang.tools.express.config.ExpressAutoConfiguration; @@ -48,12 +51,17 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.imageio.ImageIO; import javax.validation.Valid; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -271,6 +279,7 @@ public class AppStoreOrderController { } + /** * 订单收货 */ diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/product/rest/AppStoreProductController.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/product/rest/AppStoreProductController.java index 18b7e239..b4f14b5e 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/product/rest/AppStoreProductController.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/product/rest/AppStoreProductController.java @@ -42,6 +42,7 @@ import co.yixiang.modules.shop.domain.YxSystemAttachment; import co.yixiang.modules.shop.service.YxSystemAttachmentService; import co.yixiang.modules.shop.service.YxSystemConfigService; import co.yixiang.modules.user.domain.YxUser; +import co.yixiang.utils.QrCodeutil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -49,10 +50,14 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.imageio.ImageIO; import java.awt.FontFormatException; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.LinkedHashMap; @@ -79,6 +84,7 @@ public class AppStoreProductController { private final YxSystemConfigService systemConfigService; private final YxSystemAttachmentService systemAttachmentService; private final CreatShareProductService creatShareProductService; + private final QrCodeutil qrCodeutil; private String path = ""; @@ -133,12 +139,12 @@ public class AppStoreProductController { */ @AppLog(value = "商品详情海报", type = 1) @AuthCheck - @GetMapping("/product/poster/{id}") + @GetMapping(value = "/product/poster/{id}") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品ID", paramType = "query", dataType = "int") }) @ApiOperation(value = "商品详情海报",notes = "商品详情海报") - public ApiResult prodoctPoster(@PathVariable Integer id,@RequestParam(value = "from",defaultValue = "h5") String from) throws IOException, FontFormatException { + public ApiResult prodoctPoster(@PathVariable Integer id, @RequestParam(value = "from",defaultValue = "h5") String from) throws IOException, FontFormatException { YxUser userInfo = LocalUser.getUser(); long uid = userInfo.getUid(); @@ -147,59 +153,38 @@ public class AppStoreProductController { // 海报 String siteUrl = systemConfigService.getData(SystemConfigConstants.SITE_URL); if(StrUtil.isEmpty(siteUrl)){ - return ApiResult.fail("未配置h5地址"); + throw new YshopException("未配置h5地址"); } String apiUrl = systemConfigService.getData(SystemConfigConstants.API_URL); if(StrUtil.isEmpty(apiUrl)){ - return ApiResult.fail("未配置api地址"); + throw new YshopException("未配置api地址"); } - String name = id+"_"+uid + "_"+from+"_product_detail_wap.jpg"; - YxSystemAttachment attachment = systemAttachmentService.getInfo(name); String sepa = File.separator; - String fileDir = path+"qrcode"+ sepa; - String qrcodeUrl = ""; - if(ObjectUtil.isNull(attachment)){ - File file = FileUtil.mkdir(new File(fileDir)); - //如果类型是小程序 - if(AppFromEnum.ROUNTINE.getValue().equals(from)){ - siteUrl = siteUrl+"/product/"; - //生成二维码 - QrCodeUtil.generate(siteUrl+"?id="+id+"&spread="+uid+"&pageType=good&codeType="+AppFromEnum.ROUNTINE.getValue(), 180, 180, - FileUtil.file(fileDir+name)); - } - else if(AppFromEnum.APP.getValue().equals(from)){ - siteUrl = siteUrl+"/product/"; - //生成二维码 - QrCodeUtil.generate(siteUrl+"?id="+id+"&spread="+uid+"&pageType=good&codeType="+AppFromEnum.APP.getValue(), 180, 180, - FileUtil.file(fileDir+name)); + String text ; + //如果类型是小程序 + if(AppFromEnum.ROUNTINE.getValue().equals(from)){ + siteUrl = siteUrl+"/product/"; + //生成二维码 + text = siteUrl+"?id="+id+"&spread="+uid+"&pageType=good&codeType="+AppFromEnum.ROUNTINE.getValue(); + } + else if(AppFromEnum.APP.getValue().equals(from)){ + siteUrl = siteUrl+"/product/"; + //生成二维码 + text = siteUrl+"?id="+id+"&spread="+uid+"&pageType=good&codeType="+AppFromEnum.APP.getValue(); //如果类型是h5 - }else if(AppFromEnum.H5.getValue().equals(from)){ - //生成二维码 - QrCodeUtil.generate(siteUrl+"/detail/"+id+"?spread="+uid, 180, 180, - FileUtil.file(fileDir+name)); - }else { - //生成二维码 - String uniUrl = systemConfigService.getData(SystemConfigConstants.UNI_SITE_URL); - siteUrl = StrUtil.isNotBlank(uniUrl) ? uniUrl : ShopConstants.DEFAULT_UNI_H5_URL; - QrCodeUtil.generate(siteUrl+"/pages/shop/GoodsCon/index?id="+id+"&spread="+uid, 180, 180, - FileUtil.file(fileDir+name)); - } - systemAttachmentService.attachmentAdd(name,String.valueOf(FileUtil.size(file)), - fileDir+name,"qrcode/"+name); - - qrcodeUrl = apiUrl + "/api/file/qrcode/"+name; - }else{ - qrcodeUrl = apiUrl + "/api/file/" + attachment.getSattDir(); + }else if(AppFromEnum.H5.getValue().equals(from)){ + //生成二维码 + text = siteUrl+"/detail/"+id+"?spread="+uid; + }else { + //生成二维码 + String uniUrl = systemConfigService.getData(SystemConfigConstants.UNI_SITE_URL); + siteUrl = StrUtil.isNotBlank(uniUrl) ? uniUrl : ShopConstants.DEFAULT_UNI_H5_URL; + text = siteUrl+"/pages/shop/GoodsCon/index?id="+id+"&spread="+uid; } - String spreadPicName = id+"_"+uid + "_"+from+"_product_user_spread.jpg"; - String spreadPicPath = fileDir+spreadPicName; - String rr = creatShareProductService.creatProductPic(storeProduct,qrcodeUrl, - spreadPicName,spreadPicPath,apiUrl); - return ApiResult.ok(rr); + String url = qrCodeutil.generateQrUrlBase64(text); + return ApiResult.ok(url); } - - /** * 普通商品详情 */ diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/product/rest/ImageController.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/product/rest/ImageController.java new file mode 100644 index 00000000..8c9d9408 --- /dev/null +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/product/rest/ImageController.java @@ -0,0 +1,44 @@ +package co.yixiang.app.modules.product.rest; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.codec.Base64Decoder; +import cn.hutool.extra.qrcode.QrCodeUtil; +import io.swagger.annotations.ApiOperation; +import lombok.SneakyThrows; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; + +@RestController +@RequestMapping("/qrcode") +public class ImageController { + + + @SneakyThrows + @ApiOperation(value = "二维码生成~") + @GetMapping( + value = "/image/{code}.png", + produces = {MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_GIF_VALUE, MediaType.IMAGE_PNG_VALUE} + ) + public byte[] orderCode(@PathVariable String code){ + // 判断是否是base64 + String pass = Base64Decoder.decodeStr(code); + // + if (code.equals(Base64.encode(pass))){ + code = pass; + } + + BufferedImage img = QrCodeUtil.generate(code, 180, 180); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ImageIO.write(img,"png",out); + return out.toByteArray(); + } + + +} diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/services/AppAuthService.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/services/AppAuthService.java index 39f01758..f3d7e691 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/services/AppAuthService.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/services/AppAuthService.java @@ -191,7 +191,7 @@ public class AppAuthService { this.userService.updateById(yxUser); } this.userService.setSpread(spread, yxUser.getUid()); - redisUtils.set(ShopConstants.YSHOP_MINI_SESSION_KET + yxUser.getUid(), session.getSessionKey()); + redisUtils.set(ShopConstants.ZSW_MINI_SESSION_KET + yxUser.getUid(), session.getSessionKey()); return yxUser; } catch (WxErrorException e) { e.printStackTrace(); @@ -300,7 +300,7 @@ public class AppAuthService { .nickname(account) .password(SecureUtil.md5(param.getPassword())) .phone(account) - .avatar(ShopConstants.YSHOP_DEFAULT_AVATAR) + .avatar(ShopConstants.ZSW_DEFAULT_AVATAR) .addIp(ip) .lastIp(ip) .userType(AppFromEnum.H5.getValue()) @@ -339,7 +339,7 @@ public class AppAuthService { } catch (Exception e) { e.printStackTrace(); } - redisUtils.set(ShopConstants.YSHOP_APP_LOGIN_USER +onlineUser.getUserName() + ":" + token, onlineUser, AppAuthService.expiredTimeIn); + redisUtils.set(ShopConstants.ZSW_APP_LOGIN_USER +onlineUser.getUserName() + ":" + token, onlineUser, AppAuthService.expiredTimeIn); } /** @@ -372,7 +372,7 @@ public class AppAuthService { * @param key / */ public void kickOut(String userName, String key) throws Exception { - key = ShopConstants.YSHOP_APP_LOGIN_USER + userName + ":" + EncryptUtils.desDecrypt(key); + key = ShopConstants.ZSW_APP_LOGIN_USER + userName + ":" + EncryptUtils.desDecrypt(key); redisUtils.del(key); } @@ -382,7 +382,7 @@ public class AppAuthService { * @param token / */ public void logout(String userName, String token) { - String key = ShopConstants.YSHOP_APP_LOGIN_USER + userName + ":" + token; + String key = ShopConstants.ZSW_APP_LOGIN_USER + userName + ":" + token; redisUtils.del(key); } @@ -394,7 +394,7 @@ public class AppAuthService { */ private List getAll(String uName) { List keys = null; - keys = redisUtils.scan(ShopConstants.YSHOP_APP_LOGIN_USER + uName + ":" + "*"); + keys = redisUtils.scan(ShopConstants.ZSW_APP_LOGIN_USER + uName + ":" + "*"); Collections.reverse(keys); List onlineUsers = new ArrayList<>(); diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/services/CreatShareProductService.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/services/CreatShareProductService.java index 2d75cb9f..c44014a9 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/services/CreatShareProductService.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/services/CreatShareProductService.java @@ -37,6 +37,7 @@ import co.yixiang.modules.shop.service.YxSystemStoreService; import co.yixiang.modules.user.domain.YxUser; import co.yixiang.utils.OrderUtil; +import co.yixiang.utils.QrCodeutil; import co.yixiang.utils.RedisUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -77,7 +78,7 @@ public class CreatShareProductService { private final YxSystemStoreService systemStoreService; private final YxSystemConfigService systemConfigService; private final RedisUtils redisUtils; - + private final QrCodeutil qrCodeutil; /** * 返回门店信息与二维码 * @param storeOrder 订单 @@ -95,21 +96,9 @@ public class CreatShareProductService { throw new YshopException("未配置api地址"); } //生成二维码 - String name = storeOrder.getVerifyCode()+"_yshop.jpg"; - YxSystemAttachment attachment = systemAttachmentService.getInfo(name); - String fileDir = path+"qrcode"+ File.separator; - String qrcodeUrl = ""; - if(ObjectUtil.isNull(attachment)){ - //生成二维码 - File file = FileUtil.mkdir(new File(fileDir)); - QrCodeUtil.generate(storeOrder.getVerifyCode(), 180, 180, - FileUtil.file(fileDir+name)); - systemAttachmentService.attachmentAdd(name,String.valueOf(FileUtil.size(file)), - fileDir+name,"qrcode/"+name); - qrcodeUrl = apiUrl + "/api/file/qrcode/"+name; - }else{ - qrcodeUrl = apiUrl + "/api/file/" + attachment.getSattDir(); - } + // String name = storeOrder.getVerifyCode()+"_yshop.jpg"; + // YxSystemAttachment attachment = systemAttachmentService.getInfo(name); + String qrcodeUrl = qrCodeutil.generateQrStr(storeOrder.getVerifyCode()); storeOrder.setCode(qrcodeUrl); storeOrder.setMapKey(mapKey); storeOrder.setSystemStore(systemStoreService.getYxSystemStoreById(storeOrder.getStoreId())); diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/rest/CallStack.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/rest/CallStack.java new file mode 100644 index 00000000..65054cb4 --- /dev/null +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/rest/CallStack.java @@ -0,0 +1,18 @@ +package co.yixiang.app.modules.shop.rest; + +public class CallStack { + + public static void printCallStatck() { + Throwable ex = new Throwable(); + StackTraceElement[] stackElements = ex.getStackTrace(); + if (stackElements != null) { + for (int i = 0; i < stackElements.length; i++) { + System.out.print(stackElements[i].getClassName()+"/t"); + System.out.print(stackElements[i].getFileName()+"/t"); + System.out.print(stackElements[i].getLineNumber()+"/t"); + System.out.println(stackElements[i].getMethodName()); + System.out.println("-----------------------------------"); + } + } + } +} diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/rest/IndexController.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/rest/IndexController.java index ea05535a..05ff5cae 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/rest/IndexController.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/rest/IndexController.java @@ -84,20 +84,20 @@ public class IndexController { return new ResponseEntity<>(canvas, HttpStatus.OK); } - @Cacheable(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY) + @Cacheable(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY) @GetMapping("/index") @ApiOperation(value = "首页数据",notes = "首页数据") public ApiResult index(){ IndexVo indexVo = IndexVo.builder() - .banner(systemGroupDataService.getDatas(ShopConstants.YSHOP_HOME_BANNER)) + .banner(systemGroupDataService.getDatas(ShopConstants.ZSW_HOME_BANNER)) .bastList(storeProductService.getList(1,6, ProductEnum.TYPE_1.getValue())) .benefit(storeProductService.getList(1,100,ProductEnum.TYPE_4.getValue())) .combinationList(storeCombinationService.getList(1,8).getStoreCombinationQueryVos()) .firstList(storeProductService.getList(1,6,ProductEnum.TYPE_3.getValue())) .likeInfo(storeProductService.getList(1,80,ProductEnum.TYPE_2.getValue())) .mapKey(redisUtils.get(ShopKeyUtils.getTengXunMapKey()).toString()) - .menus(systemGroupDataService.getDatas(ShopConstants.YSHOP_HOME_MENUS)) - .roll(systemGroupDataService.getDatas(ShopConstants.YSHOP_HOME_ROLL_NEWS)) + .menus(systemGroupDataService.getDatas(ShopConstants.ZSW_HOME_MENUS)) + .roll(systemGroupDataService.getDatas(ShopConstants.ZSW_HOME_ROLL_NEWS)) .seckillList(storeSeckillService.getList(1, 4)) .liveList(wechatLiveService.getList(1,4,0)) .build(); @@ -107,7 +107,7 @@ public class IndexController { @GetMapping("/search/keyword") @ApiOperation(value = "热门搜索关键字获取",notes = "热门搜索关键字获取") public ApiResult> search(){ - List list = systemGroupDataService.getDatas(ShopConstants.YSHOP_HOT_SEARCH); + List list = systemGroupDataService.getDatas(ShopConstants.ZSW_HOT_SEARCH); List stringList = new ArrayList<>(); for (JSONObject object : list) { stringList.add(object.getString("title")); diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/vo/IndexVo.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/vo/IndexVo.java index 23931ea7..6d282ca1 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/vo/IndexVo.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/shop/vo/IndexVo.java @@ -12,6 +12,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serializable; import java.util.List; @Data @@ -19,7 +20,7 @@ import java.util.List; @AllArgsConstructor @NoArgsConstructor @ApiModel("首页数据") -public class IndexVo { +public class IndexVo implements Serializable { @ApiModelProperty("banner") private List banner; diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/AppUserRechargeController.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/AppUserRechargeController.java index 5d9581f3..5ff9af10 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/AppUserRechargeController.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/AppUserRechargeController.java @@ -73,7 +73,7 @@ public class AppUserRechargeController { @ApiOperation(value = "充值方案",notes = "充值方案",response = ApiResult.class) public ApiResult getWays(){ YxSystemGroupDataQueryCriteria queryCriteria = new YxSystemGroupDataQueryCriteria(); - queryCriteria.setGroupName(ShopConstants.YSHOP_RECHARGE_PRICE_WAYS); + queryCriteria.setGroupName(ShopConstants.ZSW_RECHARGE_PRICE_WAYS); queryCriteria.setStatus(ShopCommonEnum.IS_STATUS_1.getValue()); List yxSystemGroupDataList = systemGroupDataService.queryAll(queryCriteria); diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/LetterAppUserController.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/LetterAppUserController.java index 09e20f1f..78feb7d3 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/LetterAppUserController.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/LetterAppUserController.java @@ -91,7 +91,7 @@ public class LetterAppUserController { @ApiOperation(value = "获取个人中心菜单",notes = "获取个人中心菜单") public ApiResult> userMenu(){ Map map = new LinkedHashMap<>(); - map.put("routine_my_menus",systemGroupDataService.getDatas(ShopConstants.YSHOP_MY_MENUES)); + map.put("routine_my_menus",systemGroupDataService.getDatas(ShopConstants.ZSW_MY_MENUES)); return ApiResult.ok(map); } @@ -164,7 +164,7 @@ public class LetterAppUserController { @GetMapping("/sign/config") @ApiOperation(value = "签到配置",notes = "签到配置") public ApiResult signConfig(){ - return ApiResult.ok(systemGroupDataService.getDatas(ShopConstants.YSHOP_SIGN_DAY_NUM)); + return ApiResult.ok(systemGroupDataService.getDatas(ShopConstants.ZSW_SIGN_DAY_NUM)); } /** diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/UserAddressController.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/UserAddressController.java index df565113..0e72118f 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/UserAddressController.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/UserAddressController.java @@ -61,7 +61,7 @@ public class UserAddressController { private final YxSystemCityService systemCityService; - @Cacheable(cacheNames = ShopConstants.YSHOP_REDIS_CITY_KEY) + @Cacheable(cacheNames = ShopConstants.ZSW_REDIS_CITY_KEY) @GetMapping("/city_list") @ApiOperation(value = "城市列表",notes = "城市列表") public ApiResult> getTest() { diff --git a/zsw-bxg/src/main/java/co/yixiang/app/modules/wechat/rest/controller/WxMaUserController.java b/zsw-bxg/src/main/java/co/yixiang/app/modules/wechat/rest/controller/WxMaUserController.java index ddcdcaaa..8aaff2c3 100644 --- a/zsw-bxg/src/main/java/co/yixiang/app/modules/wechat/rest/controller/WxMaUserController.java +++ b/zsw-bxg/src/main/java/co/yixiang/app/modules/wechat/rest/controller/WxMaUserController.java @@ -94,7 +94,7 @@ public class WxMaUserController { WxMaService wxMaService = WxMaConfiguration.getWxMaService(); String phone = ""; try { - String sessionKey = redisUtils.get(ShopConstants.YSHOP_MINI_SESSION_KET+ user.getUid()).toString(); + String sessionKey = redisUtils.get(ShopConstants.ZSW_MINI_SESSION_KET + user.getUid()).toString(); WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService() .getPhoneNoInfo(sessionKey, param.getEncryptedData(), param.getIv()); phone = phoneNoInfo.getPhoneNumber(); diff --git a/zsw-bxg/src/main/java/co/yixiang/config/MvcConfigure.java b/zsw-bxg/src/main/java/co/yixiang/config/MvcConfigure.java index 3f74db5e..395ea959 100644 --- a/zsw-bxg/src/main/java/co/yixiang/config/MvcConfigure.java +++ b/zsw-bxg/src/main/java/co/yixiang/config/MvcConfigure.java @@ -2,6 +2,7 @@ package co.yixiang.config; import co.yixiang.app.common.interceptor.PermissionInterceptor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; @@ -13,16 +14,16 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Slf4j public class MvcConfigure implements WebMvcConfigurer { - public HandlerInterceptor getPermissionInterceptor() { - return new PermissionInterceptor(); - } + @Autowired + private PermissionInterceptor interceptor; @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(this.getPermissionInterceptor()) + registry.addInterceptor(interceptor) .addPathPatterns("/bxgApp/**"); } + @Override public void configurePathMatch(PathMatchConfigurer configurer) { // 给电商的全部接口增加前缀 @@ -31,4 +32,6 @@ public class MvcConfigure implements WebMvcConfigurer { configurer.addPathPrefix("/admin-api/bxg",aClass -> aClass.getPackage().getName().startsWith("co.yixiang")); } + + } diff --git a/zsw-bxg/src/main/java/co/yixiang/constant/ShopConstants.java b/zsw-bxg/src/main/java/co/yixiang/constant/ShopConstants.java index bb0c3556..22e42627 100644 --- a/zsw-bxg/src/main/java/co/yixiang/constant/ShopConstants.java +++ b/zsw-bxg/src/main/java/co/yixiang/constant/ShopConstants.java @@ -37,36 +37,36 @@ public interface ShopConstants { /** * 微信支付service */ - String YSHOP_WEIXIN_PAY_SERVICE = "yshop_weixin_pay_service"; + String ZSW_WEIXIN_PAY_SERVICE = "zsw_weixin_pay_service"; /** * 微信支付小程序service */ - String YSHOP_WEIXIN_MINI_PAY_SERVICE = "yshop_weixin_mini_pay_service"; + String ZSW_WEIXIN_MINI_PAY_SERVICE = "zsw_weixin_mini_pay_service"; /** * 微信支付app service */ - String YSHOP_WEIXIN_APP_PAY_SERVICE = "yshop_weixin_app_pay_service"; + String ZSW_WEIXIN_APP_PAY_SERVICE = "zsw_weixin_app_pay_service"; /** * 微信公众号service */ - String YSHOP_WEIXIN_MP_SERVICE = "yshop_weixin_mp_service"; + String ZSW_WEIXIN_MP_SERVICE = "zsw_weixin_mp_service"; /** * 微信小程序service */ - String YSHOP_WEIXIN_MA_SERVICE = "yshop_weixin_ma_service"; + String ZSW_WEIXIN_MA_SERVICE = "zsw_weixin_ma_service"; /** * 商城默认密码 */ - String YSHOP_DEFAULT_PWD = "123456"; + String ZSW_DEFAULT_PWD = "123456"; /** * 商城默认注册图片 */ - String YSHOP_DEFAULT_AVATAR = "https://image.dayouqiantu.cn/5e79f6cfd33b6.png"; + String ZSW_DEFAULT_AVATAR = ""; /** * 腾讯地图地址解析 @@ -76,104 +76,104 @@ public interface ShopConstants { /** * redis首页键 */ - String YSHOP_REDIS_INDEX_KEY = "yshop:index_data"; + String ZSW_REDIS_INDEX_KEY = "zsw:index_data"; /** * 配置列表缓存 */ - String YSHOP_REDIS_CONFIG_DATAS = "yshop:config_datas"; + String ZSW_REDIS_CONFIG_DATAS = "zsw:config_datas"; /** * 充值方案 */ - String YSHOP_RECHARGE_PRICE_WAYS = "yshop_recharge_price_ways"; + String ZSW_RECHARGE_PRICE_WAYS = "zsw_recharge_price_ways"; /** * 首页banner */ - String YSHOP_HOME_BANNER = "yshop_home_banner"; + String ZSW_HOME_BANNER = "zsw_home_banner"; /** * 首页菜单 */ - String YSHOP_HOME_MENUS = "yshop_home_menus"; + String ZSW_HOME_MENUS = "zsw_home_menus"; /** * 首页滚动新闻 */ - String YSHOP_HOME_ROLL_NEWS = "yshop_home_roll_news"; + String ZSW_HOME_ROLL_NEWS = "zsw_home_roll_news"; /** * 热门搜索 */ - String YSHOP_HOT_SEARCH = "yshop_hot_search"; + String ZSW_HOT_SEARCH = "zsw_hot_search"; /** * 个人中心菜单 */ - String YSHOP_MY_MENUES = "yshop_my_menus"; + String ZSW_MY_MENUES = "zsw_my_menus"; /** * 秒杀时间段 */ - String YSHOP_SECKILL_TIME = "yshop_seckill_time"; + String ZSW_SECKILL_TIME = "zsw_seckill_time"; /** * 签到天数 */ - String YSHOP_SIGN_DAY_NUM = "yshop_sign_day_num"; + String ZSW_SIGN_DAY_NUM = "zsw_sign_day_num"; /** * 打印机配置 */ - String YSHOP_ORDER_PRINT_COUNT = "order_print_count"; + String ZSW_ORDER_PRINT_COUNT = "order_print_count"; /** * 飞蛾用户信息 */ - String YSHOP_FEI_E_USER = "fei_e_user"; + String ZSW_FEI_E_USER = "fei_e_user"; /** * 飞蛾用户密钥 */ - String YSHOP_FEI_E_UKEY= "fei_e_ukey"; + String ZSW_FEI_E_UKEY= "fei_e_ukey"; /** * 打印机配置 */ - String YSHOP_ORDER_PRINT_COUNT_DETAIL = "order_print_count_detail"; + String ZSW_ORDER_PRINT_COUNT_DETAIL = "order_print_count_detail"; /** * 短信验证码长度 */ - int YSHOP_SMS_SIZE = 6; + int ZSW_SMS_SIZE = 6; /** * 短信缓存时间 */ - long YSHOP_SMS_REDIS_TIME = 600L; + long ZSW_SMS_REDIS_TIME = 600L; //零标识 - String YSHOP_ZERO = "0"; + String ZSW_ZERO = "0"; //业务标识标识 - String YSHOP_ONE = "1"; + String ZSW_ONE = "1"; //目前完成任务数量是3 Long TASK_FINISH_COUNT = 3L; - int YSHOP_ONE_NUM = 1; + int ZSW_ONE_NUM = 1; - String YSHOP_ORDER_CACHE_KEY = "yshop:order"; + String ZSW_ORDER_CACHE_KEY = "zsw:order"; - long YSHOP_ORDER_CACHE_TIME = 600L; + long ZSW_ORDER_CACHE_TIME = 600L; String WECHAT_MENUS = "wechat_menus"; - String YSHOP_EXPRESS_SERVICE = "yshop_express_service"; + String ZSW_EXPRESS_SERVICE = "zsw_express_service"; - String YSHOP_REDIS_SYS_CITY_KEY = "yshop:city_list"; + String ZSW_REDIS_SYS_CITY_KEY = "zsw:city_list"; - String YSHOP_REDIS_CITY_KEY = "yshop:city"; + String ZSW_REDIS_CITY_KEY = "zsw:city"; - String YSHOP_APP_LOGIN_USER = "app-online-token:"; + String ZSW_APP_LOGIN_USER = "app-online-token:"; - String YSHOP_WECHAT_PUSH_REMARK = "yshop为您服务!"; + String ZSW_WECHAT_PUSH_REMARK = "回乡欢迎您!"; - String DEFAULT_UNI_H5_URL = "https://h5.yixiang.co"; + String DEFAULT_UNI_H5_URL = "https://www.lotus-wallet.com"; - String YSHOP_MINI_SESSION_KET = "yshop:session_key:"; + String ZSW_MINI_SESSION_KET = "zsw:session_key:"; /**公众号二维码*/ String WECHAT_FOLLOW_IMG="wechat_follow_img"; diff --git a/zsw-bxg/src/main/java/co/yixiang/listener/RedisKeyInitialization.java b/zsw-bxg/src/main/java/co/yixiang/listener/RedisKeyInitialization.java new file mode 100644 index 00000000..b87ec6d1 --- /dev/null +++ b/zsw-bxg/src/main/java/co/yixiang/listener/RedisKeyInitialization.java @@ -0,0 +1,97 @@ +package co.yixiang.listener; + +import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; +import cn.iocoder.yudao.module.system.service.tenant.TenantService; +import cn.iocoder.yudao.module.system.service.tenant.TenantServiceImpl; +import co.yixiang.modules.shop.domain.YxSystemConfig; +import co.yixiang.modules.shop.domain.YxSystemGroupData; +import co.yixiang.modules.shop.service.YxSystemConfigService; +import co.yixiang.modules.shop.service.YxSystemGroupDataService; +import co.yixiang.modules.shop.service.dto.YxSystemGroupDataQueryCriteria; +import co.yixiang.utils.RedisUtils; +import com.google.common.collect.Lists; +import jodd.util.MapEntry; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Component +public class RedisKeyInitialization implements CommandLineRunner { + + @Resource + private TenantServiceImpl tenantService; + + @Autowired + private RedisUtils redisUtils; + + @Autowired + private YxSystemConfigService systemConfigService; + + @Autowired + private YxSystemGroupDataService systemGroupDataService; + + @Override + public void run(String... args) throws Exception { + + Map tenantCache = tenantService.getTenantCache(); + TenantContextHolder.setTenantId(0L); + + // 配置模版 + List configTemplateList = systemConfigService.queryAll(null); + // 商城数据 + List groupDataTemplateList = systemGroupDataService.queryAll(null); + + for ( Map.Entry entry : tenantCache.entrySet()){ + TenantDO tenant = entry.getValue(); + TenantContextHolder.setTenantId(tenant.getId()); + + // 处理系统设置 + List configs = systemConfigService.queryAll(null); + List configsName = configs.stream() + .map(YxSystemConfig::getMenuName) + .collect(Collectors.toList()); + + // 准备配置模版 将已经有的剔除 没有的准备插入数据库 + List rsT = ObjectUtil.clone(configTemplateList); + if (ObjectUtil.isNotEmpty(configsName)) { + rsT.removeIf(r -> configsName.contains(r.getMenuName())); + } + // 清除id + rsT.forEach(r-> r.setId(null)); + systemConfigService.saveBatch(rsT); + + // 处理系统配置 + List groupDatas = systemGroupDataService.queryAll( + new YxSystemGroupDataQueryCriteria().setStatus(1)); + List groupDatasNames = groupDatas.stream() + .map(YxSystemGroupData::getGroupName) + .collect(Collectors.toList()); + + List rsD = ObjectUtil.clone(groupDataTemplateList); + if (ObjectUtil.isNotEmpty(groupDatasNames)) { + rsD.removeIf(r -> groupDatasNames.contains(r.getGroupName())); + } + rsD.forEach(r-> r.setId(null)); + systemGroupDataService.saveBatch(rsD); + + // 重新读取 + configs = systemConfigService.queryAll(null); + + for (YxSystemConfig config: configs) { + redisUtils.set(config.getMenuName(),config.getValue()); + } + + log.info("租户:{} 配置和缓存处理完成。。。",tenant.getName()); + } + } +} diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/activity/rest/StoreCombinationController.java b/zsw-bxg/src/main/java/co/yixiang/modules/activity/rest/StoreCombinationController.java index 1b321169..472cf962 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/activity/rest/StoreCombinationController.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/activity/rest/StoreCombinationController.java @@ -85,7 +85,7 @@ public class StoreCombinationController { return new ResponseEntity<>(yxStoreCombinationService.queryAll(criteria,pageable),HttpStatus.OK); } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @Log("新增拼团") @ApiOperation(value = "新增拼团") @PostMapping(value = "/yxStoreCombination") @@ -167,7 +167,7 @@ public class StoreCombinationController { productDto.setAttr(productFormatDto); } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @Log("修改拼团") @ApiOperation(value = "新增/修改拼团") @PutMapping(value = "/yxStoreCombination") @@ -181,7 +181,7 @@ public class StoreCombinationController { } } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @ForbidSubmit @ApiOperation(value = "开启关闭") @PostMapping(value = "/yxStoreCombination/onsale/{id}") @@ -191,7 +191,7 @@ public class StoreCombinationController { yxStoreCombinationService.onSale(id,status); return new ResponseEntity(HttpStatus.OK); } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @ForbidSubmit @Log("删除拼团") @ApiOperation(value = "删除拼团") diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/activity/rest/StoreSeckillController.java b/zsw-bxg/src/main/java/co/yixiang/modules/activity/rest/StoreSeckillController.java index 9f296af4..1414cdf3 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/activity/rest/StoreSeckillController.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/activity/rest/StoreSeckillController.java @@ -77,7 +77,7 @@ public class StoreSeckillController { } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY, allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY, allEntries = true) @Log("发布") @ApiOperation(value = "发布") @PutMapping(value = "/yxStoreSeckill") @@ -91,7 +91,7 @@ public class StoreSeckillController { } } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY, allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY, allEntries = true) @ForbidSubmit @Log("删除") @ApiOperation(value = "删除") @@ -102,7 +102,7 @@ public class StoreSeckillController { return new ResponseEntity(HttpStatus.OK); } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY, allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY, allEntries = true) @Log("新增秒杀") @ApiOperation(value = "新增秒杀") @PostMapping(value = "/yxStoreSeckill") diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCouponUserServiceImpl.java b/zsw-bxg/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCouponUserServiceImpl.java index 357340f2..3963d291 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCouponUserServiceImpl.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCouponUserServiceImpl.java @@ -93,7 +93,7 @@ public class YxStoreCouponUserServiceImpl extends BaseServiceImpl beUsableCouponList(Long uid,String cartIds) { Map cartGroup = yxStoreCartService.getUserProductCartList(uid, - cartIds, ShopConstants.YSHOP_ONE_NUM); + cartIds, ShopConstants.ZSW_ONE_NUM); List cartInfo = (List)cartGroup.get("valid"); diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreBargainQueryVo.java b/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreBargainQueryVo.java index f1ee7703..26b4c9fd 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreBargainQueryVo.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreBargainQueryVo.java @@ -56,22 +56,22 @@ public class YxStoreBargainQueryVo implements Serializable { @ApiModelProperty(value = "砍价产品名称") private String storeName; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "砍价金额") private BigDecimal price; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "砍价商品最低价") private BigDecimal minPrice; @ApiModelProperty(value = "每次购买的砍价产品数量") private Integer num; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "用户每次砍价的最大金额") private BigDecimal bargainMaxPrice; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "用户每次砍价的最小金额") private BigDecimal bargainMinPrice; @@ -90,14 +90,14 @@ public class YxStoreBargainQueryVo implements Serializable { @ApiModelProperty(value = "砍价活动简介") private String info; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "成本价") private BigDecimal cost; @ApiModelProperty(value = "排序") private Integer sort; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "邮费") private BigDecimal postage; diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreCombinationQueryVo.java b/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreCombinationQueryVo.java index 17a60aa2..97d187f9 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreCombinationQueryVo.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreCombinationQueryVo.java @@ -62,11 +62,11 @@ public class YxStoreCombinationQueryVo implements Serializable { @ApiModelProperty(value = "简介") private String info; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "价格") private BigDecimal price; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "商品价格") private BigDecimal productPrice; @@ -82,7 +82,7 @@ public class YxStoreCombinationQueryVo implements Serializable { @ApiModelProperty(value = "是否包邮1是0否") private Integer isPostage; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "邮费") private BigDecimal postage; diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreSeckillQueryVo.java b/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreSeckillQueryVo.java index 50102cd1..9d0d474f 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreSeckillQueryVo.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/activity/vo/YxStoreSeckillQueryVo.java @@ -51,15 +51,15 @@ public class YxStoreSeckillQueryVo implements Serializable{ } - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "价格") private BigDecimal price; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "成本") private BigDecimal cost; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) @ApiModelProperty(value = "原价") private BigDecimal otPrice; diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/cart/vo/YxStoreCartQueryVo.java b/zsw-bxg/src/main/java/co/yixiang/modules/cart/vo/YxStoreCartQueryVo.java index a45009fc..815ef9f2 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/cart/vo/YxStoreCartQueryVo.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/cart/vo/YxStoreCartQueryVo.java @@ -54,17 +54,17 @@ public class YxStoreCartQueryVo implements Serializable { private YxStoreProductQueryVo productInfo; @ApiModelProperty(value = "成本价") - @JsonSerialize(using = DoubleSerializer.class) + //@JsonSerialize(using = DoubleSerializer.class) private Double costPrice; @ApiModelProperty(value = "真实价格") - @JsonSerialize(using = DoubleSerializer.class) + //@JsonSerialize(using = DoubleSerializer.class) private Double truePrice; @ApiModelProperty(value = "真实库存") private Integer trueStock; - @JsonSerialize(using = DoubleSerializer.class) + //@JsonSerialize(using = DoubleSerializer.class) @ApiModelProperty(value = "vip真实价格") private Double vipTruePrice; diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/category/rest/StoreCategoryController.java b/zsw-bxg/src/main/java/co/yixiang/modules/category/rest/StoreCategoryController.java index 5270f6ee..edf42bbe 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/category/rest/StoreCategoryController.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/category/rest/StoreCategoryController.java @@ -82,7 +82,7 @@ public class StoreCategoryController { @Log("新增商品分类") @ApiOperation(value = "新增商品分类") @PostMapping(value = "/yxStoreCategory") - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @PreAuthorize("@ss.hasAnyPermissions('admin','YXSTORECATEGORY_ALL','YXSTORECATEGORY_CREATE')") public ResponseEntity create(@Validated @RequestBody YxStoreCategory resources){ if(resources.getPid() != null && resources.getPid() > 0 && StrUtil.isBlank(resources.getPic())) { @@ -100,7 +100,7 @@ public class StoreCategoryController { @ForbidSubmit @Log("修改商品分类") @ApiOperation(value = "修改商品分类") - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @PutMapping(value = "/yxStoreCategory") @PreAuthorize("@ss.hasAnyPermissions('admin','YXSTORECATEGORY_ALL','YXSTORECATEGORY_EDIT')") public ResponseEntity update(@Validated @RequestBody YxStoreCategory resources){ @@ -125,7 +125,7 @@ public class StoreCategoryController { @ForbidSubmit @Log("删除商品分类") @ApiOperation(value = "删除商品分类") - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @DeleteMapping(value = "/yxStoreCategory/{id}") @PreAuthorize("@ss.hasAnyPermissions('admin','YXSTORECATEGORY_ALL','YXSTORECATEGORY_DELETE')") public ResponseEntity delete(@PathVariable String id){ diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/mp/listener/TemplateListener.java b/zsw-bxg/src/main/java/co/yixiang/modules/mp/listener/TemplateListener.java index 1edc6570..0d4d2899 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/mp/listener/TemplateListener.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/mp/listener/TemplateListener.java @@ -89,7 +89,7 @@ public class TemplateListener implements SmartApplicationListener { , templateBean.getPrice(), templateBean.getUid()); /**************给客服发送消息**************/ try { - List yxStoreCustomers = yxStoreCustomerService.lambdaQuery().eq(YxStoreCustomer::getIsEnable, ShopConstants.YSHOP_ONE_NUM).list(); + List yxStoreCustomers = yxStoreCustomerService.lambdaQuery().eq(YxStoreCustomer::getIsEnable, ShopConstants.ZSW_ONE_NUM).list(); yxStoreCustomers.forEach(msg -> { if (StrUtil.isNotBlank(msg.getOpenId())) { weixinTemplateService.paySuccessNoticeToKefu(templateBean.getOrderId() @@ -166,7 +166,7 @@ public class TemplateListener implements SmartApplicationListener { templateBean.getUid(), templateBean.getTime()); /**************给客服发送消息**************/ try { - List yxStoreCustomers = yxStoreCustomerService.lambdaQuery().eq(YxStoreCustomer::getIsEnable, ShopConstants.YSHOP_ONE_NUM).list(); + List yxStoreCustomers = yxStoreCustomerService.lambdaQuery().eq(YxStoreCustomer::getIsEnable, ShopConstants.ZSW_ONE_NUM).list(); yxStoreCustomers.forEach(msg -> { if (StrUtil.isNotBlank(msg.getOpenId())) { weixinTemplateService.refundSuccessNoticeToKefu("尊敬的客服,您有新的退款申请待处理!",templateBean.getOrderId() diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/mp/service/WeiXinSubscribeService.java b/zsw-bxg/src/main/java/co/yixiang/modules/mp/service/WeiXinSubscribeService.java index f7986734..6e80fee8 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/mp/service/WeiXinSubscribeService.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/mp/service/WeiXinSubscribeService.java @@ -49,7 +49,7 @@ public class WeiXinSubscribeService { map.put("keyword1","充值"); map.put("keyword2",time); map.put("keyword3",price); - map.put("remark", ShopConstants.YSHOP_WECHAT_PUSH_REMARK); + map.put("remark", ShopConstants.ZSW_WECHAT_PUSH_REMARK); String tempId = this.getTempId(WechatTempateEnum.RECHARGE_SUCCESS.getValue()); if(StrUtil.isNotBlank(tempId)) { this.sendSubscribeMsg( openid, tempId, "/user/account",map); @@ -103,7 +103,7 @@ public class WeiXinSubscribeService { map.put("keyword1",orderId); map.put("keyword2",price); map.put("keyword3", time); - map.put("remark",ShopConstants.YSHOP_WECHAT_PUSH_REMARK); + map.put("remark",ShopConstants.ZSW_WECHAT_PUSH_REMARK); String tempId = this.getTempId(WechatTempateEnum.REFUND_SUCCESS.getValue()); if(StrUtil.isNotBlank(tempId)) { this.sendSubscribeMsg( openid,tempId, "/order/detail/"+orderId,map); @@ -131,7 +131,7 @@ public class WeiXinSubscribeService { map.put("keyword2",deliveryName); map.put("keyword1",orderId); map.put("keyword3",deliveryId); - map.put("remark",ShopConstants.YSHOP_WECHAT_PUSH_REMARK); + map.put("remark",ShopConstants.ZSW_WECHAT_PUSH_REMARK); String tempId = this.getTempId(WechatTempateEnum.DELIVERY_SUCCESS.getValue()); if(StrUtil.isNotBlank(tempId)) { this.sendSubscribeMsg( openid,tempId, "/order/detail/"+orderId,map); diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/mp/service/WeixinTemplateService.java b/zsw-bxg/src/main/java/co/yixiang/modules/mp/service/WeixinTemplateService.java index 6925de87..297ec7a1 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/mp/service/WeixinTemplateService.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/mp/service/WeixinTemplateService.java @@ -70,7 +70,7 @@ public class WeixinTemplateService { map.put("keyword1","充值"); map.put("keyword2",time); map.put("keyword3",price); - map.put("remark", ShopConstants.YSHOP_WECHAT_PUSH_REMARK); + map.put("remark", ShopConstants.ZSW_WECHAT_PUSH_REMARK); String tempId = this.getTempId(WechatTempateEnum.RECHARGE_SUCCESS.getValue()); if(StrUtil.isNotBlank(tempId)) { this.sendWxMpTemplateMessage( openid, tempId, this.getSiteUrl()+"/user/account",map); @@ -97,7 +97,7 @@ public class WeixinTemplateService { //订单号 map.put("keyword1",orderId); map.put("keyword2",price); - map.put("remark",ShopConstants.YSHOP_WECHAT_PUSH_REMARK); + map.put("remark",ShopConstants.ZSW_WECHAT_PUSH_REMARK); String tempId = this.getTempId(WechatTempateEnum.PAY_SUCCESS.getValue()); if(StrUtil.isNotBlank(tempId)) { this.sendWxMpTemplateMessage( openid,tempId, this.getSiteUrl()+"/order/detail/"+orderId,map); @@ -117,7 +117,7 @@ public class WeixinTemplateService { map.put("first", "尊敬的客服,您有新订单了"); map.put("keyword1",orderId); map.put("keyword2",price); - map.put("remark",ShopConstants.YSHOP_WECHAT_PUSH_REMARK); + map.put("remark",ShopConstants.ZSW_WECHAT_PUSH_REMARK); String tempId = this.getTempId(WechatTempateEnum.PAY_SUCCESS.getValue()); String appId=redisUtils.getY(ShopKeyUtils.getWxAppAppId()); if(StrUtil.isNotBlank(tempId)) { @@ -157,7 +157,7 @@ public class WeixinTemplateService { map.put("keyword1",orderId); map.put("keyword2",price); map.put("keyword3", time); - map.put("remark",ShopConstants.YSHOP_WECHAT_PUSH_REMARK); + map.put("remark",ShopConstants.ZSW_WECHAT_PUSH_REMARK); String tempId = this.getTempId(WechatTempateEnum.REFUND_SUCCESS.getValue()); if(StrUtil.isNotBlank(tempId)) { this.sendWxMpTemplateMessage( openid,tempId, this.getSiteUrl()+"/order/detail/"+orderId,map); @@ -179,7 +179,7 @@ public class WeixinTemplateService { map.put("keyword1",orderId); map.put("keyword2",price); map.put("keyword3", time); - map.put("remark",ShopConstants.YSHOP_WECHAT_PUSH_REMARK); + map.put("remark",ShopConstants.ZSW_WECHAT_PUSH_REMARK); String tempId = this.getTempId(WechatTempateEnum.REFUND_SUCCESS.getValue()); String appId=redisUtils.getY(ShopKeyUtils.getWxAppAppId()); if(StrUtil.isNotBlank(tempId)) { @@ -215,7 +215,7 @@ public class WeixinTemplateService { map.put("keyword2",deliveryName); map.put("keyword1",orderId); map.put("keyword3",deliveryId); - map.put("remark",ShopConstants.YSHOP_WECHAT_PUSH_REMARK); + map.put("remark",ShopConstants.ZSW_WECHAT_PUSH_REMARK); String tempId = this.getTempId(WechatTempateEnum.DELIVERY_SUCCESS.getValue()); if(StrUtil.isNotBlank(tempId)) { this.sendWxMpTemplateMessage( openid,tempId, this.getSiteUrl()+"/order/detail/"+orderId,map); diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/order/service/dto/PriceGroupDto.java b/zsw-bxg/src/main/java/co/yixiang/modules/order/service/dto/PriceGroupDto.java index bbce372b..8f7ca2fb 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/order/service/dto/PriceGroupDto.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/order/service/dto/PriceGroupDto.java @@ -14,21 +14,21 @@ import java.math.BigDecimal; @Data public class PriceGroupDto { - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) private BigDecimal costPrice; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) private BigDecimal storeFreePostage; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) private BigDecimal storePostage; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) private BigDecimal totalPrice; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) private BigDecimal vipPrice; - @JsonSerialize(using = BigDecimalSerializer.class) + //@JsonSerialize(using = BigDecimalSerializer.class) private BigDecimal payIntegral; } diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java b/zsw-bxg/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java index 2bada6d2..df0a0fcb 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java @@ -200,7 +200,7 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl cartGroup = yxStoreCartService.getUserProductCartList(uid, - cartIds, ShopConstants.YSHOP_ONE_NUM); + cartIds, ShopConstants.ZSW_ONE_NUM); if (ObjectUtil.isNotEmpty(cartGroup.get("invalid"))) { throw new YshopException("有失效的商品请重新提交"); } @@ -334,7 +334,7 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl 0) { Double integralMax = Double.valueOf(cacheDTO.getOther().getIntegralMax()); BigDecimal integralFull = new BigDecimal(cacheDTO.getOther().getIntegralFull()); @@ -399,7 +399,7 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl yxSeckillTime = yxSystemGroupDataService.list(Wrappers.lambdaQuery() - .eq(YxSystemGroupData::getGroupName, YSHOP_SECKILL_TIME)); + .eq(YxSystemGroupData::getGroupName, ZSW_SECKILL_TIME)); if (yxSystemGroupData.getStatus() == 1) { yxSeckillTime.forEach(item -> { Map map = JSONUtil.toBean(item.getValue(), Map.class); @@ -97,7 +97,7 @@ public class SystemGroupDataController { @Log("修改数据配置") @ApiOperation(value = "修改数据配置") @PutMapping(value = "/yxSystemGroupData") - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY, allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY, allEntries = true) @PreAuthorize("@ss.hasAnyPermissions('admin','YXSYSTEMGROUPDATA_ALL','YXSYSTEMGROUPDATA_EDIT')") public ResponseEntity update(@RequestBody String jsonStr) { JSONObject jsonObject = JSON.parseObject(jsonStr); diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/template/rest/ShippingTemplatesController.java b/zsw-bxg/src/main/java/co/yixiang/modules/template/rest/ShippingTemplatesController.java index f10f775e..8999ca0e 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/template/rest/ShippingTemplatesController.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/template/rest/ShippingTemplatesController.java @@ -110,7 +110,7 @@ public class ShippingTemplatesController { /** * 获取城市列表 */ - @Cacheable(cacheNames = ShopConstants.YSHOP_REDIS_SYS_CITY_KEY) + @Cacheable(cacheNames = ShopConstants.ZSW_REDIS_SYS_CITY_KEY) @GetMapping("/citys") public ResponseEntity cityList() { diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/user/service/impl/YxUserSignServiceImpl.java b/zsw-bxg/src/main/java/co/yixiang/modules/user/service/impl/YxUserSignServiceImpl.java index bde5f15f..ffa5e101 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/user/service/impl/YxUserSignServiceImpl.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/user/service/impl/YxUserSignServiceImpl.java @@ -78,7 +78,7 @@ public class YxUserSignServiceImpl extends BaseServiceImpl list = systemGroupDataService.getDatas(ShopConstants.YSHOP_SIGN_DAY_NUM); + List list = systemGroupDataService.getDatas(ShopConstants.ZSW_SIGN_DAY_NUM); if(ObjectUtil.isNull(list) || list.isEmpty()) { throw new YshopException("请先配置签到天数"); } diff --git a/zsw-bxg/src/main/java/co/yixiang/modules/wechat/rest/YxWechatLiveController.java b/zsw-bxg/src/main/java/co/yixiang/modules/wechat/rest/YxWechatLiveController.java index f57cabc8..a412dbdc 100644 --- a/zsw-bxg/src/main/java/co/yixiang/modules/wechat/rest/YxWechatLiveController.java +++ b/zsw-bxg/src/main/java/co/yixiang/modules/wechat/rest/YxWechatLiveController.java @@ -68,7 +68,7 @@ public class YxWechatLiveController { return new ResponseEntity<>(yxWechatLiveService.queryAll(criteria,pageable),HttpStatus.OK); } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @ForbidSubmit @PostMapping @Log("新增wxlive") @@ -88,7 +88,7 @@ public class YxWechatLiveController { return new ResponseEntity<>(yxWechatLiveService.addGoods(resources),HttpStatus.CREATED); } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @ForbidSubmit @PutMapping @Log("修改wxlive") @@ -99,7 +99,7 @@ public class YxWechatLiveController { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @ForbidSubmit @Log("删除wxlive") @ApiOperation("删除wxlive") @@ -112,7 +112,7 @@ public class YxWechatLiveController { return new ResponseEntity<>(HttpStatus.OK); } - @CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true) + @CacheEvict(cacheNames = ShopConstants.ZSW_REDIS_INDEX_KEY,allEntries = true) @ApiOperation("同步数据") @GetMapping("/synchro") public ResponseEntity synchroWxOlLive() { diff --git a/zsw-bxg/src/main/java/co/yixiang/serializer/BigDecimalSerializer.java b/zsw-bxg/src/main/java/co/yixiang/serializer/BigDecimalSerializer.java index 953dae92..206fc540 100644 --- a/zsw-bxg/src/main/java/co/yixiang/serializer/BigDecimalSerializer.java +++ b/zsw-bxg/src/main/java/co/yixiang/serializer/BigDecimalSerializer.java @@ -3,6 +3,8 @@ package co.yixiang.serializer; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.jsontype.TypeSerializer; +import lombok.extern.slf4j.Slf4j; import java.io.IOException; import java.math.BigDecimal; @@ -11,14 +13,28 @@ import java.text.DecimalFormat; /** * @author :LionCity * @date :Created in 2020-05-30 14:12 - * @description: + * @description:a * @modified By: * @version: */ +@Slf4j public class BigDecimalSerializer extends JsonSerializer { + @Override public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException { - if (value != null && !"".equals(value)) { + log.info("value1:{}",value); + if (value != null) { + DecimalFormat df2 =new DecimalFormat("0.00"); + gen.writeString(df2.format(value)); + } else { + gen.writeString(value + ""); + } + } + + @Override + public void serializeWithType(BigDecimal value, JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException { + log.info("value2:{}",value); + if (value != null) { DecimalFormat df2 =new DecimalFormat("0.00"); gen.writeString(df2.format(value)); } else { diff --git a/zsw-bxg/src/main/java/co/yixiang/tools/express/config/ExpressAutoConfiguration.java b/zsw-bxg/src/main/java/co/yixiang/tools/express/config/ExpressAutoConfiguration.java index 2c440449..25a1bc31 100644 --- a/zsw-bxg/src/main/java/co/yixiang/tools/express/config/ExpressAutoConfiguration.java +++ b/zsw-bxg/src/main/java/co/yixiang/tools/express/config/ExpressAutoConfiguration.java @@ -28,7 +28,7 @@ public class ExpressAutoConfiguration { } public static ExpressService expressService() { - ExpressService expressService = (ExpressService)redisUtil.get(ShopConstants.YSHOP_EXPRESS_SERVICE); + ExpressService expressService = (ExpressService)redisUtil.get(ShopConstants.ZSW_EXPRESS_SERVICE); if(expressService != null) { return expressService; } @@ -47,7 +47,7 @@ public class ExpressAutoConfiguration { } ExpressService service = new ExpressService(); service.setProperties(properties); - redisUtil.set(ShopConstants.YSHOP_EXPRESS_SERVICE,service); + redisUtil.set(ShopConstants.ZSW_EXPRESS_SERVICE,service); return service; } diff --git a/zsw-bxg/src/main/java/co/yixiang/utils/QrCodeutil.java b/zsw-bxg/src/main/java/co/yixiang/utils/QrCodeutil.java new file mode 100644 index 00000000..5152ca00 --- /dev/null +++ b/zsw-bxg/src/main/java/co/yixiang/utils/QrCodeutil.java @@ -0,0 +1,48 @@ +package co.yixiang.utils; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.EnableSpringUtil; +import cn.iocoder.yudao.framework.common.exception.YshopException; +import co.yixiang.constant.SystemConfigConstants; +import co.yixiang.modules.shop.service.YxSystemConfigService; +import lombok.experimental.UtilityClass; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class QrCodeutil { + + @Autowired + private YxSystemConfigService systemConfigService; + + /** + * 这个是生成单纯的内容二维码 + * @param code + * @return + */ + public String generateQrStr(String code){ + String apiUrl = systemConfigService.getData(SystemConfigConstants.API_URL); + if(StrUtil.isEmpty(apiUrl)){ + throw new YshopException("未配置api地址"); + } + return apiUrl + "/bxgApp/qrcode/image/"+code+".png"; + } + + /** + * 这个是生成带跳转的URL + * @param code + * @return + */ + public String generateQrUrlBase64(String code){ + String apiUrl = systemConfigService.getData(SystemConfigConstants.API_URL); + if(StrUtil.isEmpty(apiUrl)){ + throw new YshopException("未配置api地址"); + } + + String xcode = Base64.encode(code); + return apiUrl + "/bxgApp/qrcode/image/"+xcode+".png"; + } + + +} diff --git a/zsw-bxg/src/main/java/co/yixiang/utils/RedisUtils.java b/zsw-bxg/src/main/java/co/yixiang/utils/RedisUtils.java index cbc32a24..e6ee8c03 100644 --- a/zsw-bxg/src/main/java/co/yixiang/utils/RedisUtils.java +++ b/zsw-bxg/src/main/java/co/yixiang/utils/RedisUtils.java @@ -8,6 +8,9 @@ */ package co.yixiang.utils; +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; +import com.mchange.v2.net.LocalHostManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; @@ -17,26 +20,24 @@ import org.springframework.util.CollectionUtils; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * @author / */ @Component -@SuppressWarnings({"unchecked","all"}) public class RedisUtils { @Autowired private RedisTemplate stringRedisTemplate; - - // =============================commonold============================ - /** * 指定缓存失效时间 * @param key 键 * @param time 时间(秒) */ public boolean expire(String key, long time) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { if (time > 0) { stringRedisTemplate.expire(key, time, TimeUnit.SECONDS); @@ -54,6 +55,7 @@ public class RedisUtils { * @return 时间(秒) 返回0代表为永久有效 */ public long getExpire(String key) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); return stringRedisTemplate.getExpire(key, TimeUnit.SECONDS); } @@ -63,6 +65,7 @@ public class RedisUtils { * @return / */ public List scan(String pattern) { + pattern = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),pattern); ScanOptions options = ScanOptions.scanOptions().match(pattern).build(); RedisConnectionFactory factory = stringRedisTemplate.getConnectionFactory(); RedisConnection rc = Objects.requireNonNull(factory).getConnection(); @@ -87,6 +90,7 @@ public class RedisUtils { * @return / */ public List findKeysForPage(String patternKey, int page, int size) { + patternKey = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),patternKey); ScanOptions options = ScanOptions.scanOptions().match(patternKey).build(); RedisConnectionFactory factory = stringRedisTemplate.getConnectionFactory(); RedisConnection rc = Objects.requireNonNull(factory).getConnection(); @@ -123,6 +127,7 @@ public class RedisUtils { */ public boolean hasKey(String key) { try { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); return stringRedisTemplate.hasKey(key); } catch (Exception e) { e.printStackTrace(); @@ -137,9 +142,14 @@ public class RedisUtils { public void del(String... key) { if (key != null && key.length > 0) { if (key.length == 1) { - stringRedisTemplate.delete(key[0]); + stringRedisTemplate.delete(StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key[0])); } else { - stringRedisTemplate.delete((Collection) CollectionUtils.arrayToList(key)); + stringRedisTemplate.delete( + CollectionUtils + .arrayToList(key) + .stream() + .map(s-> StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),s)) + .collect(Collectors.toList())); } } } @@ -152,11 +162,13 @@ public class RedisUtils { * @return 值 */ public Object get(String key) { - return key == null ? null : stringRedisTemplate.opsForValue().get(key); + return key == null ? null : stringRedisTemplate.opsForValue().get(StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key)); } public String getY(String key){ - return key == null || !stringRedisTemplate.hasKey(key) ? "" : stringRedisTemplate.opsForValue().get(key).toString(); + return key == null || !stringRedisTemplate.hasKey(StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key)) + ? "" + : stringRedisTemplate.opsForValue().get(StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key)).toString(); } /** @@ -165,8 +177,8 @@ public class RedisUtils { * @return */ public List multiGet(List keys) { - Object obj = stringRedisTemplate.opsForValue().multiGet(keys); - return null; + keys = keys.stream().map(s-> StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),s)).collect(Collectors.toList()); + return stringRedisTemplate.opsForValue().multiGet(keys); } /** @@ -176,6 +188,7 @@ public class RedisUtils { * @return true成功 false失败 */ public boolean set(String key, Object value) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { stringRedisTemplate.opsForValue().set(key, value); return true; @@ -193,6 +206,7 @@ public class RedisUtils { * @return true成功 false 失败 */ public boolean set(String key, Object value, long time) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { if (time > 0) { stringRedisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); @@ -215,6 +229,7 @@ public class RedisUtils { * @return true成功 false 失败 */ public boolean set(String key, String value, long time, TimeUnit timeUnit) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { if (time > 0) { stringRedisTemplate.opsForValue().set(key, value, time, timeUnit); @@ -237,6 +252,7 @@ public class RedisUtils { * @return 值 */ public Object hget(String key, String item) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); return stringRedisTemplate.opsForHash().get(key, item); } @@ -246,6 +262,7 @@ public class RedisUtils { * @return 对应的多个键值 */ public Map hmget(String key) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); return stringRedisTemplate.opsForHash().entries(key); } @@ -257,6 +274,7 @@ public class RedisUtils { * @return true 成功 false 失败 */ public boolean hmset(String key, Map map) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { stringRedisTemplate.opsForHash().putAll(key, map); return true; @@ -274,6 +292,7 @@ public class RedisUtils { * @return true成功 false失败 */ public boolean hmset(String key, Map map, long time) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { stringRedisTemplate.opsForHash().putAll(key, map); if (time > 0) { @@ -295,6 +314,7 @@ public class RedisUtils { * @return true 成功 false失败 */ public boolean hset(String key, String item, Object value) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { stringRedisTemplate.opsForHash().put(key, item, value); return true; @@ -314,6 +334,7 @@ public class RedisUtils { * @return true 成功 false失败 */ public boolean hset(String key, String item, Object value, long time) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { stringRedisTemplate.opsForHash().put(key, item, value); if (time > 0) { @@ -333,6 +354,7 @@ public class RedisUtils { * @param item 项 可以使多个 不能为null */ public void hdel(String key, Object... item) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); stringRedisTemplate.opsForHash().delete(key, item); } @@ -344,6 +366,7 @@ public class RedisUtils { * @return true 存在 false不存在 */ public boolean hHasKey(String key, String item) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); return stringRedisTemplate.opsForHash().hasKey(key, item); } @@ -356,6 +379,7 @@ public class RedisUtils { * @return */ public double hincr(String key, String item, double by) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); return stringRedisTemplate.opsForHash().increment(key, item, by); } @@ -368,6 +392,7 @@ public class RedisUtils { * @return */ public double hdecr(String key, String item, double by) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); return stringRedisTemplate.opsForHash().increment(key, item, -by); } @@ -380,6 +405,7 @@ public class RedisUtils { * @return */ public Set sGet(String key) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { return stringRedisTemplate.opsForSet().members(key); } catch (Exception e) { @@ -396,6 +422,7 @@ public class RedisUtils { * @return true 存在 false不存在 */ public boolean sHasKey(String key, Object value) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { return stringRedisTemplate.opsForSet().isMember(key, value); } catch (Exception e) { @@ -412,6 +439,7 @@ public class RedisUtils { * @return 成功个数 */ public long sSet(String key, Object... values) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { return stringRedisTemplate.opsForSet().add(key, values); } catch (Exception e) { @@ -428,6 +456,7 @@ public class RedisUtils { * @return 成功个数 */ public long sSetAndTime(String key, long time, Object... values) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { Long count = stringRedisTemplate.opsForSet().add(key, values); if (time > 0) { @@ -446,6 +475,7 @@ public class RedisUtils { * @return */ public long sGetSetSize(String key) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { return stringRedisTemplate.opsForSet().size(key); } catch (Exception e) { @@ -461,6 +491,7 @@ public class RedisUtils { * @return 移除的个数 */ public long setRemove(String key, Object... values) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { Long count = stringRedisTemplate.opsForSet().remove(key, values); return count; @@ -480,6 +511,7 @@ public class RedisUtils { * @return */ public List lGet(String key, long start, long end) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { return stringRedisTemplate.opsForList().range(key, start, end); } catch (Exception e) { @@ -494,6 +526,7 @@ public class RedisUtils { * @return */ public long lGetListSize(String key) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { return stringRedisTemplate.opsForList().size(key); } catch (Exception e) { @@ -509,6 +542,7 @@ public class RedisUtils { * @return */ public Object lGetIndex(String key, long index) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { return stringRedisTemplate.opsForList().index(key, index); } catch (Exception e) { @@ -524,6 +558,7 @@ public class RedisUtils { * @return */ public boolean lSet(String key, Object value) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { stringRedisTemplate.opsForList().rightPush(key, value); return true; @@ -541,6 +576,7 @@ public class RedisUtils { * @return */ public boolean lSet(String key, Object value, long time) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { stringRedisTemplate.opsForList().rightPush(key, value); if (time > 0) { @@ -560,6 +596,7 @@ public class RedisUtils { * @return */ public boolean lSet(String key, List value) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { stringRedisTemplate.opsForList().rightPushAll(key, value); return true; @@ -577,6 +614,7 @@ public class RedisUtils { * @return */ public boolean lSet(String key, List value, long time) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { stringRedisTemplate.opsForList().rightPushAll(key, value); if (time > 0) { @@ -597,6 +635,7 @@ public class RedisUtils { * @return / */ public boolean lUpdateIndex(String key, long index, Object value) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { stringRedisTemplate.opsForList().set(key, index, value); return true; @@ -614,6 +653,7 @@ public class RedisUtils { * @return 移除的个数 */ public long lRemove(String key, long count, Object value) { + key = StrUtil.format("{}_{}",TenantContextHolder.getTenantId(),key); try { return stringRedisTemplate.opsForList().remove(key, count, value); } catch (Exception e) { diff --git a/zsw-bxg/src/main/java/co/yixiang/utils/ShopKeyUtils.java b/zsw-bxg/src/main/java/co/yixiang/utils/ShopKeyUtils.java index 5ee41875..c59c155f 100644 --- a/zsw-bxg/src/main/java/co/yixiang/utils/ShopKeyUtils.java +++ b/zsw-bxg/src/main/java/co/yixiang/utils/ShopKeyUtils.java @@ -56,7 +56,7 @@ public class ShopKeyUtils { * 微信公众号service */ public static String getYshopWeiXinMpSevice(){ - String yshopWeiXinMpSevice= ShopConstants.YSHOP_WEIXIN_MP_SERVICE; + String yshopWeiXinMpSevice= ShopConstants.ZSW_WEIXIN_MP_SERVICE; return yshopWeiXinMpSevice+getExtendValue(); } @@ -92,7 +92,7 @@ public class ShopKeyUtils { * 微信支付service */ public static String getYshopWeiXinPayService(){ - String yshopWeiXinPayService= ShopConstants.YSHOP_WEIXIN_PAY_SERVICE; + String yshopWeiXinPayService= ShopConstants.ZSW_WEIXIN_PAY_SERVICE; return yshopWeiXinPayService+getExtendValue(); } /** @@ -120,14 +120,14 @@ public class ShopKeyUtils { * 微信支付小程序service */ public static String getYshopWeiXinMiniPayService(){ - String yshopWeiXinMiniPayService= ShopConstants.YSHOP_WEIXIN_MINI_PAY_SERVICE; + String yshopWeiXinMiniPayService= ShopConstants.ZSW_WEIXIN_MINI_PAY_SERVICE; return yshopWeiXinMiniPayService+getExtendValue(); } /** * 微信支付app service */ public static String getYshopWeiXinAppPayService(){ - String yshopWeiXinAppPayService= ShopConstants.YSHOP_WEIXIN_APP_PAY_SERVICE; + String yshopWeiXinAppPayService= ShopConstants.ZSW_WEIXIN_APP_PAY_SERVICE; return yshopWeiXinAppPayService+getExtendValue(); } /** @@ -173,7 +173,7 @@ public class ShopKeyUtils { * @return */ public static String getYshopWeiXinMaSevice() { - String yshopWeiXinMaSevice= ShopConstants.YSHOP_WEIXIN_MA_SERVICE; + String yshopWeiXinMaSevice= ShopConstants.ZSW_WEIXIN_MA_SERVICE; return yshopWeiXinMaSevice+getExtendValue(); }