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