feat: 完成模型参数配置功能开发
- 添加 Controller、Mapper、Service 层代码 - 添加前端 API 和页面组件 - 添加后端功能测试报告
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package com.ruoyi.ccdi.project.controller;
|
||||
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamSaveDTO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelListVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelParamVO;
|
||||
import com.ruoyi.ccdi.project.service.ICcdiModelParamService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数配置Controller
|
||||
*/
|
||||
@Tag(name = "模型参数配置")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/modelParam")
|
||||
public class CcdiModelParamController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiModelParamService modelParamService;
|
||||
|
||||
/**
|
||||
* 查询模型列表
|
||||
*/
|
||||
@Operation(summary = "查询模型列表")
|
||||
@GetMapping("/modelList")
|
||||
public AjaxResult listModels(@RequestParam(required = false) Long projectId) {
|
||||
List<ModelListVO> list = modelParamService.selectModelList(projectId);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询模型参数列表
|
||||
*/
|
||||
@Operation(summary = "查询模型参数列表")
|
||||
@GetMapping("/list")
|
||||
public AjaxResult list(@Validated ModelParamQueryDTO queryDTO) {
|
||||
List<ModelParamVO> list = modelParamService.selectParamList(queryDTO);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存模型参数(只更新阈值)
|
||||
*/
|
||||
@Operation(summary = "保存模型参数")
|
||||
@Log(title = "模型参数配置", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/save")
|
||||
public AjaxResult save(@Validated @RequestBody ModelParamSaveDTO saveDTO) {
|
||||
modelParamService.saveParams(saveDTO);
|
||||
return success("保存成功");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.ruoyi.ccdi.project.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.ruoyi.ccdi.project.domain.CcdiModelParam;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数Mapper
|
||||
*/
|
||||
public interface CcdiModelParamMapper extends BaseMapper<CcdiModelParam> {
|
||||
|
||||
/**
|
||||
* 查询指定项目和模型的参数列表
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @param modelCode 模型编码
|
||||
* @return 参数列表
|
||||
*/
|
||||
List<CcdiModelParam> selectByProjectAndModel(
|
||||
@Param("projectId") Long projectId,
|
||||
@Param("modelCode") String modelCode
|
||||
);
|
||||
|
||||
/**
|
||||
* 查询所有模型列表(去重)
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @return 模型列表
|
||||
*/
|
||||
List<CcdiModelParam> selectDistinctModels(@Param("projectId") Long projectId);
|
||||
|
||||
/**
|
||||
* 批量更新参数值(只更新param_value字段)
|
||||
*
|
||||
* @param list 参数列表
|
||||
* @return 更新数量
|
||||
*/
|
||||
int batchUpdateParamValues(@Param("list") List<CcdiModelParam> list);
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.ruoyi.ccdi.project.service;
|
||||
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamSaveDTO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelListVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelParamVO;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数Service
|
||||
*/
|
||||
public interface ICcdiModelParamService {
|
||||
|
||||
/**
|
||||
* 查询模型列表
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @return 模型列表
|
||||
*/
|
||||
List<ModelListVO> selectModelList(Long projectId);
|
||||
|
||||
/**
|
||||
* 查询模型参数列表
|
||||
*
|
||||
* @param queryDTO 查询条件
|
||||
* @return 参数列表
|
||||
*/
|
||||
List<ModelParamVO> selectParamList(ModelParamQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 保存模型参数(只更新阈值)
|
||||
*
|
||||
* @param saveDTO 保存参数
|
||||
*/
|
||||
void saveParams(ModelParamSaveDTO saveDTO);
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
package com.ruoyi.ccdi.project.service.impl;
|
||||
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.ccdi.project.domain.CcdiModelParam;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamSaveDTO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelListVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelParamVO;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiModelParamMapper;
|
||||
import com.ruoyi.ccdi.project.service.ICcdiModelParamService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 模型参数Service实现
|
||||
*/
|
||||
@Service
|
||||
public class CcdiModelParamServiceImpl implements ICcdiModelParamService {
|
||||
|
||||
@Resource
|
||||
private CcdiModelParamMapper modelParamMapper;
|
||||
|
||||
@Override
|
||||
public List<ModelListVO> selectModelList(Long projectId) {
|
||||
if (projectId == null) {
|
||||
projectId = 0L; // 默认查询系统级参数
|
||||
}
|
||||
|
||||
List<ModelListVO> result = new ArrayList<>();
|
||||
List<CcdiModelParam> params = modelParamMapper.selectDistinctModels(projectId);
|
||||
|
||||
params.forEach(param -> {
|
||||
ModelListVO vo = new ModelListVO();
|
||||
vo.setModelCode(param.getModelCode());
|
||||
vo.setModelName(param.getModelName());
|
||||
result.add(vo);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ModelParamVO> selectParamList(ModelParamQueryDTO queryDTO) {
|
||||
Long projectId = queryDTO.getProjectId();
|
||||
if (projectId == null) {
|
||||
projectId = 0L;
|
||||
}
|
||||
|
||||
List<CcdiModelParam> params = modelParamMapper.selectByProjectAndModel(
|
||||
projectId,
|
||||
queryDTO.getModelCode()
|
||||
);
|
||||
|
||||
List<ModelParamVO> result = new ArrayList<>();
|
||||
params.forEach(param -> {
|
||||
ModelParamVO vo = new ModelParamVO();
|
||||
BeanUtils.copyProperties(param, vo);
|
||||
result.add(vo);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveParams(ModelParamSaveDTO saveDTO) {
|
||||
Long projectId = saveDTO.getProjectId();
|
||||
if (projectId == null) {
|
||||
projectId = 0L;
|
||||
}
|
||||
|
||||
// 空列表校验
|
||||
if (saveDTO.getParams() == null || saveDTO.getParams().isEmpty()) {
|
||||
throw new ServiceException("参数列表不能为空");
|
||||
}
|
||||
|
||||
String username = SecurityUtils.getUsername();
|
||||
Date now = new Date();
|
||||
|
||||
// 查询现有参数
|
||||
List<CcdiModelParam> existingParams = modelParamMapper.selectByProjectAndModel(
|
||||
projectId,
|
||||
saveDTO.getModelCode()
|
||||
);
|
||||
|
||||
if (existingParams.isEmpty()) {
|
||||
throw new ServiceException("未找到模型参数配置");
|
||||
}
|
||||
|
||||
// 构建Map提升性能
|
||||
Map<String, CcdiModelParam> existingMap = existingParams.stream()
|
||||
.collect(Collectors.toMap(CcdiModelParam::getParamCode, p -> p));
|
||||
|
||||
// 准备更新列表 - 只更新 param_value 字段
|
||||
List<CcdiModelParam> updateList = new ArrayList<>();
|
||||
for (ModelParamSaveDTO.ParamItem item : saveDTO.getParams()) {
|
||||
CcdiModelParam existing = existingMap.get(item.getParamCode());
|
||||
|
||||
if (existing != null) {
|
||||
// ⚠️ 关键:只修改 param_value 字段
|
||||
CcdiModelParam updateParam = new CcdiModelParam();
|
||||
updateParam.setId(existing.getId());
|
||||
updateParam.setParamValue(item.getParamValue()); // 只更新阈值
|
||||
updateParam.setUpdateBy(username);
|
||||
updateParam.setUpdateTime(now);
|
||||
updateList.add(updateParam);
|
||||
}
|
||||
}
|
||||
|
||||
if (!updateList.isEmpty()) {
|
||||
modelParamMapper.batchUpdateParamValues(updateList);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
<?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.ccdi.project.mapper.CcdiModelParamMapper">
|
||||
|
||||
<resultMap id="ModelParamResult" type="com.ruoyi.ccdi.project.domain.CcdiModelParam">
|
||||
<id property="id" column="id"/>
|
||||
<result property="projectId" column="project_id"/>
|
||||
<result property="modelCode" column="model_code"/>
|
||||
<result property="modelName" column="model_name"/>
|
||||
<result property="paramCode" column="param_code"/>
|
||||
<result property="paramName" column="param_name"/>
|
||||
<result property="paramDesc" column="param_desc"/>
|
||||
<result property="paramValue" column="param_value"/>
|
||||
<result property="paramUnit" column="param_unit"/>
|
||||
<result property="sortOrder" column="sort_order"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectModelParamVo">
|
||||
select id, project_id, model_code, model_name, param_code, param_name, param_desc,
|
||||
param_value, param_unit, sort_order, create_by, create_time, update_by, update_time, remark
|
||||
from ccdi_model_param
|
||||
</sql>
|
||||
|
||||
<select id="selectByProjectAndModel" resultMap="ModelParamResult">
|
||||
<include refid="selectModelParamVo"/>
|
||||
where project_id = #{projectId} and model_code = #{modelCode}
|
||||
order by sort_order asc
|
||||
</select>
|
||||
|
||||
<select id="selectDistinctModels" resultMap="ModelParamResult">
|
||||
select distinct model_code, model_name
|
||||
from ccdi_model_param
|
||||
where project_id = #{projectId}
|
||||
order by model_code
|
||||
</select>
|
||||
|
||||
<!-- 关键:只更新 param_value 字段,使用 CASE WHEN 批量更新 -->
|
||||
<update id="batchUpdateParamValues">
|
||||
update ccdi_model_param
|
||||
<set>
|
||||
<trim prefix="param_value = case" suffix="end,">
|
||||
<foreach collection="list" item="item">
|
||||
when id = #{item.id} then #{item.paramValue}
|
||||
</foreach>
|
||||
</trim>
|
||||
<trim prefix="update_by = case" suffix="end,">
|
||||
<foreach collection="list" item="item">
|
||||
when id = #{item.id} then #{item.updateBy}
|
||||
</foreach>
|
||||
</trim>
|
||||
update_time = sysdate()
|
||||
</set>
|
||||
where id in
|
||||
<foreach collection="list" item="item" open="(" separator="," close=")">
|
||||
#{item.id}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user