-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
切换根指标会刷新下面的“子指标映射表”。
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
\ No newline at end of file
+ // 根指标选择(下拉)
+ document.getElementById('rootSelect').addEventListener('change', (e)=>{
+ renderTable(e.target.value);
+ });
+
+ // 初始
+ renderTable('quality');
+
diff --git a/manager-admin/src/main/java/com/hshh/data/controller/DataController.java b/manager-admin/src/main/java/com/hshh/data/controller/DataController.java
index c14c09e..af7d5ad 100644
--- a/manager-admin/src/main/java/com/hshh/data/controller/DataController.java
+++ b/manager-admin/src/main/java/com/hshh/data/controller/DataController.java
@@ -73,6 +73,7 @@ public class DataController extends BaseController {
@GetMapping("/list")
@Operation(summary = "导航到数据管理页面", description = "导航到数据管理页面")
public String index(PaginationBean request, Model model) {
+ setNavigateTitle(model, "/data/list");
List
modelDefineList = modelDefineService.list(); //查询所有数据模型列表
modelDefineList.sort(Comparator.comparing(ModelDefine::getSortOrder)); //对模型数据列表排序
diff --git a/manager-admin/src/main/java/com/hshh/indicator/controller/IndicatorController.java b/manager-admin/src/main/java/com/hshh/indicator/controller/IndicatorController.java
index d797bae..1a3c4ea 100644
--- a/manager-admin/src/main/java/com/hshh/indicator/controller/IndicatorController.java
+++ b/manager-admin/src/main/java/com/hshh/indicator/controller/IndicatorController.java
@@ -1,19 +1,35 @@
package com.hshh.indicator.controller;
import com.hshh.indicator.entity.Indicator;
-import com.hshh.indicator.entity.IndicatorEvalItem;
-import com.hshh.indicator.service.IndicatorEvalItemService;
+import com.hshh.indicator.entity.IndicatorBottomCsvMapper;
+import com.hshh.indicator.entity.IndicatorBottomFormMapper;
+import com.hshh.indicator.entity.IndicatorCsv;
+import com.hshh.indicator.entity.IndicatorFormMapper;
+import com.hshh.indicator.service.IndicatorBottomCsvMapperService;
+import com.hshh.indicator.service.IndicatorBottomFormMapperService;
+import com.hshh.indicator.service.IndicatorCsvColumnService;
+import com.hshh.indicator.service.IndicatorCsvService;
+import com.hshh.indicator.service.IndicatorFromMapperService;
import com.hshh.indicator.service.IndicatorService;
+import com.hshh.model.entity.FormFieldConfig;
import com.hshh.model.entity.ModelDefine;
+import com.hshh.model.service.FormFieldConfigService;
import com.hshh.model.service.ModelDefineService;
import com.hshh.system.common.bean.BaseController;
+import com.hshh.system.common.bean.CheckedBean;
import com.hshh.system.common.bean.OperateResult;
import com.hshh.system.common.enums.ErrorCode;
import com.hshh.system.common.enums.ErrorMessage;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
@@ -23,7 +39,9 @@ import org.springframework.web.bind.annotation.PathVariable;
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.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
/**
* 指标接口服务接口.
@@ -37,20 +55,46 @@ import org.springframework.web.bind.annotation.ResponseBody;
public class IndicatorController extends BaseController {
/**
- * 指标服务类.
+ * 指标服务类. 查询所有指标列表
*/
@Resource
private IndicatorService indicatorService;
/**
- * 模型定义服务类.
+ * 模型定义服务类. 查询所有表单
*/
@Resource
private ModelDefineService modelDefineService;
/**
- * 评价集服务类.
+ * 顶级指标对应的form和csv记录服务.
*/
@Resource
- private IndicatorEvalItemService indicatorEvalItemService;
+ private IndicatorFromMapperService indicatorTopMapperService;
+ /**
+ * 表单中字段服务类.
+ */
+ @Resource
+ private FormFieldConfigService formFieldConfigService;
+ /**
+ * 顶级指标和csv的对应服务类.
+ */
+ @Resource
+ private IndicatorCsvService indicatorCsvService;
+
+ /**
+ * 指标csv列服务.
+ */
+ @Resource
+ private IndicatorCsvColumnService indicatorCsvColumnService;
+ /**
+ * 底部指标和表单的的对应服务类.
+ */
+ @Resource
+ private IndicatorBottomFormMapperService bottomFormMapperService;
+ /**
+ * 底部指标和csv的对应关系.
+ */
+ @Resource
+ private IndicatorBottomCsvMapperService bottomCsvMapperService;
/**
* 导航到列表页面. 获取所有的root指标,显示到页面左侧.
@@ -61,6 +105,7 @@ public class IndicatorController extends BaseController {
*/
@RequestMapping("/list")
public String list(Model model, Indicator indicator) {
+ setNavigateTitle(model, "/indicator/list");
List rootList = indicatorService.queryRootList();
if (rootList != null && !rootList.isEmpty()) {
if (indicator.getId() != null) {
@@ -179,6 +224,7 @@ public class IndicatorController extends BaseController {
*/
@GetMapping("/evaluationList")
public String evaluationList(Integer topIndicatorId, Integer indicatorId, Model model) {
+ setNavigateTitle(model, "/indicator/evaluationList");
List rootList = indicatorService.queryRootList();
if (rootList != null && !rootList.isEmpty()) {
if (topIndicatorId != null) {
@@ -227,16 +273,142 @@ public class IndicatorController extends BaseController {
}
/**
- * 保存评价集.
+ * 导航到mapper页面. 1. 顶级指标放入session . 2. 底层指标放入session容器. 3. form表单字段放入session容器 .
+ * 4.form表单列表放入session容器 5. csv对应session容器 6. csv字段session容器 7. 底部指标对应form字段session容器 8.
+ * 底部指标对应csv列session容器.
*
- * @param item
- * @param bindingResult
- * @return
+ * @param model session容器
+ * @param formId 表单ID
+ * @param csvId csvID
+ * @param indicatorTopId 指标顶级ID
+ * @return /indicator/mapper.html
*/
-// @PostMapping("/evalItem/save")
-// @ResponseBody
-// public OperateResult saveEval(@Valid @RequestBody IndicatorEvalItem item,
-// BindingResult bindingResult) {
-//
-// }
+
+ @GetMapping("/mapper")
+ public String mapper(Model model, final Integer indicatorTopId, final Integer formId,
+ final Integer csvId) {
+
+ setNavigateTitle(model, "/indicator/mapper"); //设置导航
+
+ List rootList = indicatorService.queryRootList(); //查询所有根指标
+ setChecked(rootList, indicatorTopId); //设置根指标的选中状态
+ model.addAttribute("rootList", rootList); // 1. 顶级指标放入session容器
+ model.addAttribute("childrenIndicator",
+ indicatorService.selectNoChildByTopId(indicatorTopId)); // 2. 底层指标放入session容器
+ //处理form表单
+ modelForm(model, indicatorTopId, formId); // 3. form表单字段放入session容器.4.form表单列表放入session容器
+ //处理csv file
+ csvFile(model, indicatorTopId); // 5. csv对应session容器 6. csv字段session容器
+
+ //放入底部指标和form表单字段对应关系到容器
+ List bottomList = bottomFormMapperService.queryListByIndicatorId(
+ indicatorTopId);
+ Map bottomFormMap = bottomList.stream()
+ .collect(Collectors.toMap(IndicatorBottomFormMapper::getFormFieldId, a -> a));
+ model.addAttribute("bottomFormMap", bottomFormMap); // 7. 底部指标对应form字段session容器
+
+ //放入底部指标和csv列对应关系到容器
+ List bottomCsvColumnList = bottomCsvMapperService.queryListByIndicatorTopId(
+ indicatorTopId);
+ Map bottomCsvColumnMap = bottomCsvColumnList.stream()
+ .collect(Collectors.toMap(IndicatorBottomCsvMapper::getCsvColumnId, a -> a));
+ model.addAttribute("bottomCsvColumnMap", bottomCsvColumnMap); // 8.底部指标对应csv列session容器
+
+ return "/indicator/mapper";
+ }
+
+ private void modelForm(Model model, final Integer indicatorTopId, Integer formId) {
+ //表单相关
+ List mapperList = indicatorTopMapperService.selectModelAndCsvNameByIndicator(
+ indicatorTopId); //查看form和顶指标映射关系
+ //查询form表单字段
+ if (formId != null) {
+
+ model.addAttribute("formFieldList",
+ formFieldConfigService.getFormFieldConfigByModelId(formId));//3.form表单字段放入session容器
+ } else if (!mapperList.isEmpty()) {
+ List formFieldList = formFieldConfigService.getFormFieldConfigByModelId(
+ mapperList.get(0).getIndicatorModelId());
+ model.addAttribute("formFieldList", formFieldList); //3.form表单字段放入session容器
+ }
+ List modelList = modelDefineService.list(); //查询所有form表单列表
+ setChecked(modelList, mapperList.isEmpty() ? null
+ : (formId != null ? formId : mapperList.get(0).getIndicatorModelId())); //设置form表单列表的选中状态
+ model.addAttribute("modelList", modelList); //4.所有form表单放入session容器
+ }
+
+ private void csvFile(Model model, final Integer id) {
+ IndicatorCsv csvMapper = indicatorCsvService.selectByIndicatorId(id); //5.csv对应放入session
+ model.addAttribute("csvMapper", csvMapper);
+ //查询csv列的列表
+ model.addAttribute("csvColumns",
+ indicatorCsvColumnService.listByIdOrderByColumn(csvMapper == null ? 0 : csvMapper.getId()));
+ }
+
+ /**
+ * 下载上一次的csv模板.
+ *
+ * @param id csv映射ID
+ * @param response 响应
+ * @throws IOException 异常
+ */
+ @GetMapping("/download/{id}")
+ public void downloadFile(@PathVariable Integer id, HttpServletResponse response)
+ throws IOException {
+ IndicatorCsv csvFile = indicatorCsvService.getById(id);
+
+ // 设置响应头
+ response.setContentType("text/csv; charset=UTF-8");
+ response.setHeader("Content-Disposition",
+ "attachment; filename=\"" + java.net.URLEncoder.encode(csvFile.getCsvName(),
+ StandardCharsets.UTF_8) + "\"");
+
+ // 写入文件流
+ try (OutputStream os = response.getOutputStream()) {
+ os.write(csvFile.getCsvData());
+ os.flush();
+ }
+ }
+
+ /**
+ * 上传csv文件.记录顶级指标和文件及表单id的映射关系,记录在表m_data_indicator_top_mapper.
+ *
+ * @param file 文件
+ * @param indicatorTopId 指标
+ * @param formId modelID
+ * @return 操作结果
+ */
+ @PostMapping("/uploadCsvAndSetTopMapper")
+ public OperateResult uploadCsvAndSetTopMapper(@RequestParam("file") MultipartFile file,
+ Integer indicatorTopId, Integer formId) {
+ indicatorService.saveIndicatorTopCsvMapper(indicatorTopId, formId, file);
+ return OperateResult.success();
+ }
+
+ /**
+ * 保存指标和form表单ID的映射关系.
+ *
+ * @param indicatorTopId 指标顶级ID
+ * @param formId 表单ID
+ * @return 操作结果
+ */
+ @PostMapping("/indicatorFormMapper")
+ public OperateResult saveIndicatorFormMapper(Integer indicatorTopId, Integer formId) {
+ indicatorTopMapperService.saveFormMapper(indicatorTopId, formId);
+ return OperateResult.success();
+ }
+
+ private void setChecked(List list, Integer id) {
+ if (list != null && !list.isEmpty()) {
+ if (id == null || id.equals(0)) {
+ list.get(0).setChecked(true);
+ return;
+ }
+ for (T bean : list) {
+ if (bean.getId().equals(id)) {
+ bean.setChecked(true);
+ }
+ }
+ }
+ }
}
diff --git a/manager-admin/src/main/java/com/hshh/indicator/controller/IndicatorEvalItemController.java b/manager-admin/src/main/java/com/hshh/indicator/controller/IndicatorEvalItemController.java
deleted file mode 100644
index 30f1217..0000000
--- a/manager-admin/src/main/java/com/hshh/indicator/controller/IndicatorEvalItemController.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.hshh.indicator.controller;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.stereotype.Controller;
-
-/**
- *
- * 指标规则表 前端控制器
- *
- *
- * @author liDongYu
- * @since 2025-08-04
- */
-@Controller
-@RequestMapping("/indicator/indicatorEvalItem")
-public class IndicatorEvalItemController {
-
-}
diff --git a/manager-admin/src/main/java/com/hshh/indicator/entity/Indicator.java b/manager-admin/src/main/java/com/hshh/indicator/entity/Indicator.java
index 64dc7ac..2b0401f 100644
--- a/manager-admin/src/main/java/com/hshh/indicator/entity/Indicator.java
+++ b/manager-admin/src/main/java/com/hshh/indicator/entity/Indicator.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.hshh.system.common.bean.CheckedBean;
import java.io.Serializable;
import java.util.List;
import javax.validation.constraints.NotBlank;
@@ -20,7 +21,7 @@ import lombok.Data;
*/
@TableName("m_data_indicator")
@Data
-public class Indicator implements Serializable {
+public class Indicator extends CheckedBean {
private static final long serialVersionUID = 1L;
@@ -39,9 +40,8 @@ public class Indicator implements Serializable {
private Integer topId; //顶级父ID
private Integer sortOrder;
- @TableField(exist = false)
- private boolean checked;
- private Integer modelId;
+
+
}
diff --git a/manager-admin/src/main/java/com/hshh/indicator/service/IndicatorService.java b/manager-admin/src/main/java/com/hshh/indicator/service/IndicatorService.java
index 1116e97..9a6535a 100644
--- a/manager-admin/src/main/java/com/hshh/indicator/service/IndicatorService.java
+++ b/manager-admin/src/main/java/com/hshh/indicator/service/IndicatorService.java
@@ -3,6 +3,7 @@ package com.hshh.indicator.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hshh.indicator.entity.Indicator;
import java.util.List;
+import org.springframework.web.multipart.MultipartFile;
/**
* 指标表 服务类.
@@ -53,4 +54,13 @@ public interface IndicatorService extends IService {
* @return 指标集
*/
List selectNoChildByTopId(Integer topId);
+
+ /**
+ * 保存顶级映射关系;记录对应的表单ID和csv信息.
+ *
+ * @param topId 顶级指标ID
+ * @param modelId 表单ID
+ * @param file csv文件
+ */
+ void saveIndicatorTopCsvMapper(Integer topId, Integer modelId, MultipartFile file);
}
diff --git a/manager-admin/src/main/java/com/hshh/indicator/service/impl/IndicatorServiceImpl.java b/manager-admin/src/main/java/com/hshh/indicator/service/impl/IndicatorServiceImpl.java
index 2365ddc..e4cf4f4 100644
--- a/manager-admin/src/main/java/com/hshh/indicator/service/impl/IndicatorServiceImpl.java
+++ b/manager-admin/src/main/java/com/hshh/indicator/service/impl/IndicatorServiceImpl.java
@@ -10,6 +10,8 @@ import java.util.Map;
import java.util.stream.Collectors;
import javax.validation.constraints.NotNull;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
/**
*
@@ -82,4 +84,19 @@ public class IndicatorServiceImpl extends ServiceImpl selectNoChildByTopId(Integer topId) {
return this.baseMapper.selectNoChildByTopId(topId);
}
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void saveIndicatorTopCsvMapper(Integer topId, Integer modelId, MultipartFile file) {
+ //删除表中m_data_indicator_csv原来topID对应记录
+
+
+ //添加m_data_indicator_csv记录
+
+ //删除m_data_indicator_csv_column 原topID对应的记录
+
+
+ //添加对应记录
+
+ }
}
diff --git a/manager-admin/src/main/java/com/hshh/model/controller/FormValueController.java b/manager-admin/src/main/java/com/hshh/model/controller/FormValueController.java
deleted file mode 100644
index 3f10a13..0000000
--- a/manager-admin/src/main/java/com/hshh/model/controller/FormValueController.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.hshh.model.controller;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.stereotype.Controller;
-
-/**
- *
- * 动态表单实际对象记录表 前端控制器
- *
- *
- * @author liDongYu
- * @since 2025-08-01
- */
-@Controller
-@RequestMapping("/model/formValue")
-public class FormValueController {
-
-}
diff --git a/manager-admin/src/main/java/com/hshh/model/controller/ModelDefineController.java b/manager-admin/src/main/java/com/hshh/model/controller/ModelDefineController.java
index 88e895d..269d6a5 100644
--- a/manager-admin/src/main/java/com/hshh/model/controller/ModelDefineController.java
+++ b/manager-admin/src/main/java/com/hshh/model/controller/ModelDefineController.java
@@ -82,6 +82,7 @@ public class ModelDefineController extends BaseController {
@Operation(summary = "导航到数据模型定义页面", description = "导航到数据模型定义页面")
@GetMapping("/list")
public String list(ModelDefine modelDefine, Model model) {
+ setNavigateTitle(model, "/model/list");
List modelList = modelDefineService.list();
List fieldList = new ArrayList<>();
if (modelList != null) {
diff --git a/manager-admin/src/main/java/com/hshh/model/entity/ModelDefine.java b/manager-admin/src/main/java/com/hshh/model/entity/ModelDefine.java
index ccaaaba..2f162aa 100644
--- a/manager-admin/src/main/java/com/hshh/model/entity/ModelDefine.java
+++ b/manager-admin/src/main/java/com/hshh/model/entity/ModelDefine.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.hshh.system.common.bean.CheckedBean;
import java.io.Serializable;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@@ -20,7 +21,7 @@ import lombok.Data;
*/
@TableName("m_data_model_define")
@Data
-public class ModelDefine implements Serializable {
+public class ModelDefine extends CheckedBean {
private static final long serialVersionUID = 1L;
@@ -37,8 +38,7 @@ public class ModelDefine implements Serializable {
private String modelName;
- @TableField(exist = false)
- private boolean checked;
+
private Integer sortOrder;
/**
* 每行显示几个字段.
diff --git a/manager-admin/src/main/java/com/hshh/model/service/impl/FormFieldConfigServiceImpl.java b/manager-admin/src/main/java/com/hshh/model/service/impl/FormFieldConfigServiceImpl.java
index 8df4d85..0b5ec72 100644
--- a/manager-admin/src/main/java/com/hshh/model/service/impl/FormFieldConfigServiceImpl.java
+++ b/manager-admin/src/main/java/com/hshh/model/service/impl/FormFieldConfigServiceImpl.java
@@ -23,6 +23,7 @@ public class FormFieldConfigServiceImpl extends
public List getFormFieldConfigByModelId(Integer modelId) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("data_model_id", modelId);
+ queryWrapper.orderByAsc("sort_order");
return this.list(queryWrapper);
}
diff --git a/manager-admin/src/main/resources/templates/data/list.html b/manager-admin/src/main/resources/templates/data/list.html
index 98c18ec..5386364 100644
--- a/manager-admin/src/main/resources/templates/data/list.html
+++ b/manager-admin/src/main/resources/templates/data/list.html
@@ -2,14 +2,7 @@
-
+
+
+
+
+
diff --git a/manager-admin/src/main/resources/templates/indicator/add_indicator.html b/manager-admin/src/main/resources/templates/indicator/add_indicator.html
index 5184c15..16aa86a 100644
--- a/manager-admin/src/main/resources/templates/indicator/add_indicator.html
+++ b/manager-admin/src/main/resources/templates/indicator/add_indicator.html
@@ -4,13 +4,7 @@
-
+
-
+
+
+
说明: 切换不同的指标可以设置当前指标子项的评价标准
diff --git a/manager-admin/src/main/resources/templates/indicator/list.html b/manager-admin/src/main/resources/templates/indicator/list.html
index 77f966b..5495cc2 100644
--- a/manager-admin/src/main/resources/templates/indicator/list.html
+++ b/manager-admin/src/main/resources/templates/indicator/list.html
@@ -128,14 +128,7 @@
-
+
diff --git a/manager-admin/src/main/resources/templates/indicator/mapper.html b/manager-admin/src/main/resources/templates/indicator/mapper.html
new file mode 100644
index 0000000..2d45f0c
--- /dev/null
+++ b/manager-admin/src/main/resources/templates/indicator/mapper.html
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
说明:选择子指标,对应表单字段或者CSV某列
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/manager-admin/src/main/resources/templates/model/list.html b/manager-admin/src/main/resources/templates/model/list.html
index 309143d..167719d 100644
--- a/manager-admin/src/main/resources/templates/model/list.html
+++ b/manager-admin/src/main/resources/templates/model/list.html
@@ -2,14 +2,7 @@
-
+
diff --git a/manager-admin/src/main/resources/templates/system/dict/list.html b/manager-admin/src/main/resources/templates/system/dict/list.html
index b3f6a04..99023e9 100644
--- a/manager-admin/src/main/resources/templates/system/dict/list.html
+++ b/manager-admin/src/main/resources/templates/system/dict/list.html
@@ -2,14 +2,7 @@
-
+
diff --git a/manager-admin/src/main/resources/templates/system/menu/list.html b/manager-admin/src/main/resources/templates/system/menu/list.html
index c279576..ad67f61 100644
--- a/manager-admin/src/main/resources/templates/system/menu/list.html
+++ b/manager-admin/src/main/resources/templates/system/menu/list.html
@@ -2,14 +2,7 @@