diff --git a/manager-admin/src/main/demo.html b/manager-admin/src/main/demo.html index 3148b76..24a1cfb 100644 --- a/manager-admin/src/main/demo.html +++ b/manager-admin/src/main/demo.html @@ -1,240 +1,205 @@ - + - AHP 两两比较矩阵(Tabler风格) - - + 指标设置 Demo + + + + - +
+ +
-
-
-

两两比较矩阵

+ +
+
+ +

选择指标 + 必填 +

- 选择“行 相对 列”的重要性(1=同等,3/5/7/9=逐级更重要) +
-
-
- - -
-
- -
- - - - CR: -- +
+
+ +
+
+ +
+
+ 选择后将影响下方所有设置。 +
+ +
+
+

评价集设置

+
+ +
+
+
+
+ +
+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + +
序号名称符号下限值符号上限值
尚未添加评价规则,点击右上角“增加评价”。
+
+
+
+
+
+ + +
+
- - diff --git a/manager-admin/src/main/java/com/hshh/evaluation/bean/DraftWeightData.java b/manager-admin/src/main/java/com/hshh/evaluation/bean/DraftWeightData.java new file mode 100644 index 0000000..b994301 --- /dev/null +++ b/manager-admin/src/main/java/com/hshh/evaluation/bean/DraftWeightData.java @@ -0,0 +1,39 @@ +package com.hshh.evaluation.bean; + +import java.util.List; +import java.util.Map; +import lombok.Data; + +/** + * 模板权重暂存数据. + * + * @author LiDongYU + * @since 2025/7/22 + */ +@Data +public class DraftWeightData { + + /** + * 页面定义的临时key. + */ + private String key; + /** + * 父指标ID. + */ + private Integer parentIndicationId; + /** + * 模板ID. + */ + private Integer templateId; + + /** + * 表头map linkedMap. key是指标id,value是 {id,name} + */ + private Map headerMap; + + /** + * 页面中指标表的权重信息设置.key 为fromIndicatorId+"_"+toIndicatorId. + */ + private List> weight; + +} diff --git a/manager-admin/src/main/java/com/hshh/evaluation/bean/DynamicTable.java b/manager-admin/src/main/java/com/hshh/evaluation/bean/DynamicTable.java new file mode 100644 index 0000000..db29f98 --- /dev/null +++ b/manager-admin/src/main/java/com/hshh/evaluation/bean/DynamicTable.java @@ -0,0 +1,24 @@ +package com.hshh.evaluation.bean; + +import java.util.List; +import java.util.Map; +import lombok.Data; + +/** + * 动态返回表格. + * + * @author LiDongYU + * @since 2025/7/22 + */ +@Data +public class DynamicTable { + + + /** + * 表头map linkedMap. + */ + private Map headerMap; + + + private List> weight; +} diff --git a/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricComputeRequest.java b/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricComputeRequest.java new file mode 100644 index 0000000..3619516 --- /dev/null +++ b/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricComputeRequest.java @@ -0,0 +1,18 @@ +package com.hshh.evaluation.bean; + +import java.util.List; +import lombok.Data; + +/** + * 计算指标的请求对象. + * + * @author LiDongYU + * @since 2025/7/22 + */ +@Data +public class MetricComputeRequest { + + private List metric; + private List> weightList; + +} diff --git a/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricComputerResponse.java b/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricComputerResponse.java new file mode 100644 index 0000000..4bcd1eb --- /dev/null +++ b/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricComputerResponse.java @@ -0,0 +1,16 @@ +package com.hshh.evaluation.bean; + +import lombok.Data; + +/** + * 指标计算后的结果. + * + * @author LiDongYU + * @since 2025/7/22 + */ +@Data +public class MetricComputerResponse { + + private String id; + private String weight; +} diff --git a/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricMapperWeightBean.java b/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricMapperWeightBean.java new file mode 100644 index 0000000..e623d1c --- /dev/null +++ b/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricMapperWeightBean.java @@ -0,0 +1,34 @@ +package com.hshh.evaluation.bean; + +import lombok.Data; + +/** + * 指标权重映射描述. + * + * @author LiDongYU + * @since 2025/7/22 + */ +@Data +public class MetricMapperWeightBean { + + /** + * 从那个指标开始. + */ + private int rowId; + /** + * 到那个指标. + */ + private int colId; + /** + * 权重. + */ + private String value; + /** + * 父指标ID. + */ + private int parentId; + /** + * 行号. + */ + private int rowNum; +} diff --git a/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricTableHeaderBean.java b/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricTableHeaderBean.java new file mode 100644 index 0000000..c60756b --- /dev/null +++ b/manager-admin/src/main/java/com/hshh/evaluation/bean/MetricTableHeaderBean.java @@ -0,0 +1,16 @@ +package com.hshh.evaluation.bean; + +import lombok.Data; + +/** + * 指标动态表头. + * + * @author LiDongYU + * @since 2025/7/22 + */ +@Data +public class MetricTableHeaderBean { + + private int id; + private String name; +} diff --git a/manager-admin/src/main/java/com/hshh/evaluation/controller/AssistantTemplateController.java b/manager-admin/src/main/java/com/hshh/evaluation/controller/AssistantTemplateController.java new file mode 100644 index 0000000..5b183c1 --- /dev/null +++ b/manager-admin/src/main/java/com/hshh/evaluation/controller/AssistantTemplateController.java @@ -0,0 +1,124 @@ +package com.hshh.evaluation.controller; + +import com.hshh.evaluation.bean.DraftWeightData; +import com.hshh.evaluation.bean.MetricMapperWeightBean; +import com.hshh.evaluation.entity.EvaluationTemplate; +import com.hshh.evaluation.entity.EvaluationTemplateWeight; +import com.hshh.indicator.entity.Indicator; +import com.hshh.system.common.bean.BaseController; +import com.hshh.system.common.util.DraftStore; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * 评估模板类辅助方法. + * + * @author LiDongYU + * @since 2025/7/22 + */ +public class AssistantTemplateController extends BaseController { + + /** + * 转化指标权重列表到double二维数组. + * + * @param weightList 指标权重列表 + * @return list string数组 + */ + protected List convertMetricMapperWeightBeanListToStrArray( + List> weightList) { + + List data = new ArrayList<>(); + weightList.forEach(weight -> { + String[] strArr = new String[weight.size()]; + data.add(strArr); + for (int i = 0; i < weight.size(); i++) { + strArr[i] = weight.get(i).getValue(); + } + }); + return data; + } + + /** + * 组装历史权重数据. + * + * @param evaluationTemplate 当前模板数据 + * @return 评估数据列表 + */ + @SuppressWarnings("unchecked") + protected Map unitWeightMap( + EvaluationTemplate evaluationTemplate) { + + // 获取缓存中的数据 + Map cacheData = DraftStore.get(evaluationTemplate.getDraftKey(), + Map.class); + if (cacheData == null) { + if (evaluationTemplate.getCurrentPagePartData() != null) { + + Map defaultMap = new LinkedHashMap<>(); + DraftWeightData weightData = createDefaultDraftWeightData(evaluationTemplate); + defaultMap.put(weightData.getParentIndicationId(), weightData); + return defaultMap; + } + + } + + //cacheData数据结构 父ID-->当前id下子指标的权重信息 + //查看当前页面上传的最后一次指标权重信息;用当前页面的数据更新缓存或者增加缓存 + if (evaluationTemplate.getCurrentPagePartData() != null) { + + int parentId = evaluationTemplate.getCurrentPagePartData().get(0).get(0).getParentId(); + cacheData.remove(parentId); + //构建一个简易的只包含实际当前表格中的数据的暂存对象类,供后面合并 + DraftWeightData draftWeightData = createDefaultDraftWeightData(evaluationTemplate); + + cacheData.put(parentId, draftWeightData); + } + + return cacheData; + } + + private DraftWeightData createDefaultDraftWeightData(EvaluationTemplate evaluationTemplate) { + int pid = evaluationTemplate.getCurrentPagePartData().get(0).get(0).getParentId(); + DraftWeightData draftWeightData = new DraftWeightData(); + draftWeightData.setTemplateId(evaluationTemplate.getId()); + draftWeightData.setWeight(evaluationTemplate.getCurrentPagePartData()); + draftWeightData.setParentIndicationId(pid); + draftWeightData.setKey(evaluationTemplate.getDraftKey()); + return draftWeightData; + } + + + /** + * 当一个指标下面只有一个孩子时,填充默认权重1. + * + * @param lonelyChild 只有自己,没有其他节点和他同级 + * @param unitWeightDataMap 当前已经设置的权重信息. + */ + + protected void paddingDefaultValueWhenParentHasOnlyLonelyChild(List lonelyChild, + Map unitWeightDataMap) { + for (Indicator indicator : lonelyChild) { + if (!unitWeightDataMap.containsKey(indicator.getParentId())) { + List> singleRowList = new ArrayList<>(); + List list = new ArrayList<>(); + MetricMapperWeightBean weightBean = new MetricMapperWeightBean(); + list.add(weightBean); + singleRowList.add(list); + weightBean.setParentId(indicator.getParentId()); + weightBean.setValue("1"); + weightBean.setRowId(indicator.getId()); + weightBean.setColId(indicator.getId()); + weightBean.setRowNum(1); + DraftWeightData draftWeightData = new DraftWeightData(); + draftWeightData.setParentIndicationId(indicator.getParentId()); + draftWeightData.setWeight(singleRowList); + ; + unitWeightDataMap.put(indicator.getParentId(), draftWeightData); + } + } + } + + +} diff --git a/manager-admin/src/main/java/com/hshh/evaluation/controller/EvaluationProjectController.java b/manager-admin/src/main/java/com/hshh/evaluation/controller/EvaluationProjectController.java index 83f18a4..a1c1a6e 100644 --- a/manager-admin/src/main/java/com/hshh/evaluation/controller/EvaluationProjectController.java +++ b/manager-admin/src/main/java/com/hshh/evaluation/controller/EvaluationProjectController.java @@ -1,11 +1,12 @@ package com.hshh.evaluation.controller; import com.hshh.evaluation.entity.EvaluationProject; +import com.hshh.evaluation.entity.EvaluationTemplate; import com.hshh.evaluation.service.EvaluationProjectService; -import com.hshh.indicator.entity.Indicator; -import com.hshh.indicator.service.IndicatorService; +import com.hshh.evaluation.service.EvaluationTemplateService; +import com.hshh.system.base.entity.TableRelations; +import com.hshh.system.base.service.TableRelationsService; import com.hshh.system.common.bean.BaseController; -import com.hshh.system.common.bean.JsTree; import com.hshh.system.common.bean.OperateResult; import com.hshh.system.common.bean.PaginationBean; import com.hshh.system.common.enums.ErrorCode; @@ -37,8 +38,16 @@ public class EvaluationProjectController extends BaseController { @Resource private EvaluationProjectService evaluationProjectService; + /** + * 模板服务类. + */ @Resource - private IndicatorService indicatorService; + private EvaluationTemplateService evaluationTemplateService; + /** + * 数据库引用关系记录服务类. + */ + @Resource + private TableRelationsService tableRelationsService; /** * 默认页. @@ -53,7 +62,7 @@ public class EvaluationProjectController extends BaseController { Long total = evaluationProjectService.count(request); //设置分页信息 setPaginationInfo(request, list, total, model); - return "evaluation/list"; + return "project/list"; } /** @@ -64,9 +73,9 @@ public class EvaluationProjectController extends BaseController { */ @GetMapping("/add") public String add(Model model) { - List rootList = indicatorService.queryRootList(); + List rootList = evaluationTemplateService.list(); model.addAttribute("rootList", rootList); - return "evaluation/add"; + return "project/add"; } /** @@ -83,58 +92,42 @@ public class EvaluationProjectController extends BaseController { if (bindingResult.hasErrors()) { return errorsInputHandle(bindingResult); } + //查询是否有重名的 List projectList = evaluationProjectService.queryListByName( project.getProjectName()); - if (project.getId() == null) { - if (!projectList.isEmpty()) { + + if (!projectList.isEmpty()) { + if (!projectList.get(0).getId().equals(project.getId())) { return OperateResult.error(null, ErrorMessage.NAME_OR_CODE_EXIT.getMessage(), ErrorCode.BUSINESS_ERROR.getCode()); } - project.setCreateDate(LocalDateTime.now()); - evaluationProjectService.save(project); - } else { - if (!projectList.isEmpty()) { - if (!project.getId().equals(projectList.get(0).getId())) { - return OperateResult.error(null, ErrorMessage.NAME_OR_CODE_EXIT.getMessage(), - ErrorCode.BUSINESS_ERROR.getCode()); - } - evaluationProjectService.updateById(project); - } } + //设置创建时间 + if (project.getId() == null) { + project.setCreateDate(LocalDateTime.now()); + } + evaluationProjectService.saveWhole(project); + return OperateResult.success(); } /** - * 开始评估页面. + * 删除工程接口. * - * @return 开始评估页面 + * @param id 要删除的ID + * @return 操作结果 */ - @GetMapping("/startEvaluation/{id}") - public String startEvaluation(@PathVariable("id") Integer projectId, Model model) { - - EvaluationProject project = evaluationProjectService.getById(projectId); - - List children = indicatorService.queryChildren(project.getIndicatorTopId()); - model.addAttribute("children", children); - return "evaluation/start_weight_evaluation"; - } - - /** - * 获取指标树. - * - * @param projectId 项目ID - * @return 指标树 - */ - @GetMapping("/metricTree/{id}") @ResponseBody - public OperateResult> metricTree(@PathVariable("id") Integer projectId) { - EvaluationProject project = evaluationProjectService.getById(projectId); - if (project == null) { - return OperateResult.error(null, ErrorMessage.ID_NOT_EXIT.getMessage(), + @GetMapping("/remove/{id}") + public OperateResult remove(@PathVariable("id") Integer id) { + List reList = tableRelationsService.queryRel(id, + "m_data_evaluation_project"); + if (!reList.isEmpty()) { + return OperateResult.error(null, ErrorMessage.OBJ_ALREADY_TAKEN.getMessage(), ErrorCode.BUSINESS_ERROR.getCode()); } - - return OperateResult.success(indicatorService.metricTree(project.getIndicatorTopId()) - ); + evaluationProjectService.removeById(id); + return OperateResult.success(); } + } diff --git a/manager-admin/src/main/java/com/hshh/evaluation/controller/EvaluationTemplateController.java b/manager-admin/src/main/java/com/hshh/evaluation/controller/EvaluationTemplateController.java index a3d9851..86d8605 100644 --- a/manager-admin/src/main/java/com/hshh/evaluation/controller/EvaluationTemplateController.java +++ b/manager-admin/src/main/java/com/hshh/evaluation/controller/EvaluationTemplateController.java @@ -1,16 +1,48 @@ package com.hshh.evaluation.controller; +import com.hshh.evaluation.bean.DraftWeightData; +import com.hshh.evaluation.bean.DynamicTable; +import com.hshh.evaluation.bean.MetricComputeRequest; +import com.hshh.evaluation.bean.MetricComputerResponse; +import com.hshh.evaluation.bean.MetricMapperWeightBean; +import com.hshh.evaluation.bean.MetricTableHeaderBean; import com.hshh.evaluation.entity.EvaluationTemplate; +import com.hshh.evaluation.entity.EvaluationTemplateWeight; import com.hshh.evaluation.service.EvaluationTemplateService; -import com.hshh.system.common.bean.BaseController; +import com.hshh.evaluation.service.EvaluationTemplateWeightService; +import com.hshh.indicator.entity.Indicator; +import com.hshh.indicator.service.IndicatorService; +import com.hshh.system.base.entity.TableRelations; +import com.hshh.system.base.service.TableRelationsService; +import com.hshh.system.common.Strings.StringOperationUtil; +import com.hshh.system.common.algorithm.AhpNode; +import com.hshh.system.common.algorithm.AhpTreeCompute; +import com.hshh.system.common.bean.JsTree; +import com.hshh.system.common.bean.OperateResult; import com.hshh.system.common.bean.PaginationBean; +import com.hshh.system.common.enums.ErrorCode; +import com.hshh.system.common.enums.ErrorMessage; +import com.hshh.system.common.util.DraftStore; import io.swagger.v3.oas.annotations.Operation; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import javax.annotation.Resource; +import javax.validation.Valid; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; +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.ResponseBody; /** * 评估工程模板表 前端控制器. @@ -20,11 +52,33 @@ import org.springframework.web.bind.annotation.RequestMapping; */ @Controller @RequestMapping("/evaluation/evaluationTemplate") -public class EvaluationTemplateController extends BaseController { +@Slf4j +public class EvaluationTemplateController extends AssistantTemplateController { + /** + * 模板服务类. + */ @Resource private EvaluationTemplateService evaluationTemplateService; + /** + * 指标服务类. + */ + @Resource + private IndicatorService indicatorService; + + /** + * 数据库引用关系记录服务类. + */ + @Resource + private TableRelationsService tableRelationsService; + + /** + * 权重服务类. + */ + @Resource + private EvaluationTemplateWeightService evaluationTemplateWeightService; + /** * 默认页. * @@ -35,9 +89,393 @@ public class EvaluationTemplateController extends BaseController { public String list(PaginationBean request, Model model) { setNavigateTitle(model, "/evaluation/evaluationTemplate/"); List list = evaluationTemplateService.list(request); + Long total = evaluationTemplateService.count(request); //设置分页信息 setPaginationInfo(request, list, total, model); - return "evaluation_template/list"; + return "project_template/list"; + } + + /** + * 导航到增加页面. + * + * @param model session容器 + */ + @GetMapping("/add") + public String add(Model model) { + List rootList = indicatorService.queryRootList(); + model.addAttribute("rootList", rootList); + return "project_template/add"; + } + + /** + * 获取指标树. + * + * @param id 项目ID + * @return 指标树 + */ + @GetMapping("/metricTree/{id}") + @ResponseBody + public OperateResult> metricTree(@PathVariable("id") Integer id, Model model) { + + return OperateResult.success(indicatorService.metricTree(id)); + } + + + /** + * 保存模板. 必须设置指标;设置完成权重,才成成功提交 + * + * @param evaluationTemplate 模板数据 + * @param bindingResult 验证的错误信息 + * @return 操作结果 + */ + @ResponseBody + @PostMapping("/save") + public OperateResult save(@Valid @RequestBody EvaluationTemplate evaluationTemplate, + BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + return errorsInputHandle(bindingResult); + } + //查询是否有重名 + List list = evaluationTemplateService.queryByName( + evaluationTemplate.getTemplateName()); + if (!list.isEmpty()) { + if (!list.get(0).getId().equals(evaluationTemplate.getId())) { + return OperateResult.error(null, ErrorMessage.NAME_OR_CODE_EXIT.getMessage(), + ErrorCode.BUSINESS_ERROR.getCode()); + } + } + //设置 + if (evaluationTemplate.getId() == null) { + evaluationTemplate.setCreateTime(LocalDateTime.now()); + + } + + //1.合并权重数据 + Map unitWeightDataMap = unitWeightMap(evaluationTemplate); + + //2.填充数据;如果一个指标下面只有一个孩子,则默认填充为1 + List lonelyChild = indicatorService.queryLonelyChild( + evaluationTemplate.getIndicatorTopId()); + + paddingDefaultValueWhenParentHasOnlyLonelyChild(lonelyChild, unitWeightDataMap); + + //3.开始验证完整性/一致性 + String validateWholeMessage = validate(evaluationTemplate.getIndicatorTopId(), + unitWeightDataMap); + if (!validateWholeMessage.isEmpty()) { + return OperateResult.error(null, validateWholeMessage, ErrorCode.BUSINESS_ERROR.getCode()); + } + //4. 提交 + evaluationTemplateService.saveWhole(evaluationTemplate, unitWeightDataMap); + return OperateResult.success(); + } + + /** + * 根据id删除指标. + * + * @param id 要删除的ID + * @return 操作结果 + */ + @GetMapping("/remove/{id}") + @ResponseBody + public OperateResult remove(@PathVariable("id") Integer id) { + List reledList = tableRelationsService.queryRel(id, + "m_data_evaluation_template"); + if (!reledList.isEmpty()) { + return OperateResult.error(null, ErrorMessage.OBJ_ALREADY_TAKEN.getMessage(), + ErrorCode.BUSINESS_ERROR.getCode()); + } + evaluationTemplateService.deleteTemplate(evaluationTemplateService.getById(id)); + return OperateResult.success(); + } + + /** + * 获取模板基础信息. + * + * @param id 模板ID + * @return 模板数据 + */ + @GetMapping("/{id}") + @ResponseBody + public OperateResult view(@PathVariable("id") Integer id) { + EvaluationTemplate template = evaluationTemplateService.getById(id); + if (template == null) { + return OperateResult.error(null, ErrorMessage.ID_NOT_EXIT.getMessage(), + ErrorCode.BUSINESS_ERROR.getCode()); + } + return OperateResult.success(template); + } + + /** + * 暂存权重数据. + * + * @param data 权重数据 页面传入的权重map数据key为rowId_colId(from指标id_to指标ID) + * value为{rowId:a,colId:b,value:0.1}类似 + * @return 操作结果 + */ + @PostMapping("/receiveDraft") + @ResponseBody + @SuppressWarnings("unchecked") + public synchronized OperateResult receiveDraft(@RequestBody DraftWeightData data) { + log.info("receive draft data: pId= {}", data.getParentIndicationId()); + //根据key获取已经缓存的信息 + Map dataMap = DraftStore.get(data.getKey(), Map.class); + //如果缓存不存在 + if (dataMap == null) { + dataMap = new HashMap<>(); + } + //key为上级指标 + dataMap.put(data.getParentIndicationId(), data); + //更新缓存 + DraftStore.put(data.getKey(), dataMap); + return OperateResult.success(); + } + + /** + * 获取暂存数据. + * + * @param requestData 请求数据. + * @return 表格和数据 + */ + @SuppressWarnings("unchecked") + @PostMapping("/getDraftData") + public synchronized String getDraftData(@RequestBody DraftWeightData requestData, Model model) { + //查看key 是否有缓存记录 + Map cacheData = DraftStore.get(requestData.getKey(), Map.class); + //如果没有记录 + if (cacheData == null) { //从数据库中获取 + model.addAttribute("data", createNewDynamicFromDatabase(requestData)); + return "project_template/table"; + } + //如果有记录查看对应的指标是否有记录 + Object cacheWeightObj = cacheData.get(requestData.getParentIndicationId()); + //如果对应指标没有记录 + if (cacheWeightObj == null) { //从数据库读取 + model.addAttribute("data", createNewDynamicFromDatabase(requestData)); + return "project_template/table"; + } + DraftWeightData data = (DraftWeightData) cacheWeightObj; + + model.addAttribute("data", createDynamicFromCache(data)); + return "project_template/table"; + + } + + /** + * 从数据库创建动态表. + * + * @param requestData 用户请求数据 + * @return 动态表 + */ + private DynamicTable createNewDynamicFromDatabase(DraftWeightData requestData) { + DynamicTable dynamicTable = new DynamicTable(); + //查询当前指标的子指标 + List children = indicatorService.queryChildren(requestData.getParentIndicationId()); + //获取指标权重信息 + List weightInDbList = evaluationTemplateWeightService.queryListByIndicatorParentIdAndTemplateId( + requestData.getParentIndicationId(), requestData.getTemplateId()); + //转化为key=fromId+"_"+toId,value=self + Map weightInMap = weightInDbList.stream() + .collect( + Collectors.toMap(a -> a.getFromIndicatorId() + "_" + a.getToIndicatorId(), a -> a)); + //设置头信息 + dynamicTable.setHeaderMap(createTableHeaderMap(children)); + + //设置权重信息 + List> weight = new ArrayList<>(); + for (int i = 0; i < children.size(); i++) { + List innerList = createEmptyMapperList(requestData, children, i, + weightInMap); + weight.add(innerList); + } + + dynamicTable.setWeight(weight); + return dynamicTable; + } + + /** + * 创建表格头. + * + * @param children 子指标 + * @return 表格头信息 + */ + private Map createTableHeaderMap(List children) { + List headerBeans = new ArrayList<>(); + children.forEach(a -> { + MetricTableHeaderBean bean = new MetricTableHeaderBean(); + bean.setId(a.getId()); + bean.setName(a.getName()); + headerBeans.add(bean); + }); + Map headerMap = new LinkedHashMap<>(); + headerBeans.forEach(header -> { + headerMap.put(header.getId(), header); + }); + return headerMap; + } + + /** + * 从数据库创建一个空的默认映射列表. + * + * @param requestData 请求数据 + * @param children 子指标 + * @param i 行号 + * @return 默认映射列表 + */ + private static List createEmptyMapperList(DraftWeightData requestData, + List children, int i, Map weightInMap) { + List innerList = new ArrayList<>(); + for (Indicator child : children) { + MetricMapperWeightBean weightBean = new MetricMapperWeightBean(); + //行ID + weightBean.setRowId(children.get(i).getId()); + //列Id + weightBean.setColId(child.getId()); + EvaluationTemplateWeight evaluationTemplateWeight = weightInMap.get( + weightBean.getRowId() + "_" + weightBean.getColId()); + //初始默认为1 + weightBean.setValue( + evaluationTemplateWeight == null ? "1" : evaluationTemplateWeight.getWeight() + ""); + + weightBean.setRowNum(evaluationTemplateWeight == null ? (i + 1) + : evaluationTemplateWeight.getRowNum()); + weightBean.setParentId(requestData.getParentIndicationId()); + innerList.add(weightBean); + } + return innerList; + } + + /** + * 从缓存中创建动态表. + * + * @param data 缓存数据 + * @return 动态表 + */ + protected DynamicTable createDynamicFromCache(DraftWeightData data) { + DynamicTable dynamicTable = new DynamicTable(); + dynamicTable.setHeaderMap(data.getHeaderMap()); + dynamicTable.setWeight(data.getWeight()); + return dynamicTable; + } + + /** + * 计算指标,当设置变化时触发. + * + * @param requests 计算请求,包含 指标id,当前表格数据 + * @return 计算结果 + */ + @PostMapping("/computer") + @ResponseBody + public synchronized OperateResult> computerWeight( + @RequestBody MetricComputeRequest requests) { + //如果没有值,直接静默返回 + if (requests.getWeightList() == null || requests.getWeightList().isEmpty()) { + return OperateResult.success(); + } + final List responseList = new ArrayList<>(); + + List metricList = requests.getMetric(); + final AhpNode H = new AhpNode("H"); + metricList.forEach(metric -> { + AhpNode m = new AhpNode(metric); + H.add(m); + }); + List> weightList = requests.getWeightList(); + + double[][] data = StringOperationUtil.toDoubleArray( + convertMetricMapperWeightBeanListToStrArray(weightList)); + H.setLocalMatrix(data); + H.globalWeight = 1; // 根节点全局权重=1 + AhpTreeCompute.computeTree(H); + H.children.forEach(child -> { + MetricComputerResponse response = new MetricComputerResponse(); + response.setId(child.name); + response.setWeight(String.format("%.2f", child.globalWeight)); + responseList.add(response); + }); + return OperateResult.success(responseList); + } + + /** + * 验证指标权重完整性/一致性. + * + * @param indicatorTopId 指标顶级ID + * @param weightByParentIdMap 已经设置的权重Map + * @return 验证提示结果 + */ + private String validate(Integer indicatorTopId, + Map weightByParentIdMap) { + //所有topId=indicatorTopId列表 + List list = indicatorService.queryByTopId(indicatorTopId); + // key=指标ID value=指标数据 + Map indicatorMap = list.stream() + .collect(Collectors.toMap(Indicator::getId, a -> a)); + Map> parentMap = list.stream().filter(a -> a.getParentId() != null) + .collect(Collectors.groupingBy(Indicator::getParentId)); + StringBuffer sb = new StringBuffer(); + parentMap.forEach((indicatorId, children) -> { + //完整性 + if (!weightByParentIdMap.containsKey(indicatorId)) { + String indicatorName = + indicatorMap.get(indicatorId) == null ? "" : indicatorMap.get(indicatorId).getName(); + sb.append(indicatorName).append("没有设置权重
\n"); + } + if (weightByParentIdMap.get(indicatorId) != null) { + //一致性 + List> childWeightList = weightByParentIdMap.get(indicatorId) + .getWeight(); + consistencyValidate(sb, childWeightList, indicatorMap); + } + + }); + + return sb.toString(); + } + + /** + * 验证一致性. 假设有三个指标 A,B,C A--AA AB,AC |B--BB BA BC| C--CC CA CB. + * + * @param sb 提示消息 + * @param childWeightList 要验证的数据 + * @param indicatorMap 指标map key=id value=指标 + */ + private void consistencyValidate(StringBuffer sb, + List> childWeightList, Map indicatorMap) { + if (childWeightList != null && childWeightList.size() > 1) { + //获取第一行记录作为标准 + List firstRow = childWeightList.get(0); + //获取A指标ID + Integer firstFormIndicatorId = firstRow.get(0).getRowId(); + //把第一行的数据,用rowId+"_+colId作为键,value为值 + Map firstRowMap = new HashMap<>(); + + firstRow.forEach(child -> { + firstRowMap.put(child.getRowId() + "_" + child.getColId(), + Double.parseDouble(child.getValue())); + }); + for (int i = 1; i < childWeightList.size(); i++) { + List weightBeanList = childWeightList.get(i); + for (int j = 1; j < weightBeanList.size(); j++) { + //获取第一行她的from指标值 AB + Double abValue = firstRowMap.get( + firstFormIndicatorId + "_" + weightBeanList.get(j).getRowId()); + //获取AC + Double acValue = firstRowMap.get( + firstFormIndicatorId + "_" + weightBeanList.get(j).getColId()); + //获取BC + double bcValue = Double.parseDouble(weightBeanList.get(j).getValue()); + if (bcValue > 1 && acValue.compareTo(abValue) > 0) { + sb.append(indicatorMap.get(weightBeanList.get(j).getRowId())).append("必须小于1") + .append("
\n"); + } + if (bcValue < 1 && acValue.compareTo(abValue) < 0) { + sb.append(indicatorMap.get(weightBeanList.get(j).getRowId())).append("必须大于1") + .append("
\n"); + } + + } + } + } } } diff --git a/manager-admin/src/main/java/com/hshh/evaluation/entity/EvaluationProject.java b/manager-admin/src/main/java/com/hshh/evaluation/entity/EvaluationProject.java index a7ce6c1..93ac3de 100644 --- a/manager-admin/src/main/java/com/hshh/evaluation/entity/EvaluationProject.java +++ b/manager-admin/src/main/java/com/hshh/evaluation/entity/EvaluationProject.java @@ -35,10 +35,10 @@ public class EvaluationProject extends BaseBean { private String projectMemo; - private Integer indicatorTopId; + private Integer templateId; @TableField(exist = false) - private String indicatorTopName; + private String templateName; private LocalDateTime createDate; } diff --git a/manager-admin/src/main/java/com/hshh/evaluation/entity/EvaluationTemplate.java b/manager-admin/src/main/java/com/hshh/evaluation/entity/EvaluationTemplate.java index 21ef3cb..eabe1da 100644 --- a/manager-admin/src/main/java/com/hshh/evaluation/entity/EvaluationTemplate.java +++ b/manager-admin/src/main/java/com/hshh/evaluation/entity/EvaluationTemplate.java @@ -4,8 +4,13 @@ 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.evaluation.bean.MetricMapperWeightBean; import com.hshh.system.common.bean.BaseBean; import java.time.LocalDateTime; +import java.util.List; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; import lombok.Data; /** @@ -22,19 +27,19 @@ public class EvaluationTemplate extends BaseBean { @TableId(value = "id", type = IdType.AUTO) private Integer id; - + @NotBlank(message = "模板名称不能为空") + @Size(max = 50, message = "不能超过50字符") private String templateName; - + //顶级指标ID + @NotNull(message = "必须选择指标") private Integer indicatorTopId; - private Integer indicatorWeightId; - - + //模板状态 private Integer templateStatus; - + @Size(max = 255, message = "不能超过255字符") private String templateMemo; private LocalDateTime createTime; @@ -42,4 +47,12 @@ public class EvaluationTemplate extends BaseBean { private String indicatorTopName; @TableField(exist = false) private String templateStatusName; + //提交时,当前页面对应的指标id,其余指标从缓存取 + @TableField(exist = false) + private List> currentPagePartData; + //暂存指标权重的key + @TableField(exist = false) + private String draftKey; + + } diff --git a/manager-admin/src/main/java/com/hshh/evaluation/service/EvaluationProjectService.java b/manager-admin/src/main/java/com/hshh/evaluation/service/EvaluationProjectService.java index dbaf578..f5a06e9 100644 --- a/manager-admin/src/main/java/com/hshh/evaluation/service/EvaluationProjectService.java +++ b/manager-admin/src/main/java/com/hshh/evaluation/service/EvaluationProjectService.java @@ -36,4 +36,11 @@ public interface EvaluationProjectService extends IService { * @return 查询结果 */ List queryListByName(String name); + + /** + * 保存工程信息. + * + * @param evaluationProject 工程数据 + */ + void saveWhole(EvaluationProject evaluationProject); } diff --git a/manager-admin/src/main/java/com/hshh/evaluation/service/EvaluationTemplateService.java b/manager-admin/src/main/java/com/hshh/evaluation/service/EvaluationTemplateService.java index 4193315..20c3e47 100644 --- a/manager-admin/src/main/java/com/hshh/evaluation/service/EvaluationTemplateService.java +++ b/manager-admin/src/main/java/com/hshh/evaluation/service/EvaluationTemplateService.java @@ -1,9 +1,12 @@ package com.hshh.evaluation.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.hshh.evaluation.bean.DraftWeightData; +import com.hshh.evaluation.bean.MetricMapperWeightBean; import com.hshh.evaluation.entity.EvaluationTemplate; import com.hshh.system.common.bean.PaginationBean; import java.util.List; +import java.util.Map; /** * 评估工程模板表 服务类. @@ -28,4 +31,22 @@ public interface EvaluationTemplateService extends IService * @return 总数 */ Long count(PaginationBean search); + + /** + * 保存评估模板数据. + * + * @param evaluationTemplate 评估模板 + * @param weightData 权重 + */ + void saveWhole(EvaluationTemplate evaluationTemplate, + Map weightData); + + /** + * 根据名称查询列表. + * + * @param name 名称 + * @return 模板列表 + */ + List queryByName(String name); + void deleteTemplate(EvaluationTemplate evaluationTemplate); } diff --git a/manager-admin/src/main/java/com/hshh/evaluation/service/impl/EvaluationProjectServiceImpl.java b/manager-admin/src/main/java/com/hshh/evaluation/service/impl/EvaluationProjectServiceImpl.java index db1e801..7383f1c 100644 --- a/manager-admin/src/main/java/com/hshh/evaluation/service/impl/EvaluationProjectServiceImpl.java +++ b/manager-admin/src/main/java/com/hshh/evaluation/service/impl/EvaluationProjectServiceImpl.java @@ -5,9 +5,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hshh.evaluation.entity.EvaluationProject; import com.hshh.evaluation.mapper.EvaluationProjectMapper; import com.hshh.evaluation.service.EvaluationProjectService; +import com.hshh.system.base.service.TableRelationsService; import com.hshh.system.common.bean.PaginationBean; +import java.util.ArrayList; import java.util.List; +import javax.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * 服务实现类. @@ -20,6 +24,12 @@ public class EvaluationProjectServiceImpl extends ServiceImpl implements EvaluationProjectService { + /** + * 数据库引用关系记录服务类. + */ + @Resource + private TableRelationsService tableRelationsService; + @Override public List list(PaginationBean paginationBean) { return this.baseMapper.list(paginationBean); @@ -37,4 +47,15 @@ public class EvaluationProjectServiceImpl extends return this.list(queryWrapper); } + @Override + @Transactional(rollbackFor = Exception.class) + public void saveWhole(EvaluationProject evaluationProject) { + this.saveOrUpdate(evaluationProject); + tableRelationsService.removeRel(evaluationProject.getId(), "m_data_evaluation_project", + "m_data_evaluation_template"); + List relList = new ArrayList<>(); + relList.add(evaluationProject.getTemplateId()); + tableRelationsService.addRel(evaluationProject.getId(), "m_data_evaluation_project", relList, + "m_data_evaluation_template"); + } } diff --git a/manager-admin/src/main/java/com/hshh/evaluation/service/impl/EvaluationTemplateServiceImpl.java b/manager-admin/src/main/java/com/hshh/evaluation/service/impl/EvaluationTemplateServiceImpl.java index cbcb7a1..d07386f 100644 --- a/manager-admin/src/main/java/com/hshh/evaluation/service/impl/EvaluationTemplateServiceImpl.java +++ b/manager-admin/src/main/java/com/hshh/evaluation/service/impl/EvaluationTemplateServiceImpl.java @@ -1,12 +1,19 @@ package com.hshh.evaluation.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.hshh.evaluation.bean.DraftWeightData; import com.hshh.evaluation.entity.EvaluationTemplate; +import com.hshh.evaluation.entity.EvaluationTemplateWeight; import com.hshh.evaluation.mapper.EvaluationTemplateMapper; import com.hshh.evaluation.service.EvaluationTemplateService; +import com.hshh.evaluation.service.EvaluationTemplateWeightService; import com.hshh.system.common.bean.PaginationBean; import java.util.List; +import java.util.Map; +import javax.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * 评估工程模板表 服务实现类. @@ -16,8 +23,10 @@ import org.springframework.stereotype.Service; */ @Service public class EvaluationTemplateServiceImpl extends - ServiceImpl implements - EvaluationTemplateService { + ServiceImpl implements EvaluationTemplateService { + + @Resource + private EvaluationTemplateWeightService evaluationTemplateWeightService; @Override public List list(PaginationBean search) { @@ -28,4 +37,59 @@ public class EvaluationTemplateServiceImpl extends public Long count(PaginationBean search) { return this.baseMapper.count(search); } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveWhole(EvaluationTemplate evaluationTemplate, + Map weightDataMap) { + saveOrUpdate(evaluationTemplate); + if (weightDataMap != null && !weightDataMap.isEmpty()) { + + weightDataMap.forEach((k, v) -> { + //先按模板ID+上级指标ID + evaluationTemplateWeightService.deleteEvaluationTemplateWeightWithTemplateIdAndIndicatorId( + evaluationTemplate.getId(), evaluationTemplate.getIndicatorTopId(), k); + v.getWeight().forEach(weightBeanList -> { + weightBeanList.forEach(weightBean -> { + EvaluationTemplateWeight evaluationTemplateWeight = new EvaluationTemplateWeight(); + //设置模板ID + evaluationTemplateWeight.setTemplateId(evaluationTemplate.getId()); + //设置权重 + evaluationTemplateWeight.setWeight(Double.valueOf(weightBean.getValue())); + //设置顶级指标ID + evaluationTemplateWeight.setIndicatorTopId(evaluationTemplate.getIndicatorTopId()); + //fromIndicatorId + evaluationTemplateWeight.setFromIndicatorId(weightBean.getRowId()); + //toIndicatorId + evaluationTemplateWeight.setToIndicatorId(weightBean.getColId()); + //设置上级指标ID + evaluationTemplateWeight.setIndicatorParentId(weightBean.getParentId()); + //设置行号 + evaluationTemplateWeight.setRowNum(weightBean.getRowNum()); + //保存 + evaluationTemplateWeightService.save(evaluationTemplateWeight); + }); + + + }); + }); + + } + + } + + @Override + public List queryByName(String name) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("template_name", name); + return this.list(wrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteTemplate(EvaluationTemplate evaluationTemplate) { + evaluationTemplateWeightService.deleteEvaluationTemplateWeightWithTemplateId( + evaluationTemplate.getId()); + this.removeById(evaluationTemplate.getId()); + } } diff --git a/manager-admin/src/main/java/com/hshh/indicator/controller/EvaluationController.java b/manager-admin/src/main/java/com/hshh/indicator/controller/EvaluationController.java index 3dd172c..f2af5d6 100644 --- a/manager-admin/src/main/java/com/hshh/indicator/controller/EvaluationController.java +++ b/manager-admin/src/main/java/com/hshh/indicator/controller/EvaluationController.java @@ -50,7 +50,7 @@ public class EvaluationController extends BaseController { */ @GetMapping("/evaluationList") public String evaluationList(Integer topIndicatorId, Integer indicatorId, Model model) { - setNavigateTitle(model, "/indicator/evaluationList"); + setNavigateTitle(model, "/evaluation/evaluationList"); List rootList = indicatorService.queryRootList(); if (rootList != null && !rootList.isEmpty()) { if (topIndicatorId != null) { 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 2f8ab14..05fbde1 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 @@ -83,4 +83,20 @@ public interface IndicatorService extends IService { * @return 树数据 */ List metricTree(Integer topId); + + /** + * 查询只有一个孩子的指标列表. + * + * @param topId 指标ID + * @return 指标列表 + */ + List queryLonelyChild(Integer topId); + + /** + * 按照顶级指标查询所有指标. + * + * @param topId 顶级ID + * @return 指标列表,topId一致 + */ + List queryByTopId(Integer topId); } 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 d99d7c7..5f8f611 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 @@ -165,4 +165,26 @@ public class IndicatorServiceImpl extends ServiceImpl queryLonelyChild(Integer topId) { + Map> groupByPidMap = this.list() + .stream().filter(a -> a.getParentId() != null) + .collect(Collectors.groupingBy(Indicator::getParentId)); + List list = new ArrayList<>(); + groupByPidMap.forEach((k, v) -> { + if (v.size() == 1) { + list.add(v.get(0)); + } + }); + return list; + } + + @Override + public List queryByTopId(Integer topId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("top_id", topId); + + return this.list(queryWrapper); + } } diff --git a/manager-admin/src/main/resources/application.yaml b/manager-admin/src/main/resources/application.yaml index 05cce5c..0e21dd9 100644 --- a/manager-admin/src/main/resources/application.yaml +++ b/manager-admin/src/main/resources/application.yaml @@ -27,7 +27,7 @@ mybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml configuration: database-id: mysql - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: diff --git a/manager-admin/src/main/resources/mapper/EvaluationProjectMapper.xml b/manager-admin/src/main/resources/mapper/EvaluationProjectMapper.xml index ec938b8..caf31a2 100644 --- a/manager-admin/src/main/resources/mapper/EvaluationProjectMapper.xml +++ b/manager-admin/src/main/resources/mapper/EvaluationProjectMapper.xml @@ -7,7 +7,7 @@ @rownum := @rownum + 1 AS seq, t.* FROM ( - SELECT T1.*,T2.name as indicatorTopName FROM m_data_evaluation_project T1 left join m_data_indicator T2 on T1.indicator_top_id=T2.id + SELECT T1.*,T2.template_name as templateName FROM m_data_evaluation_project T1 left join m_data_evaluation_template T2 on T1.template_id=T2.id T1.project_name LIKE CONCAT('%',#{search},'%') @@ -24,8 +24,8 @@ SELECT ROW_NUMBER() OVER (ORDER BY id ASC) AS seq, a.*, - a1.name as indicatorTopName - FROM m_data_evaluation_project a left join m_data_indicator a1 on a.indicator_top_id=a1.name + a1.template_name as templateName + FROM m_data_evaluation_project a left join m_data_evaluation_template a1 on a.template_id=a1.name a.project_name LIKE '%'||#{search}||'%' diff --git a/manager-admin/src/main/resources/mapper/EvaluationTemplateMapper.xml b/manager-admin/src/main/resources/mapper/EvaluationTemplateMapper.xml index b7ebef8..e8d7b45 100644 --- a/manager-admin/src/main/resources/mapper/EvaluationTemplateMapper.xml +++ b/manager-admin/src/main/resources/mapper/EvaluationTemplateMapper.xml @@ -13,7 +13,7 @@ T1.template_name LIKE CONCAT('%',#{search},'%') - order by T1.id asc ) t, ( SELECT @rownum := #{start} ) r limit + order by T1.id desc ) t, ( SELECT @rownum := #{start} ) r limit #{start},#{pageSize} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/manager-admin/src/main/resources/templates/evaluation_template/list.html b/manager-admin/src/main/resources/templates/evaluation_template/list.html deleted file mode 100644 index ea21823..0000000 --- a/manager-admin/src/main/resources/templates/evaluation_template/list.html +++ /dev/null @@ -1,87 +0,0 @@ - -
-
- -
-
- -
-
-
-

评估模板列表

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
No. - - - - - - 模板名称对应指标模板状态模板描述创建时间
- -
-
-
-
-
-
-
-
-
- - \ No newline at end of file diff --git a/manager-admin/src/main/resources/templates/home.html b/manager-admin/src/main/resources/templates/home.html index 474faf5..bd82dbe 100644 --- a/manager-admin/src/main/resources/templates/home.html +++ b/manager-admin/src/main/resources/templates/home.html @@ -24,163 +24,203 @@ @@ -228,6 +268,7 @@ diff --git a/manager-admin/src/main/resources/templates/indicator/evaluation_list.html b/manager-admin/src/main/resources/templates/indicator/evaluation_list.html index 4abf250..0851442 100644 --- a/manager-admin/src/main/resources/templates/indicator/evaluation_list.html +++ b/manager-admin/src/main/resources/templates/indicator/evaluation_list.html @@ -1,81 +1,73 @@ - +
+
-
+ + +
-
指标数据评价集设置
+

选择评价指标 + 必填 +

-
- -
- - -
- -
说明: 切换不同的指标可以设置当前指标子项的评价标准 +
+ +
+
+
选定后,下方“评价集设置”将随之变化
-
-
-
-
-
-

[[${item.name}]]子集

-
-
-
-
- +
+
-
-
+ +
+
+
评价集设置
+ +
+ +
+
+ + +
+
+
+
+
-
- + +
- + - - - - - + + + + + @@ -86,8 +78,8 @@ -
序号序号 名称符号下限值符号上限值符号下限值符号上限值
- + 编辑 删除 @@ -97,49 +89,52 @@
-
+
-
+
+ - - diff --git a/manager-admin/src/main/resources/templates/indicator/indicator_mapper.html b/manager-admin/src/main/resources/templates/indicator/indicator_mapper.html index 37ed766..cf7565d 100644 --- a/manager-admin/src/main/resources/templates/indicator/indicator_mapper.html +++ b/manager-admin/src/main/resources/templates/indicator/indicator_mapper.html @@ -1,162 +1,164 @@ - -
-
+ + -
-
-
-
指标数据映射集设置
-
- - - - - - - - 保存映射关系 - +
+
+
+ + +
+ +
+ +
+
+
指标数据映射集设置
+
+ +
+ + +
+
+
1. 选择指标(根指标)
+
+
+
+
+ +
+
+ +
+
选择根指标后,再选择设施与 CSV 以建立映射。
+
+
+
+ + +
+
+
2. 选择设施
+
+
+
+
+ +
+
+ +
+
+
+
+ + +
+
+
3. 上传 CSV 文件
+
+
+ + + +
+ 上次上传文件: + +
+ +
+ +
+ +
+
+
+ + +
+
+
4. 子指标映射设置
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
#子指标名称设施字段CSV 表头
+ + + +
+
+
+ 说明:为每个子指标选择表单字段或 CSV 列,系统会保存映射关系用于后续处理。 +
+
+
+ +
- -
- - -
-
-
1. 选择指标(根指标)
-
-
-
-
- -
-
- -
-
- -
-
- -
-
-
2. 选择设施
-
-
-
-
- -
-
- -
-
- -
-
- - -
-
-
3. 上传 CSV 文件
-
-
- - -
- 上次上传文件: - -
-
-
- - -
-
-
- - -
-
-
4. 子指标映射设置
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
#子指标名称设施字段CSV 表头
-
-
说明:选择子指标,对应表单字段或者CSV某列
-
-
- -
- - + + + + // 根指标变化时也高亮主卡 + $('#indicationId').on('change', flashHero); + + // 初始化 CSV 监听 + csvListen(); + + // 轻微高亮动画(与 CSS 中 .flash 对应) + function flashHero(){ + const hero = document.querySelector('.card-hero'); + if(!hero) return; + hero.classList.add('flash'); + setTimeout(()=>hero.classList.remove('flash'), 900); + } + \ No newline at end of file diff --git a/manager-admin/src/main/resources/templates/evaluation/add.html b/manager-admin/src/main/resources/templates/project/add.html similarity index 81% rename from manager-admin/src/main/resources/templates/evaluation/add.html rename to manager-admin/src/main/resources/templates/project/add.html index 0d138d1..6be01e9 100644 --- a/manager-admin/src/main/resources/templates/evaluation/add.html +++ b/manager-admin/src/main/resources/templates/project/add.html @@ -9,9 +9,9 @@
- - +
diff --git a/manager-admin/src/main/resources/templates/evaluation/list.html b/manager-admin/src/main/resources/templates/project/list.html similarity index 78% rename from manager-admin/src/main/resources/templates/evaluation/list.html rename to manager-admin/src/main/resources/templates/project/list.html index 91f6227..3c72156 100644 --- a/manager-admin/src/main/resources/templates/evaluation/list.html +++ b/manager-admin/src/main/resources/templates/project/list.html @@ -39,7 +39,7 @@ 工程名称 - 指标名称 + 模板名称 创建时间 @@ -49,7 +49,7 @@ - + @@ -60,7 +60,7 @@ - 评估结果 + 评估历史 @@ -96,17 +96,14 @@ document.getElementById("_evaluation_project_").click(); } - function _toAdd(data) { + function _toAdd() { let url = document.getElementById("_rootPath").value + "evaluation/project/add"; let http = new HttpClient(); http.get(url, function (error, res, xhr) { document.getElementById("simpleFormBody").innerHTML = res; openDialog("simple-form-model"); - if (data) { - //给窗体赋值 - fillData(data); - } + document.getElementById("SimpleFormDialog_save").onclick = function () { saveProject(); } @@ -123,51 +120,28 @@ }, "projectForm", "simple-form-model") } - //第一步加载指标树 - function _startEvaluation(projectId) { - let url = document.getElementById("_rootPath").value + "evaluation/project/startEvaluation/"+projectId; - let http = new HttpClient(); - document.getElementById("stepForm")["projectId"].value = projectId; - http.get(url, function (error, response, xhr) { - document.getElementById("add-full-screen-form-modal-body").innerHTML = response; - openDialog("modal-full-width"); - initTreeMetric(); - }, "stepForm") - } function _projectDelete(id) { - + openDialog("modal-danger"); + document.getElementById('delete-confirm-9999').onclick = function () { + let url = document.getElementById("_rootPath").value + "evaluation/project/remove/" + + id; + let http = new HttpClient(); + http.get(url, function (error, res, xhr) { + _pageSearch(); + }) + }; } - function _projectEdit(id) { - } function _projectHistory(id) { } - //初始化指标树 - function initTreeMetric() { - let projectId = document.getElementById("stepForm")['projectId'].value; - let url = document.getElementById("_rootPath").value + "evaluation/project/metricTree/" - + projectId; - let http = new HttpClient(); - http.get(url, function (error, response, body) { + function _startEvaluation(id){ - $('#project_metric_tree').jstree({ - 'core': { - 'data': response.result - } - }).on("select_node.jstree", function (e, data) { - - - - - - }); - - }, null); } + \ No newline at end of file diff --git a/manager-admin/src/main/resources/templates/project_template/add.html b/manager-admin/src/main/resources/templates/project_template/add.html new file mode 100644 index 0000000..ec7a60a --- /dev/null +++ b/manager-admin/src/main/resources/templates/project_template/add.html @@ -0,0 +1,58 @@ +
+
+
+ + +
+

1.基本信息

+
+
+ +
+ + +
+
+
+ + +
+
+
+
+
+
+
+
+

2.指标权重

+
+
+
+
+
+ +
+ +
+
+
+ +
+
+
+ + + +
+
+ + +
+
+
+
\ No newline at end of file diff --git a/manager-admin/src/main/resources/templates/project_template/list.html b/manager-admin/src/main/resources/templates/project_template/list.html new file mode 100644 index 0000000..ede75f5 --- /dev/null +++ b/manager-admin/src/main/resources/templates/project_template/list.html @@ -0,0 +1,416 @@ + +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
No. + + + + + + 模板名称对应指标模板描述创建时间
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+ \ No newline at end of file diff --git a/manager-system/pom.xml b/manager-system/pom.xml index f951ee6..f994e04 100644 --- a/manager-system/pom.xml +++ b/manager-system/pom.xml @@ -68,8 +68,12 @@ org.apache.commons commons-csv - 1.11.0 - + + + com.github.ben-manes.caffeine + caffeine + + diff --git a/manager-system/src/main/java/com/hshh/system/base/service/TableRelationsService.java b/manager-system/src/main/java/com/hshh/system/base/service/TableRelationsService.java index 427d9b8..f491193 100644 --- a/manager-system/src/main/java/com/hshh/system/base/service/TableRelationsService.java +++ b/manager-system/src/main/java/com/hshh/system/base/service/TableRelationsService.java @@ -30,6 +30,16 @@ public interface TableRelationsService extends IService { */ void removeRel(Integer srcId, String srcTable, String dstTable); + /** + * 删除一个引用. + * + * @param srcId 源表ID + * @param srcTable 原表名称 + * @param dstId 目标表ID + * @param dstTable 目标表名称 + */ + void removeRel(Integer srcId, String srcTable, Integer dstId, String dstTable); + /** * 增加引用关系. * @@ -39,4 +49,5 @@ public interface TableRelationsService extends IService { * @param dstTable 引用表 */ void addRel(Integer srcId, String srcTable, List dstIdList, String dstTable); + } diff --git a/manager-system/src/main/java/com/hshh/system/base/service/impl/TableRelationsServiceImpl.java b/manager-system/src/main/java/com/hshh/system/base/service/impl/TableRelationsServiceImpl.java index 759d49f..06d82d7 100644 --- a/manager-system/src/main/java/com/hshh/system/base/service/impl/TableRelationsServiceImpl.java +++ b/manager-system/src/main/java/com/hshh/system/base/service/impl/TableRelationsServiceImpl.java @@ -43,6 +43,19 @@ public class TableRelationsServiceImpl extends this.remove(queryWrapper); } + @Override + public void removeRel(Integer srcId, String srcTable, Integer dstId, String dstTable) { + if (srcId == null || srcTable == null || dstTable == null || dstId == null) { + throw new IllegalArgumentException(ErrorMessage.IllegalArgumentException.getMessage()); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("dst_table_name", dstTable); + queryWrapper.eq("src_data_id", srcId); + queryWrapper.eq("dst_data_id", dstId); + queryWrapper.eq("src_table_name", srcTable); + this.remove(queryWrapper); + } + @Transactional(rollbackFor = Exception.class) @Override public void addRel(Integer srcId, String srcTable, List dstIdList, String dstTable) { @@ -58,4 +71,6 @@ public class TableRelationsServiceImpl extends this.save(tableRelations); }); } + + } diff --git a/manager-system/src/main/java/com/hshh/system/common/Strings/Extractor.java b/manager-system/src/main/java/com/hshh/system/common/Strings/StringOperationUtil.java similarity index 59% rename from manager-system/src/main/java/com/hshh/system/common/Strings/Extractor.java rename to manager-system/src/main/java/com/hshh/system/common/Strings/StringOperationUtil.java index caa0016..3c63464 100644 --- a/manager-system/src/main/java/com/hshh/system/common/Strings/Extractor.java +++ b/manager-system/src/main/java/com/hshh/system/common/Strings/StringOperationUtil.java @@ -1,16 +1,17 @@ package com.hshh.system.common.Strings; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * Extractor + * Strings string 相关的工具. * * @author LiDongYU * @date 2025/7/18 * @description */ -public class Extractor { +public class StringOperationUtil { public static String[] extractOption(String input) { // 匹配形如 xx(xx) 的内容 @@ -27,4 +28,18 @@ public class Extractor { // 如果不匹配,返回空数组或抛异常 return new String[0]; } + + public static double[][] toDoubleArray(List list) { + int rows = list.size(); + int cols = list.get(0).length; + double[][] arr = new double[rows][cols]; + + for (int i = 0; i < rows; i++) { + String[] row = list.get(i); + for (int j = 0; j < cols; j++) { + arr[i][j] = Double.parseDouble(row[j]); + } + } + return arr; + } } diff --git a/manager-system/src/main/java/com/hshh/system/common/algorithm/AhpNode.java b/manager-system/src/main/java/com/hshh/system/common/algorithm/AhpNode.java new file mode 100644 index 0000000..49d8a3e --- /dev/null +++ b/manager-system/src/main/java/com/hshh/system/common/algorithm/AhpNode.java @@ -0,0 +1,38 @@ +package com.hshh.system.common.algorithm; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 树节点:每个非叶子节点可附带“对子节点的判断矩阵” + */ + +public class AhpNode { + + public final String name; + public final List children = new ArrayList<>(); + + // 对子节点的两两比较矩阵(仅在 children.size()>1 时需要) + double[][] localMatrix; + + // 计算得到 + double[] localWeights; // 对“本节点”的子节点局部权重(和=1) + double lambdaMax = Double.NaN, ci = Double.NaN, cr = Double.NaN; + + public double globalWeight = Double.NaN; // 本节点的全局权重(根设为1,叶子递推得到) + + public AhpNode(String name) { + this.name = name; + } + + public AhpNode setLocalMatrix(double[][] m) { + this.localMatrix = m; + return this; + } + + public AhpNode add(AhpNode... nodes) { + this.children.addAll(Arrays.asList(nodes)); + return this; + } +} diff --git a/manager-system/src/main/java/com/hshh/system/common/algorithm/AhpTreeCompute.java b/manager-system/src/main/java/com/hshh/system/common/algorithm/AhpTreeCompute.java new file mode 100644 index 0000000..26c4455 --- /dev/null +++ b/manager-system/src/main/java/com/hshh/system/common/algorithm/AhpTreeCompute.java @@ -0,0 +1,125 @@ +package com.hshh.system.common.algorithm; + +public class AhpTreeCompute { + + /** + * 递归计算:从 root 开始,将局部权重通过父节点全局权重向下传播 + */ + public static void computeTree(AhpNode root) { + if (Double.isNaN(root.globalWeight)) { + root.globalWeight = 1.0; // 根默认 1 + } + + int k = root.children.size(); + if (k == 0) { + return; // 叶子 + } + + if (k == 1) { + // 单子节点不需要矩阵,权重=1,直接传播 + root.localWeights = new double[]{1.0}; + AhpNode c = root.children.get(0); + c.globalWeight = root.globalWeight; // 乘1 + computeTree(c); + root.lambdaMax = 1; + root.ci = 0; + root.cr = 0; + return; + } + + if (root.localMatrix == null || root.localMatrix.length != k + || root.localMatrix[0].length != k) { + throw new IllegalStateException( + "Node '" + root.name + "' needs a " + k + "x" + k + " localMatrix."); + } + + // AHP:对子节点判断矩阵 -> 局部权重 + 一致性 + Ahp.EigenResult er = Ahp.principalEigen(root.localMatrix, 1e-12, 10000); + root.localWeights = er.w; + root.lambdaMax = er.lambdaMax; + root.ci = Ahp.consistencyIndex(er.lambdaMax, k); + root.cr = Ahp.consistencyRatio(er.lambdaMax, k); + + // 传播:子全局 = 父全局 × 局部权重 + for (int i = 0; i < k; i++) { + AhpNode child = root.children.get(i); + child.globalWeight = root.globalWeight * root.localWeights[i]; + computeTree(child); + } + } + + /** + * 打印树(缩进展示),显示局部/全局权重与一致性 + */ + static void printTree(AhpNode node, int depth) { + String indent = " ".repeat(depth); + String info = String.format("%s- %s (global=%.4f)", indent, node.name, + Double.isNaN(node.globalWeight) ? 0.0 : node.globalWeight); + + + + + for (AhpNode c : node.children) { + printTree(c, depth + 1); + } + } + + // ---------------- 完整示例 ---------------- + public static void main(String[] args) { + // 层次:H -> A,B ; A -> A1,A2,A3 ; B -> B1,B2 + AhpNode H = new AhpNode("H"); // 目标 + AhpNode A = new AhpNode("A"); // 准则组 A + AhpNode B = new AhpNode("B"); // 准则组 B +// AhpNode A1 = new AhpNode("A1"); +// AhpNode A2 = new AhpNode("A2"); +// AhpNode A3 = new AhpNode("A3"); +// AhpNode B1 = new AhpNode("B1"); +// AhpNode B2 = new AhpNode("B2"); + + // 组装树 + H.add(A, B); +// A.add(A1, A2, A3); +// B.add(B1, B2); + + // 顶层 H 的判断矩阵(A vs B) + H.setLocalMatrix(new double[][]{ + {1, 3}, + {1.0/3, 1} + }); + +// // A 组内(A1,A2,A3) +// A.setLocalMatrix(new double[][]{ +// {1, 2, 4}, +// {0.5, 1, 3}, +// {0.25, 1.0/3, 1} +// }); +// +// // B 组内(B1,B2) +// B.setLocalMatrix(new double[][]{ +// {1, 0.5}, +// {2, 1} +// }); + + // 计算 + H.globalWeight = 1.0; // 根节点全局权重=1 + computeTree(H); + + // 打印结果 + printTree(H, 0); + +// // 校验:所有叶子全局之和应为 1 +// double sumLeaves = sumLeaves(H); +// System.out.printf("%nSum of leaf global weights = %.6f%n", sumLeaves); + } + + static double sumLeaves(AhpNode n) { + if (n.children.isEmpty()) { + return n.globalWeight; + } + double s = 0.0; + for (AhpNode c : n.children) { + s += sumLeaves(c); + } + return s; + } +} diff --git a/manager-system/src/main/java/com/hshh/system/common/algorithm/AhpTreeDemo.java b/manager-system/src/main/java/com/hshh/system/common/algorithm/AhpTreeDemo.java deleted file mode 100644 index 8b41984..0000000 --- a/manager-system/src/main/java/com/hshh/system/common/algorithm/AhpTreeDemo.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.hshh.system.common.algorithm; - -import java.util.*; - -/** 树节点:每个非叶子节点可附带“对子节点的判断矩阵” */ -class AhpNode { - final String name; - final List children = new ArrayList<>(); - - // 对子节点的两两比较矩阵(仅在 children.size()>1 时需要) - double[][] localMatrix; - - // 计算得到 - double[] localWeights; // 对“本节点”的子节点局部权重(和=1) - double lambdaMax = Double.NaN, ci = Double.NaN, cr = Double.NaN; - - double globalWeight = Double.NaN; // 本节点的全局权重(根设为1,叶子递推得到) - - AhpNode(String name) { this.name = name; } - - AhpNode setLocalMatrix(double[][] m) { this.localMatrix = m; return this; } - AhpNode add(AhpNode... nodes) { this.children.addAll(Arrays.asList(nodes)); return this; } -} - -public class AhpTreeDemo { - - /** 递归计算:从 root 开始,将局部权重通过父节点全局权重向下传播 */ - static void computeTree(AhpNode root) { - if (Double.isNaN(root.globalWeight)) root.globalWeight = 1.0; // 根默认 1 - - int k = root.children.size(); - if (k == 0) return; // 叶子 - - if (k == 1) { - // 单子节点不需要矩阵,权重=1,直接传播 - root.localWeights = new double[]{1.0}; - AhpNode c = root.children.get(0); - c.globalWeight = root.globalWeight; // 乘1 - computeTree(c); - root.lambdaMax = 1; root.ci = 0; root.cr = 0; - return; - } - - if (root.localMatrix == null || root.localMatrix.length != k || root.localMatrix[0].length != k) { - throw new IllegalStateException("Node '"+root.name+"' needs a "+k+"x"+k+" localMatrix."); - } - - // AHP:对子节点判断矩阵 -> 局部权重 + 一致性 - Ahp.EigenResult er = Ahp.principalEigen(root.localMatrix, 1e-12, 10000); - root.localWeights = er.w; - root.lambdaMax = er.lambdaMax; - root.ci = Ahp.consistencyIndex(er.lambdaMax, k); - root.cr = Ahp.consistencyRatio(er.lambdaMax, k); - - // 传播:子全局 = 父全局 × 局部权重 - for (int i = 0; i < k; i++) { - AhpNode child = root.children.get(i); - child.globalWeight = root.globalWeight * root.localWeights[i]; - computeTree(child); - } - } - - /** 打印树(缩进展示),显示局部/全局权重与一致性 */ - static void printTree(AhpNode node, int depth) { - String indent = " ".repeat(depth); - String info = String.format("%s- %s (global=%.4f)", indent, node.name, - Double.isNaN(node.globalWeight) ? 0.0 : node.globalWeight); - System.out.println(info); - - if (node.children.size() > 1) { - System.out.printf("%s local weights = %s | λmax=%.6f CI=%.6f CR=%.6f%n", - indent, Ahp.fmt(node.localWeights), node.lambdaMax, node.ci, node.cr); - } - - for (AhpNode c : node.children) printTree(c, depth+1); - } - - // ---------------- 完整示例 ---------------- -// public static void main(String[] args) { -// // 层次:H -> A,B ; A -> A1,A2,A3 ; B -> B1,B2 -// AhpNode H = new AhpNode("H"); // 目标 -// AhpNode A = new AhpNode("A"); // 准则组 A -// AhpNode B = new AhpNode("B"); // 准则组 B -// AhpNode A1 = new AhpNode("A1"); -// AhpNode A2 = new AhpNode("A2"); -// AhpNode A3 = new AhpNode("A3"); -// AhpNode B1 = new AhpNode("B1"); -// AhpNode B2 = new AhpNode("B2"); -// -// // 组装树 -// H.add(A, B); -// A.add(A1, A2, A3); -// B.add(B1, B2); -// -// // 顶层 H 的判断矩阵(A vs B) -// H.setLocalMatrix(new double[][]{ -// {1, 3}, -// {1.0/3, 1} -// }); -// -// // A 组内(A1,A2,A3) -// A.setLocalMatrix(new double[][]{ -// {1, 2, 4}, -// {0.5, 1, 3}, -// {0.25, 1.0/3, 1} -// }); -// -// // B 组内(B1,B2) -// B.setLocalMatrix(new double[][]{ -// {1, 0.5}, -// {2, 1} -// }); -// -// // 计算 -// H.globalWeight = 1.0; // 根节点全局权重=1 -// computeTree(H); -// -// // 打印结果 -// printTree(H, 0); -// -// // 校验:所有叶子全局之和应为 1 -// double sumLeaves = sumLeaves(H); -// System.out.printf("%nSum of leaf global weights = %.6f%n", sumLeaves); -// } - - static double sumLeaves(AhpNode n) { - if (n.children.isEmpty()) return n.globalWeight; - double s = 0.0; - for (AhpNode c : n.children) s += sumLeaves(c); - return s; - } -} diff --git a/manager-system/src/main/java/com/hshh/system/common/enums/EvaluationTemplateStatus.java b/manager-system/src/main/java/com/hshh/system/common/enums/EvaluationTemplateStatus.java new file mode 100644 index 0000000..1e451ca --- /dev/null +++ b/manager-system/src/main/java/com/hshh/system/common/enums/EvaluationTemplateStatus.java @@ -0,0 +1,44 @@ +package com.hshh.system.common.enums; + +import lombok.Getter; + +/** + * 评估模板状态枚举. + * + * @author LiDongYU + * @since 2025/7/22 + */ +public enum EvaluationTemplateStatus { + + DATA_WHOLE(1, "数据完整"), + NOT_SET_INDICATOR(-1, "指标未设置"), + INDICATOR_WEIGHT_NOT_WELL(-2, "指标权重不完整"); + @Getter + final int code; + @Getter + final String desc; + + EvaluationTemplateStatus(int code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取说明信息. + * + * @param code 编码 + * @return 说明 + */ + public static String getMessage(int code) { + if (code == 1) { + return DATA_WHOLE.desc; + } + if (code == -1) { + return NOT_SET_INDICATOR.desc; + } + if (code == -2) { + return INDICATOR_WEIGHT_NOT_WELL.desc; + } + return ""; + } +} diff --git a/manager-system/src/main/java/com/hshh/system/common/util/DraftStore.java b/manager-system/src/main/java/com/hshh/system/common/util/DraftStore.java new file mode 100644 index 0000000..2311a16 --- /dev/null +++ b/manager-system/src/main/java/com/hshh/system/common/util/DraftStore.java @@ -0,0 +1,50 @@ +package com.hshh.system.common.util; + +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import java.time.Duration; + +/** + * [类的简要说明] + *

+ * [详细描述,可选] + *

+ * + * @author LiDongYU + * @since 2025/7/22 + */ +public final class DraftStore { + + private static final Cache CACHE = + Caffeine.newBuilder() + .expireAfterAccess(Duration.ofHours(2)) // 2小时不访问即过期 + .maximumSize(100_000) // 视内存设置上限 + .recordStats() + .build(); + + public static void put(String key, Object value) { + CACHE.put(key, value); + } + + @SuppressWarnings("unchecked") + public static T get(String key, Class type) { + Object v = CACHE.getIfPresent(key); + return (type.isInstance(v) ? (T) v : null); + } + + public static boolean remove(String key) { + Object prev = CACHE.asMap().remove(key); + return prev != null; + } + + public static int removeByPrefix(String prefix) { + int n = 0; + for (String k : CACHE.asMap().keySet()) { + if (k.startsWith(prefix)) { + CACHE.invalidate(k); + n++; + } + } + return n; + } +} diff --git a/manager-z-generation/pom.xml b/manager-z-generation/pom.xml index 0db902c..78f2d5e 100644 --- a/manager-z-generation/pom.xml +++ b/manager-z-generation/pom.xml @@ -54,5 +54,6 @@ velocity-engine-core 2.3 + diff --git a/manager-z-generation/src/main/java/CodeGenerator.java b/manager-z-generation/src/main/java/CodeGenerator.java index 314fe49..c568684 100644 --- a/manager-z-generation/src/main/java/CodeGenerator.java +++ b/manager-z-generation/src/main/java/CodeGenerator.java @@ -29,7 +29,7 @@ public class CodeGenerator { basePath + "/src/main/resources/mapper")); // 设置mapperXml生成路径 }) .strategyConfig(builder -> { - builder.addInclude("m_data_evaluation_template") // 设置需要生成的表名(多个用逗号分隔) + builder.addInclude("m_data_evaluation_template_weight") // 设置需要生成的表名(多个用逗号分隔) .addTablePrefix("m_data_"); // 设置过滤表前缀 }) .execute(); diff --git a/pom.xml b/pom.xml index c06ea2c..4d89f47 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,13 @@ commons-csv 1.11.0 + + com.github.ben-manes.caffeine + caffeine + 3.1.8 + +