From 3de24841540d933c58868e2aeb1f309ec9cd21e6 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期一, 24 八月 2026 17:47:51 +0800
Subject: [PATCH] feat(system): 公司品牌信息数据库化并接入偏好设置(名称/logo/登录页标题/描述),save 接口加权限控制

---
 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/companyconfig/SystemCompanyConfigService.java               |   28 +++++
 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/vo/SystemCompanyConfigSaveReqVO.java |   35 +++++++
 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/companyconfig/SystemCompanyConfigDO.java             |   47 +++++++++
 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/companyconfig/SystemCompanyConfigMapper.java              |   15 +++
 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/companyconfig/SystemCompanyConfigServiceImpl.java           |   50 ++++++++++
 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/vo/SystemCompanyConfigRespVO.java    |   33 ++++++
 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/SystemCompanyConfigController.java   |   59 +++++++++++
 7 files changed, 267 insertions(+), 0 deletions(-)

diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/SystemCompanyConfigController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/SystemCompanyConfigController.java
new file mode 100644
index 0000000..5222170
--- /dev/null
+++ b/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;
+
+    /**
+     * 鑾峰緱鍏徃鍝佺墝淇℃伅
+     *
+     * 鍏嶇櫥褰曞叕寮�鎺ュ彛锛屼緵鍓嶇鐧诲綍椤� / 搴旂敤鍚姩鏃惰鍙栧叕鍙稿悕绉般�乴ogo銆佺櫥褰曢〉鏍囬銆�
+     */
+    @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));
+    }
+
+}
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/vo/SystemCompanyConfigRespVO.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/vo/SystemCompanyConfigRespVO.java
new file mode 100644
index 0000000..7faff1b
--- /dev/null
+++ b/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 姘镐箙鍏紑閾炬帴锛坧reviewURL锛�", 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;
+
+}
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/vo/SystemCompanyConfigSaveReqVO.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/companyconfig/vo/SystemCompanyConfigSaveReqVO.java
new file mode 100644
index 0000000..76193e6
--- /dev/null
+++ b/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 姘镐箙鍏紑閾炬帴锛坧reviewURL锛�", 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;
+
+}
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/companyconfig/SystemCompanyConfigDO.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/companyconfig/SystemCompanyConfigDO.java
new file mode 100644
index 0000000..0f877f4
--- /dev/null
+++ b/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銆丳ostgreSQL銆並ingbase銆丏B2銆丠2 鏁版嵁搴撶殑涓婚敭鑷銆傚鏋滄槸 MySQL 绛夋暟鎹簱锛屽彲涓嶅啓銆�
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SystemCompanyConfigDO extends BaseDO {
+
+    /**
+     * 涓婚敭
+     */
+    private Long id;
+    /**
+     * 鍏徃鍚嶇О
+     */
+    private String companyName;
+    /**
+     * logo 姘镐箙鍏紑閾炬帴锛坧ublic-upload 杩斿洖鐨� previewURL锛�
+     */
+    private String logoUrl;
+    /**
+     * logo 瀵瑰簲鐨� blob 璁板綍 ID
+     */
+    private Long logoBlobId;
+    /**
+     * 鐧诲綍椤垫爣棰�
+     */
+    private String loginTitle;
+    /**
+     * 鐧诲綍椤垫弿杩�
+     */
+    private String loginDescription;
+
+}
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/companyconfig/SystemCompanyConfigMapper.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/companyconfig/SystemCompanyConfigMapper.java
new file mode 100644
index 0000000..c098410
--- /dev/null
+++ b/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> {
+
+}
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/companyconfig/SystemCompanyConfigService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/companyconfig/SystemCompanyConfigService.java
new file mode 100644
index 0000000..e2483da
--- /dev/null
+++ b/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);
+
+}
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/companyconfig/SystemCompanyConfigServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/companyconfig/SystemCompanyConfigServiceImpl.java
new file mode 100644
index 0000000..c862d36
--- /dev/null
+++ b/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();
+    }
+
+}

--
Gitblit v1.9.3