diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index 4ceec2cb7..e737c9fcc 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -338,4 +338,8 @@ public class ErrorCodeConstants { //=========== 用户的系统配置 1-002-039-000 ============ public static final ErrorCode CURRENTLY_NO_CONFIGURATION_AVAILABLE = new ErrorCode(1_002_039_001, "当前没有{}配置信息,请前往设置配置"); + + //=========== 系统配置 1-002-040-000 ============ + public static final ErrorCode SYSTEM_CONFIG_NOT_EXISTS = new ErrorCode(1_002_040_001, "系统配置不存在"); + public static final ErrorCode SYSTEM_CONFIG_TYPE_NOT_SUPPORT = new ErrorCode(1_002_040_002, "不支持的系统配置类型"); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/ConfigController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/ConfigController.java new file mode 100644 index 000000000..21cd0aa1a --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/ConfigController.java @@ -0,0 +1,73 @@ +package com.cf.imes.module.system.controller.admin.baseconfig; + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigPageReqVO; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigRespVO; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigSaveReqVO; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigUpdateStatusReqVO; +import com.cf.imes.module.system.dal.dataobject.baseconfig.ConfigDO; +import com.cf.imes.module.system.service.config.ConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; + +/** + * 系统配置管理控制器 + * + * @author Gqr + * @since 2024/11/7 16:36 + */ +@Tag(name = "管理后台 - 系统配置") +@RestController +@RequestMapping("/system/config") +@Validated +public class ConfigController { + @Resource + private ConfigService baseConfigService; + + @GetMapping() + @Operation(summary = "获得系统配置的分页列表") + @PreAuthorize("@ss.hasPermission('baseconfig:query')") + public CommonResult> getBaseConfigPage(@Valid ConfigPageReqVO pageReqVO) { + PageResult pageResult = baseConfigService.getBaseConfigPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ConfigRespVO.class)); + } + + @GetMapping("/{id}") + @Operation(summary = "根据id查询系统配置") + @PreAuthorize("@ss.hasPermission('baseconfig:query')") + public CommonResult getBaseConfig(@PathVariable Long id) { + ConfigDO baseConfig = baseConfigService.getBaseConfig(id); + return success(BeanUtils.toBean(baseConfig, ConfigRespVO.class)); + } + + @PostMapping("/status") + @Operation(summary = "修改系统配置状态") + @PreAuthorize("@ss.hasPermission('baseconfig:update')") + public CommonResult updateConfigStatus(@Valid @RequestBody ConfigUpdateStatusReqVO reqVO){ + baseConfigService.updateStatus(reqVO); + return success(true); + } + + @PostMapping() + @Operation(summary = "修改系统配置") + @PreAuthorize("@ss.hasPermission('baseconfig:update')") + public CommonResult modifyBaseConfig(@Valid @RequestBody ConfigSaveReqVO reqVO) { + baseConfigService.modifyBaseConfig(reqVO); + return success(true); + } +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigPageReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigPageReqVO.java new file mode 100644 index 000000000..388c0e733 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigPageReqVO.java @@ -0,0 +1,28 @@ +package com.cf.imes.module.system.controller.admin.baseconfig.vo; + +import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.module.system.validation.common.CommonStatus; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.Size; + +/** + * 系统配置分页查询VO + * @author Gqr + * @since 2024/11/7 16:29 + */ +@Schema(description = "管理后台 - 系统配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class ConfigPageReqVO extends PageParam { + + @Schema(description = "配置项名称", example = "晨丰") + @Size(max = 64, message = "配置项名称长度不能超过64个字符") + private String name; + + @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") + @CommonStatus + private Integer status; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigRespVO.java new file mode 100644 index 000000000..3f145eb8c --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigRespVO.java @@ -0,0 +1,29 @@ +package com.cf.imes.module.system.controller.admin.baseconfig.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 系统配置respvo + * + * @author Gqr + * @since 2024/11/7 16:39 + */ +@Schema(description = "管理后台 - 系统配置 Response VO") +@Data +public class ConfigRespVO { + @Schema(description = "配置编号") + private Long id; + + @Schema(description = "配置项名称") + private String name; + + @Schema(description = "配置规则") + private String setting; + + @Schema(description = "状态") + private int status; + + @Schema(description = "配置类型") + private int type; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigSaveReqVO.java new file mode 100644 index 000000000..dd205c833 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigSaveReqVO.java @@ -0,0 +1,35 @@ +package com.cf.imes.module.system.controller.admin.baseconfig.vo; + +import com.cf.imes.module.system.validation.config.ConfigEnumValid; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 基础配置创建/修改 vo + * + * @author Gqr + * @since 2024/11/7 17:09 + */ +@Schema(description = "管理后台 - 基础配置创建/修改 Request VO") +@Data +public class ConfigSaveReqVO { + @Schema(description = "基础配置编号", example = "1") + private Long id; + + @Schema(description = "基础配置名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "自定义编号") + @NotBlank(message = "基础配置名称不能为空") + @Size(max = 64, message = "基础配置名称长度不能超过 64 个字符") + private String name; + + @Schema(description = "配置类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "配置类型不能为空") + @ConfigEnumValid + private Integer type; + + @Schema(description = "配置规则") + private String setting; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigUpdateStatusReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigUpdateStatusReqVO.java new file mode 100644 index 000000000..5982e247e --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/baseconfig/vo/ConfigUpdateStatusReqVO.java @@ -0,0 +1,26 @@ +package com.cf.imes.module.system.controller.admin.baseconfig.vo; + +import com.cf.imes.module.system.validation.common.CommonStatus; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 系统配置状态更新 reqvo + * + * @author Gqr + * @since 2024/11/8 10:41 + */ +@Schema(description = "管理后台 - 系统配置状态更新 Request VO") +@Data +public class ConfigUpdateStatusReqVO { + @Schema(description = "系统配置编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "系统配置编号不能为空") + private Long id; + + @Schema(description = "状态,见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + @CommonStatus + private Integer status; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/baseconfig/ConfigDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/baseconfig/ConfigDO.java new file mode 100644 index 000000000..32aef080d --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/baseconfig/ConfigDO.java @@ -0,0 +1,66 @@ +package com.cf.imes.module.system.dal.dataobject.baseconfig; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import com.cf.imes.framework.mybatis.core.type.CompressStringTypeHandler; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; + + +/** + * 系统配置 + * + * @author Gqr + * @since 2024/11/7 16:12 + */ +@TableName(value = "config", autoResultMap = true) +@KeySequence("config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ConfigDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Long id; + + /** + * 配置项名称 + */ + private String name; + + /** + * 状态 + */ + private int status; + + /** + * 配置类型 + */ + private int type; + + /** + * 配置规则 + */ + @TableField(typeHandler = CompressStringTypeHandler.class) + private String setting; + + /** + * 组织id + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long organId; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/config/ConfigMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/config/ConfigMapper.java new file mode 100644 index 000000000..9507b7b44 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/config/ConfigMapper.java @@ -0,0 +1,34 @@ +package com.cf.imes.module.system.dal.mysql.config; + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.framework.organ.core.context.OrganContextHolder; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigPageReqVO; +import com.cf.imes.module.system.dal.dataobject.baseconfig.ConfigDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 系统配置 Mapper + * + * @author Gqr + * @since 2024/11/7 16:25 + */ +@Mapper +public interface ConfigMapper extends BaseMapperX { + + /** + * 分页查询 + * + * @param reqVO + * @return + */ + default PageResult selectPage(ConfigPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(ConfigDO::getName, reqVO.getName()) + .eqIfPresent(ConfigDO::getStatus, reqVO.getStatus()) + .eqIfPresent(ConfigDO::getOrganId, OrganContextHolder.getOrganId()) + .select(ConfigDO::getId, ConfigDO::getName, ConfigDO::getStatus, ConfigDO::getType) + .orderByAsc(ConfigDO::getId)); + } +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/enums/config/ConfigTypeEnum.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/enums/config/ConfigTypeEnum.java new file mode 100644 index 000000000..7a706a863 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/enums/config/ConfigTypeEnum.java @@ -0,0 +1,53 @@ +package com.cf.imes.module.system.enums.config; + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 系统配置类型枚举 + * + * @author Gqr + * @since 2024/11/8 13:43 + */ +@Getter +@AllArgsConstructor +public enum ConfigTypeEnum { + /** + * 自定义板编号 + */ + CUSTOM_BOARD_NO(1, "自定义板编号"), + + /** + * 智能分线 + */ + INTELLIGENT_BRANCH(2, "智能分线"), + + /** + * 高级筛选 + */ + ADVANCED_SCREEN(3, "高级筛选"); + + + /** + * 类型 + */ + private final Integer type; + + /** + * 配置项名称 + */ + private final String name; + + public static ConfigTypeEnum fromType(Integer type) { + if (type == null) { + return null; + } + for (ConfigTypeEnum value : values()) { + if (ObjectUtil.equal(value.getType(), type)) { + return value; + } + } + return null; + } +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/ConfigService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/ConfigService.java new file mode 100644 index 000000000..c5c8b6404 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/ConfigService.java @@ -0,0 +1,45 @@ +package com.cf.imes.module.system.service.config; + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigPageReqVO; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigSaveReqVO; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigUpdateStatusReqVO; +import com.cf.imes.module.system.dal.dataobject.baseconfig.ConfigDO; + +/** + * 系统配置接口 + * + * @author Gqr + * @since 2024/11/7 16:27 + */ +public interface ConfigService { + /** + * 分页查询系统配置管理列表 + * + * @param reqVO + * @return + */ + PageResult getBaseConfigPage(ConfigPageReqVO reqVO); + + /** + * 根据id查询基础配置 + * + * @param id + * @return + */ + ConfigDO getBaseConfig(Long id); + + /** + * 新增/修改基础配置 + * + * @param reqVO + */ + void modifyBaseConfig(ConfigSaveReqVO reqVO); + + /** + * 更新基础配置状态 + * + * @param reqVO + */ + void updateStatus(ConfigUpdateStatusReqVO reqVO); +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/ConfigServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/ConfigServiceImpl.java new file mode 100644 index 000000000..1bdb5eb6b --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/ConfigServiceImpl.java @@ -0,0 +1,114 @@ +package com.cf.imes.module.system.service.config; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.framework.organ.core.context.OrganContextHolder; +import com.cf.imes.module.system.controller.admin.baseconfig.ConfigController; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigPageReqVO; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigSaveReqVO; +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigUpdateStatusReqVO; +import com.cf.imes.module.system.dal.dataobject.baseconfig.ConfigDO; +import com.cf.imes.module.system.dal.mysql.config.ConfigMapper; +import com.cf.imes.module.system.enums.config.ConfigTypeEnum; +import com.cf.imes.module.system.service.config.factory.ConfigServiceFactory; +import com.cf.imes.module.system.service.config.factory.service.AbstractConfigGenerateService; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +import java.util.Optional; +import java.util.concurrent.CopyOnWriteArrayList; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.SYSTEM_CONFIG_NOT_EXISTS; + +/** + * 系统配置接口实现类 + * + * @author Gqr + * @since 2024/11/7 16:27 + */ +@Slf4j +@Service +public class ConfigServiceImpl implements ConfigService { + + @Resource + private ConfigMapper baseConfigMapper; + + @Resource + private ConfigServiceFactory configServiceFactory; + + @Override + public PageResult getBaseConfigPage(ConfigPageReqVO reqVO) { + PageResult configDOPageResult = baseConfigMapper.selectPage(reqVO); + // todo 后续所有configTypeEnum中的类型需要上到列表补全时通过遍历enum来补充 + ConfigTypeEnum customBoardNoEnum = ConfigTypeEnum.CUSTOM_BOARD_NO; + CopyOnWriteArrayList configDOS = Lists.newCopyOnWriteArrayList(configDOPageResult.getList()); + Optional configDOOptional = configDOS.stream().filter(c -> ObjectUtil.equal(customBoardNoEnum.getType(), c.getType())).findAny(); + if (configDOOptional.isEmpty()) { + configDOS.add(new ConfigDO().builder().id(null).name(customBoardNoEnum.getName()).type(customBoardNoEnum.getType()).build()); + configDOPageResult.setList(configDOS); + configDOPageResult.setTotal(configDOPageResult.getTotal() + 1); + } + return configDOPageResult; + } + + @Override + public ConfigDO getBaseConfig(Long id) { + return validateBaseConfigExists(id); + } + + @Override + public void modifyBaseConfig(ConfigSaveReqVO reqVO) { + Long id = reqVO.getId(); + // 根据配置类型选择对应的service + AbstractConfigGenerateService configService = configServiceFactory.getConfigService(reqVO.getType()); + // 校验规则 + configService.checkValid(reqVO.getSetting()); + // 系统配置保存前操作 + configService.beforeSaveConfig(reqVO); + if (ObjectUtil.isNotNull(id)) { + ConfigDO baseConfigDO = validateBaseConfigExists(id); + // 覆盖配置 + baseConfigDO.setSetting(reqVO.getSetting()); + // 更新 + baseConfigMapper.updateById(baseConfigDO); + } else { + // 新增 + baseConfigMapper.insert(BeanUtils.toBean(reqVO, ConfigDO.class)); + } + // 系统配置保存后操作 + configService.afterSaveConfig(reqVO); + } + + @Override + public void updateStatus(ConfigUpdateStatusReqVO reqVO) { + Long id = reqVO.getId(); + // 校验存在 + validateBaseConfigExists(id); + // 更新状态 + baseConfigMapper.update(new LambdaUpdateWrapper().eq(ConfigDO::getId, id).set(ConfigDO::getStatus, reqVO.getStatus())); + } + + + /** + * 校验基础配置是否存在 + * + * @param id + * @return + */ + private ConfigDO validateBaseConfigExists(Long id) { + ConfigDO baseConfigDO = baseConfigMapper.selectOne(new LambdaQueryWrapperX() + .eq(ConfigDO::getId, id) + .eq(ConfigDO::getOrganId, OrganContextHolder.getOrganId())); + if (ObjectUtil.isNull(baseConfigDO)) { + throw exception(SYSTEM_CONFIG_NOT_EXISTS); + } + return baseConfigDO; + } +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/factory/ConfigServiceFactory.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/factory/ConfigServiceFactory.java new file mode 100644 index 000000000..6c7475826 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/factory/ConfigServiceFactory.java @@ -0,0 +1,47 @@ +package com.cf.imes.module.system.service.config.factory; + +import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; +import com.cf.imes.module.system.enums.config.ConfigTypeEnum; +import com.cf.imes.module.system.service.config.factory.service.AbstractConfigGenerateService; +import com.cf.imes.module.system.service.config.factory.service.impl.CustomBoardNoGenerateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +import static com.cf.imes.module.system.enums.ErrorCodeConstants.SYSTEM_CONFIG_TYPE_NOT_SUPPORT; + + +/** + * 系统配置服务分配工厂类 + * + * @author Gqr + * @since 2024/11/8 16:40 + */ +@Component +public class ConfigServiceFactory { + private final ApplicationContext applicationContext; + + @Autowired + public ConfigServiceFactory(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + /** + * 根据类型获取对应的服务实现 + * + * @param type + * @return + */ + public AbstractConfigGenerateService getConfigService(int type) { + switch (ConfigTypeEnum.fromType(type)) { + case CUSTOM_BOARD_NO: + return applicationContext.getBean(CustomBoardNoGenerateService.class); + case INTELLIGENT_BRANCH: + // todo 智能分线 + case ADVANCED_SCREEN: + // todo 高级筛选 + default: + throw ServiceExceptionUtil.exception(SYSTEM_CONFIG_TYPE_NOT_SUPPORT); + } + } +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/factory/service/AbstractConfigGenerateService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/factory/service/AbstractConfigGenerateService.java new file mode 100644 index 000000000..750029bad --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/factory/service/AbstractConfigGenerateService.java @@ -0,0 +1,34 @@ +package com.cf.imes.module.system.service.config.factory.service; + +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigSaveReqVO; + +/** + * 系统配置生成服务抽象类 + * + * @author Gqr + * @since 2024/11/8 16:45 + */ +public abstract class AbstractConfigGenerateService { + + /** + * 校验配置的合法性 + * 校验异常抛出ServiceException + * + * @param setting + */ + public abstract void checkValid(String setting); + + /** + * 系统配置入库前操作 + * + * @param reqVO + */ + public abstract void beforeSaveConfig(ConfigSaveReqVO reqVO); + + /** + * 系统配置入库后操作 + * + * @param reqVO + */ + public abstract void afterSaveConfig(ConfigSaveReqVO reqVO); +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/factory/service/impl/CustomBoardNoGenerateService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/factory/service/impl/CustomBoardNoGenerateService.java new file mode 100644 index 000000000..20bb14ac6 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/config/factory/service/impl/CustomBoardNoGenerateService.java @@ -0,0 +1,30 @@ +package com.cf.imes.module.system.service.config.factory.service.impl; + +import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigSaveReqVO; +import com.cf.imes.module.system.service.config.factory.service.AbstractConfigGenerateService; +import org.springframework.stereotype.Service; + +/** + * 自定义板编号生成服务 + * + * @author Gqr + * @since 2024/11/8 16:48 + */ +@Service("customBoardNoGenerateService") +public class CustomBoardNoGenerateService extends AbstractConfigGenerateService { + + @Override + public void checkValid(String setting) { + // todo checkValid + } + + @Override + public void beforeSaveConfig(ConfigSaveReqVO reqVO) { + // todo beforeSaveConfig + } + + @Override + public void afterSaveConfig(ConfigSaveReqVO reqVO) { + // todo afterSaveConfig + } +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/config/ConfigEnumValid.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/config/ConfigEnumValid.java new file mode 100644 index 000000000..5e234c11c --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/config/ConfigEnumValid.java @@ -0,0 +1,32 @@ +package com.cf.imes.module.system.validation.config; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 系统配置类型校验注解 + * + * @author Gqr + * @since 2024/11/8 13:59 + */ +@Target({ + ElementType.FIELD, + ElementType.PARAMETER, +}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint( + validatedBy = {ConfigEnumValidator.class} +) +public @interface ConfigEnumValid { + String message() default "配置类型非法输入,请检查"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/config/ConfigEnumValidator.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/config/ConfigEnumValidator.java new file mode 100644 index 000000000..5b9f632f2 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/config/ConfigEnumValidator.java @@ -0,0 +1,33 @@ +package com.cf.imes.module.system.validation.config; + +import cn.hutool.core.util.ObjectUtil; +import com.cf.imes.module.system.enums.config.ConfigTypeEnum; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + + +/** + * 系统配置类型校验器 + * + * @author Gqr + * @since 2024/11/8 14:01 + */ +public class ConfigEnumValidator implements ConstraintValidator { + @Override + public void initialize(ConfigEnumValid constraintAnnotation) { + ConstraintValidator.super.initialize(constraintAnnotation); + } + + @Override + public boolean isValid(Integer value, ConstraintValidatorContext context) { + if (ObjectUtil.isNull(value)) { + return true; + } + ConfigTypeEnum configTypeEnum = ConfigTypeEnum.fromType(value); + if (ObjectUtil.isNotNull(configTypeEnum)) { + return true; + } + return false; + } +}