liujie
2026-01-21 66ec0428ca4f69dec6f698a3fd201944da8e2683
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
package com.estate.expert.admin.controller.admin.standard;
 
import com.estate.expert.admin.domain.common.IDtoBase;
import com.estate.expert.admin.domain.common.request.BatchReq;
import com.estate.expert.admin.domain.common.request.PageReq;
import com.estate.expert.admin.domain.standard.expert.Expert;
import com.estate.expert.admin.domain.standard.expert.matrix.CompareMatrix;
import com.estate.expert.admin.domain.standard.expert.matrix.MembershipMatrixRowDto;
import com.estate.expert.admin.domain.standard.expert.matrix.WeightMatrixRow;
import com.estate.expert.admin.domain.user.User;
import com.estate.expert.admin.enums.BizResultCode;
import com.estate.expert.admin.service.expert.ExpertService;
import com.estate.expert.common.domain.Session;
import com.estate.expert.common.rpc.Result;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
 
import javax.validation.constraints.NotNull;
import java.util.List;
 
/**
 * 专家控制器
 * 包含两类专家: 打分专家和模糊专家
 * 抽象操作
 */
public abstract class ExpertController<T extends Expert, D extends IDtoBase> {
 
    protected abstract ExpertService<T, D> getExpertService();
 
    ///////     基础操作        ///////
    @ApiOperation(value = "专家列表")
    @PostMapping("/list")
    public Result list(@RequestParam(value = "keyword", required = false) String keyword,
                       @RequestParam(value = "modelId", required = false) Integer modelId,
                       @ApiParam(value = "分页参数") @Validated @RequestBody PageReq pageReq) {
        return Result.success(getExpertService().list(keyword, modelId, pageReq));
    }
 
    @ApiOperation(value = "添加专家")
    @PostMapping("/add")
    public Result add(Session session,
                      @Validated @RequestBody D dto) {
        getExpertService().add((User)session.getUser(), dto);
        return Result.success();
    }
 
    @ApiOperation(value = "编辑专家")
    @PostMapping("/edit")
    public Result edit(@Validated @RequestBody D dto) {
        getExpertService().edit(dto);
        return Result.success();
    }
 
    @ApiOperation(value = "删除专家")
    @PostMapping("/batch/del")
    public Result batchDel( @Validated @RequestBody BatchReq request) {
        getExpertService().deleteAllById(request.getIds());
        return Result.success();
    }
 
    @ApiOperation(value = "综合体系树")
    @GetMapping("/tree")
    public Result tree(@ApiParam(value = "ID") @RequestParam("id") Integer id) {
        return Result.success(getExpertService().getNullModelTree(id));
    }
 
//    @GetMapping("/download/template")
//    public Result downloadTemplate() {
//        return null;
//    }
 
 
    ///////     打分专家判断矩阵操作    //////
    @ApiOperation("打分专家判断矩阵获取")
    @GetMapping("/weight/children")
    public Result getChildrenWeights(@RequestParam("expertId") Integer expertId,
                                                         @RequestParam("hierarchyPath")String hierarchyPath) {
        return Result.success(getExpertService().weightMatrix(expertId, hierarchyPath));
    }
 
    @ApiOperation("打分专家判断矩阵修改")
    @PostMapping("/weight/edit/row")
    public Result editWeight(@RequestParam("expertId") Integer expertId,
                             @RequestBody WeightMatrixRow row) {
        getExpertService().editWeightMatrixRow(expertId, row);
        return Result.success();
    }
 
    @ApiOperation("打分专家判断矩阵批量修改")
    @PostMapping("/weight/edit")
    public Result editWeight(@RequestParam("expertId") Integer expertId,
                             @RequestBody List<WeightMatrixRow> rows) {
        getExpertService().editWeightMatrixRows(expertId, rows);
        return Result.success();
    }
 
//    @ApiOperation("打分专家判断矩阵导入")
//    @PostMapping("/scoreMatrix/import")
//    public Result importScoreMatrix(@RequestParam("expertId") Integer expertId,
//                             @RequestParam("hierarchyPath")String hierarchyPath,
//                             @RequestPart("file")MultipartFile file) {
//        // 去读取对应路径的excel文件,然后解析,然后调用
////        expertService.importMatrixFile(session.getUserId(), request);
//        return Result.success();
//    }
//
//    @ApiOperation("打分专家判断矩阵导出")
//    @PostMapping("/scoreMatrix/export")
//    public Result exportScoreMatrix(@RequestParam("expertId") Integer expertId,
//                             @RequestParam("hierarchyPath")String hierarchyPath) {
//        return Result.success();
//    }
 
    ///////     模糊专家判断矩阵操作    //////
    @ApiOperation("模糊专家判断矩阵获取")
    @GetMapping("/fuzzyMatrix/get")
    public Result<CompareMatrix> getFuzzyMatrix(@NotNull @RequestParam("expertId") Integer expertId,
                                                @NotNull @RequestParam("hierarchyPath")String hierarchyPath) {
        return Result.success(getExpertService().getFuzzyMatrix(expertId, hierarchyPath));
    }
 
    @ApiOperation("模糊专家判断矩阵修改")
    @PostMapping("/fuzzyMatrix/edit")
    public Result editFuzzyMatrix(@NotNull @RequestParam("expertId") Integer expertId,
                                  @NotNull @RequestParam("hierarchyPath")String hierarchyPath,
                                  @Validated @RequestBody CompareMatrix value) {
        getExpertService().editFuzzyMatrix(expertId, hierarchyPath, value);
        return Result.success();
    }
 
//    @ApiOperation("模糊专家判断矩阵导入")
//    @PostMapping("/fuzzyMatrix/import")
//    public Result importFuzzyMatrix(@RequestParam("expertId") Integer expertId,
//                                    @RequestParam("hierarchyPath")String hierarchyPath,
//                                    @RequestPart("file")MultipartFile file) {
//        // 去读取对应路径的excel文件,然后解析,然后调用
//        return Result.success();
//    }
//
//    @ApiOperation("模糊专家判断矩阵导出")
//    @PostMapping("/fuzzyMatrix/export")
//    public Result exportFuzzyMatrix(@RequestParam("expertId") Integer expertId,
//                                    @RequestParam("hierarchyPath")String hierarchyPath) {
//        return Result.success();
//    }
 
    @ApiOperation("隶属度矩阵导出")
    @PostMapping("/membershipMatrix/export")
    public Result exportMembershipMatrix(@ApiParam("专家ID") @RequestParam("expertId") Integer expertId) {
        return Result.success();
    }
 
    @ApiOperation("隶属度矩阵获取")
    @GetMapping("/membershipMatrix/get")
    public Result getMembershipMatrix(@ApiParam("专家ID") @RequestParam("expertId") Integer expertId) {
        var matrix = getExpertService().getMembershipMatrix(expertId);
        BizResultCode.MEMBERSHIP_MATRIX_LOAD_ERROR.check(matrix == null);
        return Result.success(matrix.getData());
    }
 
    @ApiOperation("隶属度矩阵修改(整个矩阵)")
    @PostMapping("/membershipMatrix/edit")
    public Result editMembershipMatrix(@ApiParam("专家ID") @RequestParam("expertId") Integer expertId,
                                       @Validated @RequestBody float[][][][][] data) {
        getExpertService().editMembershipMatrix(expertId, data);
        return Result.success();
    }
 
    @ApiOperation("隶属度矩阵修改(行)")
    @PostMapping("/membershipMatrix/row/edit")
    public Result editMembershipMatrixRow(@ApiParam("专家ID") @RequestParam("expertId") Integer expertId,
                                          @Validated @RequestBody MembershipMatrixRowDto row) {
        getExpertService().editMembershipMatrixRow(expertId, row);
        return Result.success();
    }
 
    @ApiOperation("隶属度矩阵修获取(行)")
    @GetMapping("/membershipMatrix/rows")
    public Result listMembershipMatrixRows(@ApiParam("专家ID") @RequestParam("expertId") Integer expertId,
                                           @ApiParam("一级隐患数量") @RequestParam(value = "p1", required = false) Integer p1,
                                           @ApiParam("二级隐患数量") @RequestParam(value = "p2", required = false) Integer p2,
                                           @ApiParam("三级隐患数量") @RequestParam(value = "p3", required = false) Integer p3,
                                           @ApiParam("四级隐患数量") @RequestParam(value = "p4", required = false) Integer p4) {
        return Result.success(getExpertService().listMembershipMatrixRows(expertId, p1, p2, p3, p4));
    }
 
}