From 578ea7a56b5fd6019cd96549f1176ce2574fc13a Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期六, 14 三月 2026 10:27:29 +0800
Subject: [PATCH] feat: 基础参数配置接口

---
 src/main/java/com/ruoyi/basic/controller/BaseParamController.java    |   60 +++++++
 src/main/java/com/ruoyi/basic/mapper/BaseParamMapper.java            |   16 ++
 doc/宁夏-中盛建材.sql                                                      |   23 ++
 src/main/java/com/ruoyi/basic/dto/BaseParamDto.java                  |   79 +++++++++
 src/main/resources/mapper/basic/BaseParamMapper.xml                  |   25 +++
 src/main/java/com/ruoyi/basic/service/impl/BaseParamServiceImpl.java |  157 +++++++++++++++++++
 src/main/java/com/ruoyi/basic/pojo/BaseParam.java                    |   81 ++++++++++
 src/main/java/com/ruoyi/basic/service/BaseParamService.java          |   25 +++
 8 files changed, 465 insertions(+), 1 deletions(-)

diff --git "a/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql" "b/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
index 33e8ed8..18b76f7 100644
--- "a/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
+++ "b/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
@@ -175,4 +175,25 @@
 
 ALTER TABLE `product-inventory-management-zsjc`.`production_plan`
     DROP COLUMN `data_sync_type`,
