diff --git a/src/main/java/mjkf/xinke/main/common/property/PathProperty.java b/src/main/java/mjkf/xinke/main/common/property/PathProperty.java index 2685273..9fc49cc 100644 --- a/src/main/java/mjkf/xinke/main/common/property/PathProperty.java +++ b/src/main/java/mjkf/xinke/main/common/property/PathProperty.java @@ -9,5 +9,5 @@ import org.springframework.stereotype.Component; @Component public class PathProperty { private String historyFile; - + private String predictFileDir; } diff --git a/src/main/java/mjkf/xinke/main/controller/MaterialController.java b/src/main/java/mjkf/xinke/main/controller/MaterialController.java index c2ef8eb..36fec31 100644 --- a/src/main/java/mjkf/xinke/main/controller/MaterialController.java +++ b/src/main/java/mjkf/xinke/main/controller/MaterialController.java @@ -166,5 +166,8 @@ public class MaterialController { return FuHttpResponse.Builder().dataResponse(result).build(); } + // todo-1 预测模型接口 + // 遍历目录下的所有json文件 解析入库 + } diff --git a/src/main/java/mjkf/xinke/main/controller/PredictController.java b/src/main/java/mjkf/xinke/main/controller/PredictController.java new file mode 100644 index 0000000..9e75a32 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/controller/PredictController.java @@ -0,0 +1,88 @@ +package mjkf.xinke.main.controller; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileReader; +import cn.hutool.json.JSONException; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.jgy.xxs.core.http.resp.HttpResponse; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import mjkf.xinke.main.common.http.FuHttpResponse; +import mjkf.xinke.main.common.property.PathProperty; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + + +@RestController +@RequestMapping("/predict") +public class PredictController { + @Resource + PathProperty pathProperty; + + @ApiOperation("获取预测数据") + @GetMapping("/") + public HttpResponse get( + ) throws Exception { +// 指定目录路径 + String directoryPath = pathProperty.getPredictFileDir(); + List files = FileUtil.loopFiles(directoryPath, file -> file.getName().endsWith(".json")); + List result = new ArrayList(); + for (File file : files) { + FileReader fileReader = new FileReader(file); + String jsonContent = fileReader.readString(); + JSONObject jsonObject; + try { + jsonObject = JSONUtil.parseObj(jsonContent); + result = parseJson(jsonObject); + System.out.println("File: " + file.getName()); + System.out.println("JSONObject: " + jsonObject); + } catch (JSONException e) { + System.out.println("JSONException: " + file.getName()); + } + } + return FuHttpResponse.Builder().dataResponse(result).build(); + } + + // todo-3 遍历目录下的所有json文件 解析入库 + + private List parseJson(JSONObject jsonObject) { + var month = jsonObject.getStr("预测月份"); + var data = jsonObject.getJSONArray("数据"); + var result = new ArrayList(); + for (var item : data) { + var dataPredict = new DataPredict((JSONObject) item, month); + result.add(dataPredict); + } + return result; + } + + @Data + class DataPredict { + private Integer year; + private Integer month; + private Double price; + private String materialId; + private String name; + + public DataPredict() { + } + + public DataPredict(JSONObject item, String month) { + this.materialId = item.getStr("材料编号"); + this.name = item.getStr("材料名称"); + this.price = item.getDouble("预测价格"); + // 解析字符串日期为 Date 对象 + var date = DateUtil.parse(month, "yyyyMM"); + // 获取年份和月份 + this.year = DateUtil.year(date); + this.month = DateUtil.month(date) + 1; + } + } + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index d49b5e8..9462af6 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -22,4 +22,7 @@ main: api: host: - data-tool: http://localhost:7778 \ No newline at end of file + data-tool: http://localhost:7778 + +path: + predict-file-dir: C:\Users\Administrator\Documents\WeChat Files\wslshanlin\FileStorage\File\2024-07 \ No newline at end of file diff --git a/src/main/resources/application-huawei.yml b/src/main/resources/application-huawei.yml index e06ea80..f7b5d65 100644 --- a/src/main/resources/application-huawei.yml +++ b/src/main/resources/application-huawei.yml @@ -19,4 +19,7 @@ main: api: host: - data-tool: http://192.168.1.3:50000 \ No newline at end of file + data-tool: http://192.168.1.3:50000 + +path: + predict-file-dir: /predict \ No newline at end of file diff --git a/src/test/java/mjkf/xinke/GetPredictDataTest.java b/src/test/java/mjkf/xinke/GetPredictDataTest.java new file mode 100644 index 0000000..8e82c1c --- /dev/null +++ b/src/test/java/mjkf/xinke/GetPredictDataTest.java @@ -0,0 +1,65 @@ +package mjkf.xinke; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileReader; +import cn.hutool.json.JSONException; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import lombok.Data; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class GetPredictDataTest { + + @org.junit.Test + public void test() throws Exception { + // 指定目录路径 + String directoryPath = "C:\\Users\\Administrator\\Documents\\WeChat Files\\wslshanlin\\FileStorage\\File\\2024-07"; + // 获取目录下的所有文件 + List files = FileUtil.loopFiles(directoryPath, file -> file.getName().endsWith(".json")); + for (File file : files) { + // 读取文件内容 + FileReader fileReader = new FileReader(file); + String jsonContent = fileReader.readString(); + // 解析 JSON 内容为 JSONObject + JSONObject jsonObject; + try { + jsonObject = JSONUtil.parseObj(jsonContent); + parseJson(jsonObject); + // 打印解析后的 JSONObject + System.out.println("File: " + file.getName()); + System.out.println("JSONObject: " + jsonObject); + } catch (JSONException e) { + System.out.println("JSONException: " + file.getName()); + } + } + } + + private List parseJson(JSONObject jsonObject) { + var month = jsonObject.getStr("预测月份"); + var data = jsonObject.getJSONArray("数据"); + var result = new ArrayList(); + for (var item: data) { + var dataPredict = new DataPredict((JSONObject)item); + result.add(dataPredict); + } + return result; + } + + @Data + class DataPredict { + private Integer year; + private Integer month; + private Double price; + private String materialId; + private String name; + public DataPredict () {} + public DataPredict (JSONObject item) { + this.materialId = item.getStr("材料编号"); + this.name = item.getStr("材料名称"); + this.price = item.getDouble("预测价格"); + } + } +}