xiongzhu 3 年之前
父节点
当前提交
2425ff2fc7

+ 1 - 1
src/main/java/com/izouma/nineth/annotations/Searchable.java

@@ -12,5 +12,5 @@ import java.lang.annotation.Target;
 public @interface Searchable {
     boolean value() default true;
 
-    SearchMode mode() default SearchMode.PREFIX;
+    SearchMode mode() default SearchMode.CONFIG;
 }

+ 1 - 0
src/main/java/com/izouma/nineth/config/CacheConfig.java

@@ -78,6 +78,7 @@ public class CacheConfig {
 //                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer()));
 //        return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
 //    }
+
     @Bean
     public RedisCacheManager userRedisCacheManager(RedisTemplate redisTemplate) {
         Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Object.class);

+ 2 - 0
src/main/java/com/izouma/nineth/config/EventNames.java

@@ -2,4 +2,6 @@ package com.izouma.nineth.config;
 
 public class EventNames {
     public final static String SWITCH_ACCOUNT = "switchAccount";
+
+    public final static String CONFIG_CHANGE = "configChange";
 }

+ 2 - 1
src/main/java/com/izouma/nineth/enums/SearchMode.java

@@ -4,5 +4,6 @@ public enum SearchMode {
     PREFIX,
     SUFFIX,
     FULL,
-    EXACT
+    EXACT,
+    CONFIG
 }

+ 12 - 0
src/main/java/com/izouma/nineth/listener/BroadcastEventListener.java

@@ -3,7 +3,9 @@ package com.izouma.nineth.listener;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.izouma.nineth.config.EventNames;
+import com.izouma.nineth.enums.SearchMode;
 import com.izouma.nineth.service.AdapayMerchantService;
+import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.spring.annotation.ConsumeMode;
@@ -37,6 +39,16 @@ public class BroadcastEventListener implements RocketMQListener<JSONObject> {
                         log.error("event error", e);
                     }
                     break;
+                case EventNames.CONFIG_CHANGE:
+                    try {
+                        JSONObject data = message.getJSONObject("data");
+                        if ("default_search_mode".equals(data.getString("name"))) {
+                            SearchMode searchMode = SearchMode.valueOf(data.getString("value"));
+                            JpaUtils.setDefaultSearchMode(searchMode);
+                        }
+                    } catch (Exception e) {
+                        log.error("event error", e);
+                    }
             }
         }
     }

+ 15 - 4
src/main/java/com/izouma/nineth/service/SysConfigService.java

@@ -2,6 +2,7 @@ package com.izouma.nineth.service;
 
 import com.izouma.nineth.domain.SysConfig;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.SearchMode;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.SysConfigRepo;
 import com.izouma.nineth.utils.JpaUtils;
