luodangjia
2024-04-28 94e9dc3adb80baf6e1d7d56e54a93917996bc339
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
package cn.stylefeng.roses.kernel.migration.web.service.impl;
 
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.migration.aggregation.scheduling.SchedulingCenter;
import cn.stylefeng.roses.kernel.migration.api.constants.MigrationConstants;
import cn.stylefeng.roses.kernel.migration.api.pojo.MigrationAggregationPOJO;
import cn.stylefeng.roses.kernel.migration.web.pojo.MigrationRequest;
import cn.stylefeng.roses.kernel.migration.web.service.MigrationService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.ToStringSerializer;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
 
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * 迁移服务实现类
 *
 * @author majianguo
 * @date 2021/7/7 9:34
 */
@Service
public class MigrationServiceImpl implements MigrationService {
 
    @Override
    public List<MigrationRequest> getAllMigrationList() {
        // 结构:应用-模块列表
        Map<String, MigrationRequest> migrationRequestList = new HashMap<>();
 
        // 获取所有应用和模块的名称列表
        List<String> allMigrationInfo = SchedulingCenter.getAllMigrationInfo();
 
        // 应用,模块映射关系
        for (String migration : allMigrationInfo) {
 
            // 分割应用名称和模块名称
            String[] appAndModuleName = migration.split(MigrationConstants.NAME_SEPARATOR);
 
            // 获取应用名称
            String appName = appAndModuleName[0];
 
            // 获取模块名称
            String moduleName = appAndModuleName[1];
 
            // 查找该应用
            MigrationRequest migrationRequest = migrationRequestList.get(appName);
            if (ObjectUtil.isEmpty(migrationRequest)) {
                migrationRequest = new MigrationRequest();
                migrationRequest.setAppName(appName);
                migrationRequestList.put(appName, migrationRequest);
            }
 
            // 该应用是否有模块
            List<String> moduleNames = migrationRequest.getModuleNames();
            if (ObjectUtil.isEmpty(moduleNames)) {
                moduleNames = new ArrayList<>();
                migrationRequest.setModuleNames(moduleNames);
            }
 
            moduleNames.add(moduleName);
        }
        return new ArrayList<>(migrationRequestList.values());
    }
 
    @Override
    public String migrationSelectData(MigrationAggregationPOJO migrationAggregationPOJO) {
        // 执行导出逻辑
        SchedulingCenter.exportData(migrationAggregationPOJO);
 
        // 转换为Json字符串
        return JSONObject.toJSONString(migrationAggregationPOJO);
    }
 
    @Override
    public void restoreData(MultipartFile file, String type) {
        String jsonStr = null;
        try {
            // 转换文件为String类型
            jsonStr = new String(file.getBytes(), StandardCharsets.UTF_8);
 
            // 把字符串转为java对象
            MigrationAggregationPOJO migrationAggregationPOJO = JSON.parseObject(jsonStr, MigrationAggregationPOJO.class);
 
            // 交给调度中心去调度
            SchedulingCenter.importData(migrationAggregationPOJO, type);
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    }
}