【8.0.1】【db】更新最大排序数获取方法

pull/57/head
fengshuonan 2023-10-29 18:03:38 +08:00
parent a6769cbda0
commit 246a0dc005
9 changed files with 282 additions and 0 deletions

View File

@ -0,0 +1,26 @@
package cn.stylefeng.roses.kernel.db.api.maxsort;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
*
*
* @author fengshuonan
* @since 2023/10/29 16:58
*/
@Data
@AllArgsConstructor
public class MaxCountConfig {
/**
*
*/
private String tableName;
/**
*
*/
private String sortFieldName;
}

View File

@ -0,0 +1,21 @@
package cn.stylefeng.roses.kernel.db.api.maxsort;
import java.util.Map;
/**
*
*
* @author fengshuonan
* @since 2023/10/29 17:03
*/
public interface MaxSortCollectorApi {
/**
*
*
* @author fengshuonan
* @since 2023/10/29 17:05
*/
Map<String, MaxCountConfig> createMaxSortConfigs();
}

View File

@ -0,0 +1,37 @@
package cn.stylefeng.roses.kernel.db.api.maxsort.context;
import cn.stylefeng.roses.kernel.db.api.maxsort.MaxCountConfig;
import java.util.Map;
/**
*
*
* @author fengshuonan
* @since 2023/10/29 17:24
*/
public class MaxSortConfigContext {
private static Map<String, MaxCountConfig> MAX_COUNT_CONFIG_MAP = null;
/**
*
*
* @author fengshuonan
* @since 2023/10/29 17:24
*/
public static MaxCountConfig getConfig(String code) {
return MAX_COUNT_CONFIG_MAP.get(code);
}
/**
*
*
* @author fengshuonan
* @since 2023/10/29 17:24
*/
public static void initConfig(Map<String, MaxCountConfig> totalConfigs) {
MAX_COUNT_CONFIG_MAP = totalConfigs;
}
}

View File

@ -0,0 +1,76 @@
/*
* Copyright [2020-2030] [https://www.stylefeng.cn]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* GunsAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Guns
* 3.
* 4. https://gitee.com/stylefeng/guns
* 5. https://gitee.com/stylefeng/guns
* 6.
*/
package cn.stylefeng.roses.kernel.db.api.maxsort.listener;
import cn.stylefeng.roses.kernel.db.api.maxsort.MaxCountConfig;
import cn.stylefeng.roses.kernel.db.api.maxsort.MaxSortCollectorApi;
import cn.stylefeng.roses.kernel.db.api.maxsort.context.MaxSortConfigContext;
import cn.stylefeng.roses.kernel.rule.listener.ApplicationStartedListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.core.Ordered;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
*
*
* @author fengshuonan
* @since 2023/10/29 17:17
*/
@Slf4j
public class TableMaxSortConfigListener extends ApplicationStartedListener implements Ordered {
@Override
public void eventCallback(ApplicationStartedEvent event) {
// 获取所有的配置信息
Map<String, MaxSortCollectorApi> maxSortCollectorApiMap = null;
try {
maxSortCollectorApiMap = event.getApplicationContext().getBeansOfType(MaxSortCollectorApi.class);
} catch (BeansException e) {
// ignore
return;
}
// 添加到配置容器中
Collection<MaxSortCollectorApi> values = maxSortCollectorApiMap.values();
Map<String, MaxCountConfig> totalConfigs = new HashMap<>();
for (MaxSortCollectorApi value : values) {
Map<String, MaxCountConfig> maxSortConfigs = value.createMaxSortConfigs();
totalConfigs.putAll(maxSortConfigs);
}
MaxSortConfigContext.initConfig(totalConfigs);
}
@Override
public int getOrder() {
return LOWEST_PRECEDENCE;
}
}

View File

@ -85,6 +85,12 @@ public class DbOperatorImpl implements DbOperatorApi {
String sql = StrUtil.format(sqlTemplate, fieldName, tempFieldName, tableName);
Map<String, Object> oneResult = SqlRunner.db().selectOne(sql);
// 查询不到,直接返回最大值-100
if (oneResult == null) {
return -100L;
}
Object maxSort = oneResult.get(tempFieldName);
return Convert.toLong(maxSort);

View File

@ -4,3 +4,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.stylefeng.roses.kernel.db.starter.ProjectMyBatisPlusAutoConfiguration,\
cn.stylefeng.roses.kernel.db.starter.ProjectDruidMonitorAutoConfiguration,\
cn.stylefeng.roses.kernel.db.starter.RemoveDruidAdAutoConfiguration
org.springframework.context.ApplicationListener=\
cn.stylefeng.roses.kernel.db.api.maxsort.listener.TableMaxSortConfigListener

View File

@ -0,0 +1,36 @@
package cn.stylefeng.roses.kernel.sys.api.exception.enums;
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum;
import lombok.Getter;
/**
*
*
* @author fengshuonan
* @since 2023/10/29 17:46
*/
@Getter
public enum MaxSortExceptionEnum implements AbstractExceptionEnum {
/**
*
*/
CANT_FIND_CODE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "编码不存在,无法获取");
/**
*
*/
private final String errorCode;
/**
*
*/
private final String userTip;
MaxSortExceptionEnum(String errorCode, String userTip) {
this.errorCode = errorCode;
this.userTip = userTip;
}
}

View File

@ -0,0 +1,26 @@
package cn.stylefeng.roses.kernel.sys.api.maxsort;
import cn.stylefeng.roses.kernel.db.api.maxsort.MaxCountConfig;
import cn.stylefeng.roses.kernel.db.api.maxsort.MaxSortCollectorApi;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* system
*
* @author fengshuonan
* @since 2023/10/29 17:51
*/
@Service
public class SystemMaxSortFieldConfig implements MaxSortCollectorApi {
@Override
public Map<String, MaxCountConfig> createMaxSortConfigs() {
HashMap<String, MaxCountConfig> stringMaxCountConfigHashMap = new HashMap<>();
stringMaxCountConfigHashMap.put("user", new MaxCountConfig("sys_user", "user_sort"));
return stringMaxCountConfigHashMap;
}
}

View File

@ -0,0 +1,52 @@
package cn.stylefeng.roses.kernel.sys.modular.common;
import cn.stylefeng.roses.kernel.db.api.DbOperatorApi;
import cn.stylefeng.roses.kernel.db.api.maxsort.MaxCountConfig;
import cn.stylefeng.roses.kernel.db.api.maxsort.context.MaxSortConfigContext;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
import cn.stylefeng.roses.kernel.sys.api.exception.enums.MaxSortExceptionEnum;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
*
*
* @author fengshuonan
* @since 2023/10/29 17:08
*/
@RestController
@ApiResource(name = "最大排序获取")
public class MaxCountController {
@Resource
private DbOperatorApi dbOperatorApi;
/**
*
* <p>
* 使
*
* @author fengshuonan
* @since 2023/10/29 17:59
*/
@GetResource(name = "业务排序获取", path = "/common/getBusinessMaxSort")
public ResponseData<Long> getBusinessMaxSort(@RequestParam("code") String code) {
MaxCountConfig config = MaxSortConfigContext.getConfig(code);
if (config == null) {
throw new ServiceException(MaxSortExceptionEnum.CANT_FIND_CODE);
}
Long maxSort = dbOperatorApi.getMaxSortByTableName(config.getTableName(), config.getSortFieldName());
// 默认返回排序数加1
maxSort++;
return new SuccessResponseData<>(maxSort);
}
}