mirror of https://gitee.com/stylefeng/roses
【8.0.1】【db】更新最大排序数获取方法
parent
a6769cbda0
commit
246a0dc005
|
@ -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;
|
||||
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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.
|
||||
*
|
||||
* Guns采用APACHE 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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue