huliguo
2 天以前 8e0decd25b9ec86b02d58de53dee1451f83d1566
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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
package com.linghu.controller;
 
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.linghu.mapper.ReferenceMapper;
import com.linghu.model.common.ResponseResult;
import com.linghu.model.entity.Platform;
import com.linghu.model.entity.Reference;
import com.linghu.model.entity.Type;
import com.linghu.model.excel.PlatformExcel;
import com.linghu.model.page.CustomPage;
import com.linghu.service.PlatformService;
import com.linghu.service.TypeService;
 
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
 
import java.io.ByteArrayOutputStream;
import java.io.IOException;
 
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
 
@RestController
@RequestMapping("/platform")
@Api(value = "平台相关接口", tags = "设置-平台")
public class PlatformController {
 
    @Autowired
    private PlatformService platformService;
    @Autowired
    private TypeService typeService;
    @Autowired
    private ReferenceMapper referenceMapper;
 
    @PostMapping
    @ApiOperation(value = "添加平台")
    public ResponseResult<Platform> add(@RequestBody Platform platform) {
        // 校验平台名称和域名不能为空
        if (!StringUtils.hasText(platform.getPlatform_name())) {
            return ResponseResult.error("平台名称不能为空");
        }
        if (!StringUtils.hasText(platform.getDomain())) {
            return ResponseResult.error("平台域名不能为空");
        }
 
        boolean success = platformService.save(platform);
        if (success) {
            return ResponseResult.success(platform);
        }
        return ResponseResult.error("添加平台失败");
    }
 
    @DeleteMapping("/{platformId}")
    @ApiOperation(value = "删除平台")
    public ResponseResult<Void> delete(@PathVariable Integer platformId) {
        //平台被引用了没
        Integer count = referenceMapper.selectCount(new LambdaQueryWrapper<Reference>().eq(Reference::getPlatform_id, platformId));
        if (count > 0) {
            return ResponseResult.error("该平台被引用中,不能删除");
        }
        boolean success = platformService.removeById(platformId);
        if (success) {
            return ResponseResult.success();
        }
        return ResponseResult.error("删除平台失败");
    }
 
    @PutMapping
    @ApiOperation(value = "更新平台")
    public ResponseResult<Void> update(@RequestBody Platform platform) {
        // 校验平台名称和域名不能为空
        if (!StringUtils.hasText(platform.getPlatform_name())) {
            return ResponseResult.error("平台名称不能为空");
        }
        if (!StringUtils.hasText(platform.getDomain())) {
            return ResponseResult.error("平台域名不能为空");
        }
 
        platformService.updateById(platform);
 
        return ResponseResult.success();
    }
 
    @GetMapping("/{platformId}")
    @ApiOperation("根据id获取平台")
    public ResponseResult<Platform> getById(@PathVariable Integer platformId) {
        Platform platform = platformService.getById(platformId);
        if (platform != null) {
            return ResponseResult.success(platform);
        }
        return ResponseResult.error("平台不存在");
    }
 
    @GetMapping("/list")
    @ApiOperation("查询平台列表,不传页数和大小就查全部")
    public ResponseResult<CustomPage<Platform>> list(
            @RequestParam(required = false) Integer page,
            @RequestParam(required = false) Integer pageSize) {
        if (page != null && pageSize != null) {
            Page<Platform> pageInfo = new Page<>(page, pageSize);
            Page<Platform> result = platformService.page(pageInfo);
            return ResponseResult.success(new CustomPage<>(result));
        } else {
            List<Platform> list = platformService.list();
            CustomPage<Platform> customPage = new CustomPage<>(new Page<>());
            customPage.setRecords(list);
            customPage.setTotal(list.size());
            return ResponseResult.success(customPage);
 
        }
    }
 
    @GetMapping("/download")
    @ApiOperation("下载平台模板")
    public ResponseEntity<byte[]> downloadTemplate() throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        EasyExcel.write(out, PlatformExcel.class).sheet("平台模板").doWrite(new ArrayList<>());
 
        return ResponseEntity.ok()
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=platform_template.xlsx")
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .body(out.toByteArray());
    }
 
    @PostMapping("/import")
    @ApiOperation("导入平台数据")
    public ResponseResult<String> importPlatforms(@RequestParam("file") MultipartFile file) {
        try {
            // 检查文件是否为空
            if (file.isEmpty()) {
                return ResponseResult.error("上传文件不能为空");
            }
 
            // 读取Excel数据
            List<PlatformExcel> excelList = EasyExcel.read(file.getInputStream())
                    .head(PlatformExcel.class)
                    .sheet()
                    .doReadSync();
 
            // 数据转换与验证
            List<Platform> platforms = new ArrayList<>();
            List<String> errorMessages = new ArrayList<>();
 
            for (PlatformExcel excel : excelList) {
                // 检查必要字段
                if (!StringUtils.hasText(excel.getPlatform_name())) {
                    errorMessages.add("平台名称不能为空");
                    continue;
                }
                if (!StringUtils.hasText(excel.getType_name())) {
                    errorMessages.add("平台类型不能为空");
                    continue;
                }
                if (!StringUtils.hasText(excel.getDomain())) {
                    errorMessages.add("平台域名不能为空");
                    continue;
                }
 
                // 查找类型
                Type typeByName = typeService.getTypeByName(excel.getType_name());
                if (typeByName == null) {
                    errorMessages.add("未知的平台类型: " + excel.getType_name());
                    continue;
                }
 
                // 构建平台对象
                Platform platform = new Platform();
                platform.setPlatform_name(excel.getPlatform_name());
                platform.setDomain(excel.getDomain());
                platform.setType_id(typeByName.getType_id());
 
                // 设置创建时间(解决之前的数据库错误)
                platform.setCreate_time(LocalDateTime.now());
 
                platforms.add(platform);
            }
 
            // 处理错误
            if (!errorMessages.isEmpty()) {
                return ResponseResult.error("数据验证失败: " + String.join("; ", errorMessages));
            }
 
            // 批量保存
            if (!platforms.isEmpty()) {
                platformService.saveBatch(platforms);
                return ResponseResult.success("成功导入" + platforms.size() + "条数据");
            } else {
                return ResponseResult.error("没有有效数据可导入");
            }
 
        } catch (Exception e) {
            // 记录详细异常信息
 
            return ResponseResult.error("文件解析失败:" + e.getMessage());
        }
    }
}