-    MODIFY COLUMN `data_source_type` tinyint NULL DEFAULT 1 COMMENT '鏁版嵁鏉ユ簮绫诲瀷锛�1=閽夐拤鍚屾 2=鎵嬪姩鏂板' AFTER `form_modified_time`;
\ No newline at end of file
+    MODIFY COLUMN `data_source_type` tinyint NULL DEFAULT 1 COMMENT '鏁版嵁鏉ユ簮绫诲瀷锛�1=閽夐拤鍚屾 2=鎵嬪姩鏂板' AFTER `form_modified_time`;
+
+DROP TABLE IF EXISTS `base_param`;
+CREATE TABLE `base_param`
+(
+    id            BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '涓婚敭ID',
+    param_key     VARCHAR(100) NOT NULL COMMENT '鍙傛暟鍞竴鏍囪瘑',
+    param_name    VARCHAR(100) NOT NULL COMMENT '鍙傛暟鍚嶇О',
+    param_type    TINYINT      NOT NULL COMMENT '鍙傛暟绫诲瀷(1鏁板瓧 2鏂囨湰)',
+    value_mode    TINYINT DEFAULT 1 COMMENT '鍊兼ā寮�(1鍗曞�� 2鍖洪棿)',
+    unit          VARCHAR(50) COMMENT '鍗曚綅',
+    default_value VARCHAR(200) COMMENT '榛樿鍊�(鍗曞�煎弬鏁�)',
+    default_min   DECIMAL(10, 2) COMMENT '榛樿鏈�灏忓��(鍖洪棿鍙傛暟)',
+    default_max   DECIMAL(10, 2) COMMENT '榛樿鏈�澶у��(鍖洪棿鍙傛暟)',
+    is_required   TINYINT DEFAULT 0 COMMENT '鏄惁蹇呭~(0鍚� 1鏄�)',
+    remark        VARCHAR(255) COMMENT '澶囨敞',
+    create_user   VARCHAR(64) COMMENT '鍒涘缓浜�',
+    create_time   DATETIME COMMENT '鍒涘缓鏃堕棿',
+    update_user   VARCHAR(64) COMMENT '淇敼浜�',
+    update_time   DATETIME COMMENT '淇敼鏃堕棿',
+    tenant_id     BIGINT       NOT NULL COMMENT '绉熸埛ID'
+) COMMENT = '鍩虹鍙傛暟瀹氫箟琛�';
diff --git a/src/main/java/com/ruoyi/basic/controller/BaseParamController.java b/src/main/java/com/ruoyi/basic/controller/BaseParamController.java
new file mode 100644
index 0000000..08f3df0
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/controller/BaseParamController.java
@@ -0,0 +1,60 @@
+package com.ruoyi.basic.controller;
+
+import com.ruoyi.basic.pojo.BaseParam;
+import com.ruoyi.basic.service.BaseParamService;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <br>
+ * 鍩虹鍙傛暟瀹氫箟鎺у埗灞�
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/13 16:42
+ */
+@RestController
+@RequestMapping("/baseParam")
+public class BaseParamController extends BaseController {
+
+    @Autowired
+    private BaseParamService baseParamService;
+
+    @GetMapping("list")
+    @Log(title = "鍩虹鍙傛暟鏁版嵁闆嗗悎", businessType = BusinessType.OTHER)
+    @ApiOperation("鍩虹鍙傛暟鏁版嵁闆嗗悎")
+    public AjaxResult baseParamList(BaseParam baseParam) {
+        List<BaseParam> list = baseParamService.baseParamList(baseParam);
+        return AjaxResult.success(list);
+    }
+
+    @PostMapping("/add")
+    @Log(title = "鏂板鍩虹鍙傛暟", businessType = BusinessType.INSERT)
+    @ApiOperation("鏂板鍩虹鍙傛暟")
+    public AjaxResult baseParamAdd(@RequestBody BaseParam baseParam) {
+        return toAjax(baseParamService.addBaseParam(baseParam));
+    }
+
+    @PutMapping("/edit")
+    @Log(title = "淇敼鍩虹鍙傛暟", businessType = BusinessType.UPDATE)
+    @ApiOperation("淇敼鍩虹鍙傛暟")
+    public AjaxResult baseParamEdit(@RequestBody BaseParam baseParam) {
+        return toAjax(baseParamService.updateBaseParam(baseParam));
+    }
+
+    @DeleteMapping("/remove/{ids}")
+    @Log(title = "鍒犻櫎鍩虹鍙傛暟", businessType = BusinessType.DELETE)
+    @ApiOperation("鍒犻櫎鍩虹鍙傛暟")
+    public AjaxResult baseParamRemove(@PathVariable Long[] ids) {
+        return toAjax(baseParamService.deleteBaseParamByIds(ids));
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/basic/dto/BaseParamDto.java b/src/main/java/com/ruoyi/basic/dto/BaseParamDto.java
new file mode 100644
index 0000000..e54ea8d
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/dto/BaseParamDto.java
@@ -0,0 +1,79 @@
+package com.ruoyi.basic.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <br>
+ * 鍩虹鍙傛暟瀹氫箟Dto
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/13 17:40
+ */
+@Data
+@Api("鍩虹鍙傛暟瀹氫箟Dto")
+public class BaseParamDto {
+
+    @ApiModelProperty("涓婚敭ID")
+    private Long id;
+
+    @ApiModelProperty("鍙傛暟鍞竴鏍囪瘑")
+    private String paramKey;
+
+    @ApiModelProperty("鍙傛暟鍚嶇О")
+    private String paramName;
+
+    @ApiModelProperty("鍙傛暟绫诲瀷(1鏁板瓧 2鏂囨湰)")
+    private Integer paramType;
+
+    @ApiModelProperty("鍊兼ā寮�(1鍗曞�� 2鍖洪棿)")
+    private Integer valueMode;
+
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("榛樿鍊�(鍗曞�煎弬鏁�)")
+    private String defaultValue;
+
+    @ApiModelProperty("榛樿鏈�灏忓��(鍖洪棿鍙傛暟)")
+    private BigDecimal defaultMin;
+
+    @ApiModelProperty("榛樿鏈�澶у��(鍖洪棿鍙傛暟)")
+    private BigDecimal defaultMax;
+
+    @ApiModelProperty("鏄惁蹇呭~(0鍚� 1鏄�)")
+    private Integer isRequired;
+
+    @ApiModelProperty("浜у搧绫诲瀷琛↖D鍚嶇О")
+    private String baseProductTypeName;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    private String createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    private String updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/basic/mapper/BaseParamMapper.java b/src/main/java/com/ruoyi/basic/mapper/BaseParamMapper.java
new file mode 100644
index 0000000..4d4ff41
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/mapper/BaseParamMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.basic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.basic.pojo.BaseParam;
+
+/**
+ * <br>
+ * 鍩虹鍙傛暟瀹氫箟Mapper
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/13 16:39
+ */
+public interface BaseParamMapper extends BaseMapper<BaseParam> {
+}
diff --git a/src/main/java/com/ruoyi/basic/pojo/BaseParam.java b/src/main/java/com/ruoyi/basic/pojo/BaseParam.java
new file mode 100644
index 0000000..27ce582
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/pojo/BaseParam.java
@@ -0,0 +1,81 @@
+package com.ruoyi.basic.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <br>
+ * 鍩虹鍙傛暟瀹氫箟琛�
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/13 16:33
+ */
+@Data
+@TableName("base_param")
+@Api("鍩虹鍙傛暟瀹氫箟")
+public class BaseParam {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty("涓婚敭ID")
+    private Long id;
+
+    @ApiModelProperty("鍙傛暟鍞竴鏍囪瘑")
+    private String paramKey;
+
+    @ApiModelProperty("鍙傛暟鍚嶇О")
+    private String paramName;
+
+    @ApiModelProperty("鍙傛暟绫诲瀷(1鏁板瓧 2鏂囨湰)")
+    private Integer paramType;
+
+    @ApiModelProperty("鍊兼ā寮�(1鍗曞�� 2鍖洪棿)")
+    private Integer valueMode;
+
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("榛樿鍊�(鍗曞�煎弬鏁�)")
+    private String defaultValue;
+
+    @ApiModelProperty("榛樿鏈�灏忓��(鍖洪棿鍙傛暟)")
+    private BigDecimal defaultMin;
+
+    @ApiModelProperty("榛樿鏈�澶у��(鍖洪棿鍙傛暟)")
+    private BigDecimal defaultMax;
+
+    @ApiModelProperty("鏄惁蹇呭~(0鍚� 1鏄�)")
+    private Integer isRequired;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    private String createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    private String updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("绉熸埛ID")
+    private Long tenantId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/basic/service/BaseParamService.java b/src/main/java/com/ruoyi/basic/service/BaseParamService.java
new file mode 100644
index 0000000..ee50e5a
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/BaseParamService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.basic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.basic.pojo.BaseParam;
+
+import java.util.List;
+
+/**
+ * <br>
+ * 鍩虹鍙傛暟瀹氫箟鎺ュ彛
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/13 16:40
+ */
+public interface BaseParamService extends IService<BaseParam> {
+    List<BaseParam> baseParamList(BaseParam baseParam);
+
+    int addBaseParam(BaseParam baseParam);
+
+    int updateBaseParam(BaseParam baseParam);
+
+    int deleteBaseParamByIds(Long[] ids);
+}
diff --git a/src/main/java/com/ruoyi/basic/service/impl/BaseParamServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/BaseParamServiceImpl.java
new file mode 100644
index 0000000..6cf1af6
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/impl/BaseParamServiceImpl.java
@@ -0,0 +1,157 @@
+package com.ruoyi.basic.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.mapper.BaseParamMapper;
+import com.ruoyi.basic.pojo.BaseParam;
+import com.ruoyi.basic.service.BaseParamService;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <br>
+ * 鍩虹鍙傛暟瀹氫箟鎺ュ彛瀹炵幇绫�
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/13 16:41
+ */
+@Slf4j
+@Service
+@Api("鍩虹鍙傛暟瀹氫箟鎺ュ彛瀹炵幇绫�")
+public class BaseParamServiceImpl extends ServiceImpl<BaseParamMapper, BaseParam> implements BaseParamService {
+
+    @Override
+    public List<BaseParam> baseParamList(BaseParam baseParam) {
+        LambdaQueryWrapper<BaseParam> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotEmpty(baseParam.getParamName())) {
+            queryWrapper.like(BaseParam::getParamName, baseParam.getParamName());
+        }
+        List<BaseParam> list = list(queryWrapper);
+        if (list == null || list.isEmpty()) {
+            return new ArrayList<>(0);
+        }
+        return list;
+    }
+
+    @Override
+    public int addBaseParam(BaseParam baseParam) {
+
+        if (baseParam == null) {
+            throw new RuntimeException("鏂板鍙傛暟涓嶈兘涓虹┖");
+        }
+        // 鍙傛暟鏍¢獙
+        checkBaseParam(baseParam, false);
+        // 鑷姩鐢熸垚paramKey
+        baseParam.setParamKey(generateParamKey());
+        baseParam.setCreateUser(SecurityUtils.getUsername());
+        baseParam.setCreateTime(LocalDateTime.now());
+
+        return baseMapper.insert(baseParam);
+    }
+
+    @Override
+    public int updateBaseParam(BaseParam baseParam) {
+        if (baseParam == null || baseParam.getId() == null) {
+            throw new RuntimeException("淇敼鍙傛暟ID涓嶈兘涓虹┖");
+        }
+        // 鍙傛暟鏍¢獙
+        checkBaseParam(baseParam, true);
+        baseParam.setUpdateUser(SecurityUtils.getUsername());
+        baseParam.setUpdateTime(LocalDateTime.now());
+
+        return baseMapper.updateById(baseParam);
+    }
+
+    /**
+     * 鐢熸垚鍙傛暟鍞竴key
+     */
+    private String generateParamKey() {
+        String prefix = "PARAM_";
+        // 鏌ヨ褰撳墠鏈�澶ey
+        LambdaQueryWrapper<BaseParam> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(BaseParam::getParamKey)
+                .likeRight(BaseParam::getParamKey, prefix)
+                .orderByDesc(BaseParam::getParamKey)
+                .last("limit 1");
+        BaseParam last = baseMapper.selectOne(wrapper);
+        int nextNum = 1;
+        if (last != null) {
+            String lastKey = last.getParamKey();
+            String numStr = lastKey.replace(prefix, "");
+            nextNum = Integer.parseInt(numStr) + 1;
+        }
+        return prefix + String.format("%04d", nextNum);
+    }
+
+    /**
+     * 鍙傛暟鍚堟硶鎬ф牎楠�
+     */
+    private void checkBaseParam(BaseParam baseParam, boolean isUpdate) {
+        if (baseParam == null) {
+            throw new RuntimeException("鍙傛暟瀵硅薄涓嶈兘涓虹┖");
+        }
+        if (StringUtils.isEmpty(baseParam.getParamName())) {
+            throw new RuntimeException("鍙傛暟鍚嶇О涓嶈兘涓虹┖");
+        }
+        if (baseParam.getParamType() == null ||
+                !(baseParam.getParamType() == 1 || baseParam.getParamType() == 2)) {
+            throw new RuntimeException("鍙傛暟绫诲瀷蹇呴』涓�1(鏁板瓧)鎴�2(鏂囨湰)");
+        }
+        if (baseParam.getValueMode() == null ||
+                !(baseParam.getValueMode() == 1 || baseParam.getValueMode() == 2)) {
+            throw new RuntimeException("鍊兼ā寮忓繀椤讳负1(鍗曞��)鎴�2(鍖洪棿)");
+        }
+
+        // 鍗曞�兼ā寮�
+        if (baseParam.getValueMode() == 1) {
+            if (StringUtils.isEmpty(baseParam.getDefaultValue())) {
+                throw new RuntimeException("鍗曞�煎弬鏁伴粯璁ゅ�间笉鑳戒负绌�");
+            }
+            if (baseParam.getParamType() == 1) {
+                try {
+                    new BigDecimal(baseParam.getDefaultValue());
+                } catch (Exception e) {
+                    throw new RuntimeException("榛樿鍊煎繀椤讳负鏁板瓧");
+                }
+            }
+
+            baseParam.setDefaultMin(null);
+            baseParam.setDefaultMax(null);
+        }
+
+        // 鍖洪棿妯″紡
+        if (baseParam.getValueMode() == 2) {
+            if (baseParam.getParamType() != 1) {
+                throw new RuntimeException("鍙湁鏁板瓧绫诲瀷鎵嶈兘浣跨敤鍖洪棿妯″紡");
+            }
+            if (baseParam.getDefaultMin() == null || baseParam.getDefaultMax() == null) {
+                throw new RuntimeException("鍖洪棿鍙傛暟鏈�灏忓�煎拰鏈�澶у�间笉鑳戒负绌�");
+            }
+            if (baseParam.getDefaultMin().compareTo(baseParam.getDefaultMax()) > 0) {
+                throw new RuntimeException("鏈�灏忓�间笉鑳藉ぇ浜庢渶澶у��");
+            }
+
+            baseParam.setDefaultValue(null);
+        }
+    }
+
+    @Override
+    public int deleteBaseParamByIds(Long[] ids) {
+        if (ids == null || ids.length == 0) {
+            throw new RuntimeException("鍒犻櫎ID涓嶈兘涓虹┖");
+        }
+
+        return baseMapper.deleteBatchIds(Arrays.asList(ids));
+    }
+}
diff --git a/src/main/resources/mapper/basic/BaseParamMapper.xml b/src/main/resources/mapper/basic/BaseParamMapper.xml
new file mode 100644
index 0000000..042b374
--- /dev/null
+++ b/src/main/resources/mapper/basic/BaseParamMapper.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.basic.mapper.BaseParamMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.BaseParam">
+        <id column="id" property="id"/>
+        <result column="param_key" property="paramKey"/>
+        <result column="param_name" property="paramName"/>
+        <result column="param_type" property="paramType"/>
+        <result column="value_mode" property="valueMode"/>
+        <result column="unit" property="unit"/>
+        <result column="default_value" property="defaultValue"/>
+        <result column="default_min" property="defaultMin"/>
+        <result column="default_max" property="defaultMax"/>
+        <result column="is_required" property="isRequired"/>
+        <result column="remark" property="remark"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="tenant_id" property="tenantId"/>
+    </resultMap>
+
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3