DingXiaoYu hace 3 años
padre
commit
1b8fda936d
Se han modificado 2 ficheros con 184 adiciones y 13 borrados
  1. 13 13
      后端接口/Java-Controller.md
  2. 171 0
      后端接口/Java-Service.md

+ 13 - 13
后端接口/Java-Controller.md

@@ -621,19 +621,19 @@ public class ModelController {
 }
 ```
 
-| 方法名               | 参数                                               | 有效返回值                | 功能                                       | 备注            |
-| -------------------- | -------------------------------------------------- | ------------------------- | ------------------------------------------ | --------------- |
-| addModel             | ModelVO model                                      | int                       | 添加机器学习模型                           | 返回值为modelId |
-| getAllModel          | String userId                                      | List\<ModelPojo>          | 获得某个用户的所有机器学习模型             |                 |
-| getAllDLModel        | String userId                                      | List\<DLGeneralModelPojo> | 获得所有深度学习模型                       |                 |
-| getDLModelDetailById | int modelId                                        | DLModelPojo               | 根据模型ID,获得某个深度学习模型的详细信息 |                 |
-| addDLModel           | DLModelVO model                                    | int                       | 添加深度学习模型                           | 返回值为modelId |
-| changeModel          | String modelId,String modelName,String modelTypeId | 无                        | 改变模型名称和类型                         |                 |
-| getModelType         | String modelTypeName                               | List\<ModelType>          | 获得某个模型类型的具体信息                 |                 |
-| trainModel           | String modelId                                     | Boolean                   | 使用机器学习模型进行训练,并返回训练结果   |                 |
-| deleteModelByModelId | String modelId                                     | Boolean                   | 通过模型ID删除某个机器学习/深度学习模型    |                 |
-| uploadTestFile       | String userId,MultipartFile file,String filename   | TestFileValuePojo         | 上传模型需要的测试文件                     |                 |
-| useModel             | String fileId,String modelId                       | List<Map<String, String>> | 使用模型进行预测                           |                 |
+| 方法名               | 参数                                               | 有效返回值                  | 功能                                       | 备注            |
+| -------------------- | -------------------------------------------------- | --------------------------- | ------------------------------------------ | --------------- |
+| addModel             | ModelVO model                                      | int                         | 添加机器学习模型                           | 返回值为modelId |
+| getAllModel          | String userId                                      | List\<ModelPojo>            | 获得某个用户的所有机器学习模型             |                 |
+| getAllDLModel        | String userId                                      | List\<DLGeneralModelPojo>   | 获得所有深度学习模型                       |                 |
+| getDLModelDetailById | int modelId                                        | DLModelPojo                 | 根据模型ID,获得某个深度学习模型的详细信息 |                 |
+| addDLModel           | DLModelVO model                                    | int                         | 添加深度学习模型                           | 返回值为modelId |
+| changeModel          | String modelId,String modelName,String modelTypeId | 无                          | 改变模型名称和类型                         |                 |
+| getModelType         | String modelTypeName                               | List\<ModelType>            | 获得某个模型类型的具体信息                 |                 |
+| trainModel           | String modelId                                     | Boolean                     | 使用机器学习模型进行训练,并返回训练结果   |                 |
+| deleteModelByModelId | String modelId                                     | Boolean                     | 通过模型ID删除某个机器学习/深度学习模型    |                 |
+| uploadTestFile       | String userId,MultipartFile file,String filename   | TestFileValuePojo           | 上传模型需要的测试文件                     |                 |
+| useModel             | String fileId,String modelId                       | List\<Map\<String, String>> | 使用模型进行预测                           |                 |
 
 # 6. FileController
 

+ 171 - 0
后端接口/Java-Service.md

@@ -0,0 +1,171 @@
+# 1. pojo
+
+# 2. LoginService
+
+```java
+    public LoginPojo verifyUser(String username, String password) throws Exception {
+        log.info("User login: {username: " + username + ", password: " + password + "}");
+        User user = userDao.findByUsername(username);
+        boolean equals = user.getPassword().equals(password);
+
+        String jwtToken="";  //保存jwt token秘钥
+        jwtToken = Jwts.builder().setSubject(username).claim("roles", "user").setIssuedAt(new Date())
+                .signWith(SignatureAlgorithm.HS256, "secretkey").compact();
+        return new LoginPojo(equals, equals ? user.getId() : null,jwtToken);
+    }
+```
+
+通过username找到user实体,并且判断password是否一致。然后获取一个jwtToken,返回。
+
+```java
+    public boolean addUser(User user){
+        User test = userDao.findByUsername(user.getUsername());
+        if(test==null) {
+            userDao.save(user);
+            return true;
+        }
+        else {       //已经存在该用户名的用户则添加失败
+            return false;
+        }
+    }
+```
+
+判断是否存在已有用户名,若不存在,则新增。
+
+# 3. ConfigService
+
+```java
+    public String addConfig(ConfigVO configVO) {
+        Config configInfo = new Config();
+        configInfo.setFileInfoId(Integer.parseInt(configVO.getFileInfoId()));
+        configInfo.setUserId(Integer.parseInt(configVO.getUserId()));
+        configInfo.setModelTypeId(Integer.parseInt(configVO.getModelTypeId()));
+        configInfo.setConfName(configVO.getConfName());
+        configInfo.setFieldIds(JSON.toJSON(configVO.getFieldIds()).toString());
+        int configId = configDao.save(configInfo).getId();
+        return String.valueOf(configId);
+    }
+```
+
+把configVO转化为config,然后保存config,返回configId。
+
+```java
+    public List<ConfigPojo> getAllConfigs(int userId) {
+        List<ConfigPojo> rsl = configDao.findByUserId(userId).stream().map((config) -> {
+            String fileName = fileInfoDao.findById(config.getFileInfoId()).getFilename();
+            String modelTypeName = modelTypeDao.findById(config.getModelTypeId()) == null ? "" :
+                    modelTypeDao.findById(config.getModelTypeId()).getModelTypeName();
+            return new ConfigPojo(String.valueOf(config.getFileInfoId()),
+                    fileName,
+                    String.valueOf(config.getId()),
+                    String.valueOf(config.getModelTypeId()),
+                    modelTypeName,
+                    config.getConfName(),
+                    JSONObject.parseArray(config.getFieldIds(), String.class).stream().map(fieldId ->
+                            headerInfoDao.findById(Integer.parseInt(fieldId))
+                    ).collect(Collectors.toList()));
+        }).collect(Collectors.toList());
+        return rsl;
+    }
+```
+
+通过userId找到所有的config,并将其他属性填充完成后返回。
+
+```java
+    public List<_ConfigPojo> _getAllConfigsByUserId(int userId) {
+        List<_ConfigPojo> rsl = configDao.findByUserId(userId).stream().map((config) -> {
+            String fileName = fileInfoDao.findById(config.getFileInfoId()).getFilename();
+            _ConfigPojo configPojo = new _ConfigPojo(String.valueOf(config.getFileInfoId()),
+                    fileName,
+                    String.valueOf(config.getId()),
+                    config.getConfName());
+            return configPojo;
+        }).collect(Collectors.toList());
+        return rsl;
+    }
+```
+
+通过userId找到所有的config,并将其他属性填充完成后返回。
+
+```java
+    public ConfigDetilePojo getConfigInfoByConfigId(int configId) {
+        List<ConfigModelPojo> modelInfos = new ArrayList<>();
+        List<Model> models = modelDao.findByConfigId(configId);
+        for (Model model : models) {
+            ModelType modelType = modelTypeDao.findById(model.getModelTypeId());
+            int flag = -1;
+            if (model.isTrained() && model.getResOfModel() != null) {
+                flag = 1;
+            } else if (model.isTrained() && model.getResOfModel() == null) {
+                flag = 0;
+            }
+            modelInfos.add(new ConfigModelPojo(
+                    model.getModelName(), modelType == null ? "自动训练" : modelType.getModelDetailName(), flag
+            ));
+        }
+
+        Config config = configDao.findById(configId);
+        int modelTypeId=config.getModelTypeId();
+        String modelTypeName = modelTypeDao.findById(config.getModelTypeId()) == null ? "" : modelTypeDao.findById(config.getModelTypeId()).getModelTypeName();
+        String modelTypeDes = modelTypeDao.findById(config.getModelTypeId()) == null ? "" : modelTypeDao.findById(config.getModelTypeId()).getModelDes();
+        String modelDetailDes = modelTypeDao.findById(config.getModelTypeId()) == null ? "" : modelTypeDao.findById(config.getModelTypeId()).getModelDetailDes();
+        ConfigDetilePojo configPojo = new ConfigDetilePojo(
+                String.valueOf(config.getId()),
+                String.valueOf(modelTypeId),
+                modelTypeName,
+                modelTypeDes,
+                modelDetailDes,
+                JSONObject.parseArray(config.getFieldIds(), String.class).stream().map(fieldId ->
+                        headerInfoDao.findById(Integer.parseInt(fieldId))
+                ).collect(Collectors.toList()),
+                modelInfos);
+        return configPojo;
+    }
+```
+
+首先通过configId获得所有使用该config的模型,并将这些模型封装为modelInfos。然后再获取其他属性,和刚刚得到的modelInfos一同封装进configPojo中。
+
+```java
+    public boolean changeConfig(int configId, String confName, List<String> trainFeatureList) {
+        Config configInfo = configDao.findById(configId);
+        if(configInfo==null){
+            return false;
+        }
+        configInfo.setConfName(confName);
+        configInfo.setFieldIds(JSON.toJSON(trainFeatureList).toString());
+        configDao.save(configInfo);
+        return true;
+    }
+```
+
+改变了某个configId对应的配置信息。
+
+```java
+    public boolean deleteConfigById(int configId) {
+        Config configInfo = configDao.findById(configId);
+        if(configInfo==null){
+            return false;
+        }
+        List<Model> modelList = modelDao.findByConfigId(configId);
+        if (modelList != null) {
+            for (Model model : modelList) {
+                modelDao.delete(model);
+            }
+        }
+        configDao.delete(configDao.findById(configId));
+        return true;
+    }
+```
+
+先删除了所有使用该config的model,再删除该config。
+
+```java
+    public List<HeaderInfo> getSelectedFeature(int fileId, String fieldName) {
+        log.info("FeatureSelector: ", fileId + ", " + fieldName);
+        List<HeaderInfo> res = featureProject.featureSelector(fileId, fieldName);
+        return res;
+    }
+```
+
+高级方法,使用了scala编写的FeatureProject类,暂时先忽略。不过,这个方法放在configService里面真的好吗?
+