feat(system): 公司品牌信息数据库化并接入偏好设置(名称/logo/登录页标题/描述),save 接口加权限控制
已添加7个文件
267 ■■■■■ 文件已修改
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/SystemCompanyConfigController.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/vo/SystemCompanyConfigRespVO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/vo/SystemCompanyConfigSaveReqVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/companyconfig/SystemCompanyConfigDO.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/companyconfig/SystemCompanyConfigMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/companyconfig/SystemCompanyConfigService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/companyconfig/SystemCompanyConfigServiceImpl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/SystemCompanyConfigController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.system.controller.admin.companyconfig;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.companyconfig.vo.SystemCompanyConfigRespVO;
import cn.iocoder.yudao.module.system.controller.admin.companyconfig.vo.SystemCompanyConfigSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.companyconfig.SystemCompanyConfigDO;
import cn.iocoder.yudao.module.system.service.companyconfig.SystemCompanyConfigService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.annotation.security.PermitAll;
import jakarta.validation.Valid;
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.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - å…¬å¸å“ç‰Œä¿¡æ¯")
@RestController
@RequestMapping("/system/company-config")
@Validated
public class SystemCompanyConfigController {
    @Resource
    private SystemCompanyConfigService companyConfigService;
    /**
     * èŽ·å¾—å…¬å¸å“ç‰Œä¿¡æ¯
     *
     * å…ç™»å½•公开接口,供前端登录页 / åº”用启动时读取公司名称、logo、登录页标题。
     */
    @GetMapping("/get")
    @Operation(summary = "获得公司品牌信息(免登录公开)")
    @PermitAll
    public CommonResult<SystemCompanyConfigRespVO> getCompanyConfig() {
        SystemCompanyConfigDO config = companyConfigService.getCompanyConfig();
        return success(BeanUtils.toBean(config, SystemCompanyConfigRespVO.class));
    }
    /**
     * ä¿å­˜å…¬å¸å“ç‰Œä¿¡æ¯
     *
     * å•行 upsert,需登录且拥有 system:company-config:update æƒé™ã€‚
     * æƒé™é€šè¿‡èœå•「公司信息配置 - ä¿®æ”¹ã€æŽˆæƒï¼ˆè§ sql/mysql/system_company_config_menu.sql)。
     */
    @PostMapping("/save")
    @Operation(summary = "保存公司品牌信息")
    @PreAuthorize("@ss.hasPermission('system:company-config:update')")
    public CommonResult<Long> saveCompanyConfig(@Valid @RequestBody SystemCompanyConfigSaveReqVO reqVO) {
        return success(companyConfigService.saveCompanyConfig(reqVO));
    }
}
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/vo/SystemCompanyConfigRespVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package cn.iocoder.yudao.module.system.controller.admin.companyconfig.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - å…¬å¸å“ç‰Œä¿¡æ¯ Response VO")
@Data
public class SystemCompanyConfigRespVO {
    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    private Long id;
    @Schema(description = "公司名称", example = "宁夏九泓化工")
    private String companyName;
    @Schema(description = "logo æ°¸ä¹…公开链接(previewURL)", example = "http://domain/admin-api/system/storage-blob/preview/xxx?publicKey=xxx")
    private String logoUrl;
    @Schema(description = "logo å¯¹åº”çš„ blob è®°å½• ID", example = "86")
    private Long logoBlobId;
    @Schema(description = "登录页标题", example = "制造运营管理平台")
    private String loginTitle;
    @Schema(description = "登录页描述", example = "工程化、高性能、跨组件库的前端模版")
    private String loginDescription;
    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private LocalDateTime createTime;
}
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/vo/SystemCompanyConfigSaveReqVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.system.controller.admin.companyconfig.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
@Schema(description = "管理后台 - å…¬å¸å“ç‰Œä¿¡æ¯ä¿å­˜ Request VO")
@Data
public class SystemCompanyConfigSaveReqVO {
    @Schema(description = "主键(单行配置,可不传)", example = "1")
    private Long id;
    @Schema(description = "公司名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "宁夏九泓化工")
    @NotBlank(message = "公司名称不能为空")
    @Size(max = 128, message = "公司名称不能超过128个字符")
    private String companyName;
    @Schema(description = "logo æ°¸ä¹…公开链接(previewURL)", example = "http://domain/admin-api/system/storage-blob/preview/xxx?publicKey=xxx")
    @Size(max = 512, message = "logo åœ°å€ä¸èƒ½è¶…过512个字符")
    private String logoUrl;
    @Schema(description = "logo å¯¹åº”çš„ blob è®°å½• ID", example = "86")
    private Long logoBlobId;
    @Schema(description = "登录页标题", example = "制造运营管理平台")
    @Size(max = 128, message = "登录页标题不能超过128个字符")
    private String loginTitle;
    @Schema(description = "登录页描述", example = "工程化、高性能、跨组件库的前端模版")
    @Size(max = 128, message = "登录页描述不能超过128个字符")
    private String loginDescription;
}
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/companyconfig/SystemCompanyConfigDO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.system.dal.dataobject.companyconfig;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * å…¬å¸å“ç‰Œä¿¡æ¯é…ç½® DO
 *
 * å•行配置:保存公司名称/logo/登录页标题,前端启动时读取并联动登录页、菜单栏、网页标题。
 *
 * @author è¶…级管理员
 */
@TableName("system_company_config")
@KeySequence("system_company_config_seq") // ç”¨äºŽ Oracle、PostgreSQL、Kingbase、DB2、H2 æ•°æ®åº“的主键自增。如果是 MySQL ç­‰æ•°æ®åº“,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
public class SystemCompanyConfigDO extends BaseDO {
    /**
     * ä¸»é”®
     */
    private Long id;
    /**
     * å…¬å¸åç§°
     */
    private String companyName;
    /**
     * logo æ°¸ä¹…公开链接(public-upload è¿”回的 previewURL)
     */
    private String logoUrl;
    /**
     * logo å¯¹åº”çš„ blob è®°å½• ID
     */
    private Long logoBlobId;
    /**
     * ç™»å½•页标题
     */
    private String loginTitle;
    /**
     * ç™»å½•页描述
     */
    private String loginDescription;
}
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/companyconfig/SystemCompanyConfigMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package cn.iocoder.yudao.module.system.dal.mysql.companyconfig;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.companyconfig.SystemCompanyConfigDO;
import org.apache.ibatis.annotations.Mapper;
/**
 * å…¬å¸å“ç‰Œä¿¡æ¯é…ç½® Mapper
 *
 * @author è¶…级管理员
 */
@Mapper
public interface SystemCompanyConfigMapper extends BaseMapperX<SystemCompanyConfigDO> {
}
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/companyconfig/SystemCompanyConfigService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.system.service.companyconfig;
import cn.iocoder.yudao.module.system.controller.admin.companyconfig.vo.SystemCompanyConfigSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.companyconfig.SystemCompanyConfigDO;
/**
 * å…¬å¸å“ç‰Œä¿¡æ¯é…ç½® Service æŽ¥å£
 *
 * @author è¶…级管理员
 */
public interface SystemCompanyConfigService {
    /**
     * èŽ·å¾—å…¬å¸å“ç‰Œä¿¡æ¯ï¼ˆå•è¡Œé…ç½®ï¼‰
     *
     * @return å…¬å¸å“ç‰Œä¿¡æ¯ï¼Œæœªé…ç½®æ—¶è¿”回 null
     */
    SystemCompanyConfigDO getCompanyConfig();
    /**
     * ä¿å­˜å…¬å¸å“ç‰Œä¿¡æ¯ï¼ˆå•行 upsert)
     *
     * @param reqVO ä¿å­˜è¯·æ±‚
     * @return ä¸»é”®
     */
    Long saveCompanyConfig(SystemCompanyConfigSaveReqVO reqVO);
}
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/companyconfig/SystemCompanyConfigServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package cn.iocoder.yudao.module.system.service.companyconfig;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.companyconfig.vo.SystemCompanyConfigSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.companyconfig.SystemCompanyConfigDO;
import cn.iocoder.yudao.module.system.dal.mysql.companyconfig.SystemCompanyConfigMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * å…¬å¸å“ç‰Œä¿¡æ¯é…ç½® Service å®žçŽ°ç±»
 *
 * @author è¶…级管理员
 */
@Service
public class SystemCompanyConfigServiceImpl implements SystemCompanyConfigService {
    @Resource
    private SystemCompanyConfigMapper companyConfigMapper;
    @Override
    public SystemCompanyConfigDO getCompanyConfig() {
        // å•行配置:按主键升序取第一条
        List<SystemCompanyConfigDO> list = companyConfigMapper.selectList(new LambdaQueryWrapperX<SystemCompanyConfigDO>()
                .orderByAsc(SystemCompanyConfigDO::getId)
                .last("LIMIT 1"));
        return CollUtil.getFirst(list);
    }
    @Override
    public Long saveCompanyConfig(SystemCompanyConfigSaveReqVO reqVO) {
        SystemCompanyConfigDO config = getCompanyConfig();
        if (config == null) {
            // é¦–次保存:插入
            SystemCompanyConfigDO insertObj = BeanUtils.toBean(reqVO, SystemCompanyConfigDO.class);
            companyConfigMapper.insert(insertObj);
            return insertObj.getId();
        }
        // å·²å­˜åœ¨ï¼šæ›´æ–°å•行
        SystemCompanyConfigDO updateObj = BeanUtils.toBean(reqVO, SystemCompanyConfigDO.class);
        updateObj.setId(config.getId());
        companyConfigMapper.updateById(updateObj);
        return config.getId();
    }
}