@@ -49,7 +50,7 @@ public class SysConfigService {
 
     @PostConstruct
     public void init() {
-        if (!sysConfigRepo.findByName("gift_gas_fee").isPresent()) {
+        if (sysConfigRepo.findByName("gift_gas_fee").isEmpty()) {
             sysConfigRepo.save(SysConfig.builder()
                     .name("gift_gas_fee")
                     .desc("转赠gas费")
@@ -57,7 +58,7 @@ public class SysConfigService {
                     .value("1")
                     .build());
         }
-        if (!sysConfigRepo.findByName("enable_wx_pub").isPresent()) {
+        if (sysConfigRepo.findByName("enable_wx_pub").isEmpty()) {
             sysConfigRepo.save(SysConfig.builder()
                     .name("enable_wx_pub")
                     .desc("使用公众号支付")
@@ -65,7 +66,7 @@ public class SysConfigService {
                     .value("FALSE")
                     .build());
         }
-        if (!sysConfigRepo.findByName("enable_wx_lite").isPresent()) {
+        if (sysConfigRepo.findByName("enable_wx_lite").isEmpty()) {
             sysConfigRepo.save(SysConfig.builder()
                     .name("enable_wx_lite")
                     .desc("使用小程序支付")
@@ -73,7 +74,7 @@ public class SysConfigService {
                     .value("FALSE")
                     .build());
         }
-        if (!sysConfigRepo.findByName("hold_days").isPresent()) {
+        if (sysConfigRepo.findByName("hold_days").isEmpty()) {
             sysConfigRepo.save(SysConfig.builder()
                     .name("hold_days")
                     .desc("持有满几天可销售")
@@ -81,5 +82,15 @@ public class SysConfigService {
                     .value("5")
                     .build());
         }
+        if (sysConfigRepo.findByName("default_search_mode").isEmpty()) {
+            sysConfigRepo.save(SysConfig.builder()
+                    .name("default_search_mode")
+                    .desc("默认搜索方式")
+                    .type(SysConfig.ValueType.STRING)
+                    .value("FULL")
+                    .build());
+        }
+        SearchMode searchMode = SearchMode.valueOf(sysConfigRepo.findByName("default_search_mode").get().getValue());
+        JpaUtils.setDefaultSearchMode(searchMode);
     }
 }

+ 15 - 1
src/main/java/com/izouma/nineth/utils/JpaUtils.java

@@ -3,11 +3,13 @@ package com.izouma.nineth.utils;
 import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.annotations.SearchableOne;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.SearchMode;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Component;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -23,7 +25,15 @@ import java.util.regex.Pattern;
 
 @Slf4j
 @SuppressWarnings("ALL")
+@Component
 public class JpaUtils {
+
+    private static SearchMode defaultSearchMode = SearchMode.PREFIX;
+
+    public static void setDefaultSearchMode(SearchMode defaultSearchMode) {
+        JpaUtils.defaultSearchMode = defaultSearchMode;
+    }
+
     public static PageRequest toPageRequest(PageQuery pageQuery) {
         PageRequest pageRequest;
         if (StringUtils.isNotEmpty(pageQuery.getSort())) {
@@ -171,8 +181,12 @@ public class JpaUtils {
                     continue;
                 }
 
+                SearchMode searchMode = annotation.mode();
+                if (searchMode == SearchMode.CONFIG) {
+                    searchMode = defaultSearchMode;
+                }
                 if (field.getType() == String.class) {
-                    switch (annotation.mode()) {
+                    switch (searchMode) {
                         case PREFIX:
                             or.add(criteriaBuilder.like(root.get(field.getName()), pageQuery.getSearch() + "%"));
                             break;

+ 19 - 3
src/main/java/com/izouma/nineth/web/SysConfigController.java

@@ -1,5 +1,8 @@
 package com.izouma.nineth.web;
 
+import com.alibaba.fastjson.JSONObject;
+import com.izouma.nineth.config.EventNames;
+import com.izouma.nineth.config.GeneralProperties;
 import com.izouma.nineth.domain.SysConfig;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
@@ -7,6 +10,7 @@ import com.izouma.nineth.repo.SysConfigRepo;
 import com.izouma.nineth.service.SysConfigService;
 import com.izouma.nineth.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.data.domain.Page;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -21,14 +25,26 @@ import java.util.List;
 @RequestMapping("/sysConfig")
 @AllArgsConstructor
 public class SysConfigController extends BaseController {
-    private SysConfigService sysConfigService;
-    private SysConfigRepo    sysConfigRepo;
+    private SysConfigService  sysConfigService;
+    private SysConfigRepo     sysConfigRepo;
+    private RocketMQTemplate  rocketMQTemplate;
+    private GeneralProperties generalProperties;
 
     @PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     @CacheEvict(value = {"SysConfigServiceGetBigDecimal", "SysConfigServiceGetTime", "SysConfigServiceGetBoolean", "SysConfigServiceGetInt"}, allEntries = true)
     public SysConfig save(@RequestBody SysConfig record) {
-        return sysConfigRepo.save(record);
+        record = sysConfigRepo.save(record);
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("name", EventNames.CONFIG_CHANGE);
+        JSONObject data = new JSONObject();
+        data.put("name", record.getName());
+        data.put("value", record.getValue());
+        jsonObject.put("data", data);
+        rocketMQTemplate.convertAndSend(generalProperties.getBroadcastEventTopic(), jsonObject);
+
+        return record;
     }