From 6329f28c194e3fe25eb75b0527dc45ca7864b303 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 14 Jan 2025 14:00:41 +0800 Subject: [PATCH] update --- .../api/v1/app/data/ReactionResultControler.java | 2 +- .../java/a8k/app/dao/db/type/ReactionReport.java | 2 +- .../a8k/app/factory/FakeOptScanResultFactory.java | 15 +++++++-- .../app/service/data/ReactionRecordMgrService.java | 6 ++-- src/main/java/a8k/app/utils/ProjBuildinInfo.java | 24 ++++++++++++++- src/main/java/a8k/app/utils/ZSqlite.java | 3 -- .../a8k/extui/factory/A8kScanCurveFactory.java | 25 +++++++++++++++ .../java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java | 8 +++-- .../a8k/extui/page/extapp/A8kOptVerification.java | 17 ++-------- .../page/extapp/OptModuleParamCalibration.java | 23 ++------------ .../extsetting/db/ReactionRecordDebugPage.java | 26 ++++++++++++++-- .../FakeReactionRecordGeneratorPage.java | 36 +++++++++++++--------- src/main/java/a8k/extui/type/ExtUiTable.java | 16 +++++++--- 13 files changed, 133 insertions(+), 70 deletions(-) create mode 100644 src/main/java/a8k/extui/factory/A8kScanCurveFactory.java diff --git a/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java b/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java index c8453eb..341001d 100644 --- a/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java +++ b/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java @@ -31,7 +31,7 @@ public class ReactionResultControler { @PostMapping("/getAllRecords") public ApiRet> getAllRecords() { - return ApiRet.success(reactionRecordMgrService.getAll()); + return ApiRet.success(reactionRecordMgrService.getAllDesc()); } @PostMapping("/deleteAllRecords") diff --git a/src/main/java/a8k/app/dao/db/type/ReactionReport.java b/src/main/java/a8k/app/dao/db/type/ReactionReport.java index d9612a4..894ebdf 100644 --- a/src/main/java/a8k/app/dao/db/type/ReactionReport.java +++ b/src/main/java/a8k/app/dao/db/type/ReactionReport.java @@ -35,7 +35,7 @@ public class ReactionReport { //记录单个反应板的反应结果 public int id = 0; @Schema(description = "记录创建时间(ms)") - public Long creatDate = ZDateUtils.getTimestamp(); + public Date creatDate = new Date(); @Schema(description = "血液类型") public BloodType sampleBloodType = BloodType.WHOLE_BLOOD; //血液类型 diff --git a/src/main/java/a8k/app/factory/FakeOptScanResultFactory.java b/src/main/java/a8k/app/factory/FakeOptScanResultFactory.java index e82e101..8b4902e 100644 --- a/src/main/java/a8k/app/factory/FakeOptScanResultFactory.java +++ b/src/main/java/a8k/app/factory/FakeOptScanResultFactory.java @@ -21,9 +21,16 @@ public class FakeOptScanResultFactory { rawData.lasterGain = 1; rawData.scanGain = 1; rawData.rawData = new Integer[1200]; - for (int i = 0; i < 1200; i++) { - rawData.rawData[i] = i; + if (optType.equals(A8kOptType.FOPT)) { + for (int i = 0; i < 1200; i++) { + rawData.rawData[i] = i; + } + } else { + for (int i = 0; i < 1200; i++) { + rawData.rawData[i] = 1200 - i; + } } + optScanResult.rawData = rawData; //OptAlgoAnalysResult @@ -41,8 +48,10 @@ public class FakeOptScanResultFactory { optAlgoAnalysResult.pdT4T3R = 1.6; optAlgoAnalysResult.resultData = new double[250]; for (int i = 0; i < 250; i++) { - optAlgoAnalysResult.resultData[i] = i; + optAlgoAnalysResult.resultData[i] = optType.equals(A8kOptType.FOPT) ? i : 250 - i; } + + optScanResult.analysResult = optAlgoAnalysResult; //return diff --git a/src/main/java/a8k/app/service/data/ReactionRecordMgrService.java b/src/main/java/a8k/app/service/data/ReactionRecordMgrService.java index 3240e3d..3e1dfae 100644 --- a/src/main/java/a8k/app/service/data/ReactionRecordMgrService.java +++ b/src/main/java/a8k/app/service/data/ReactionRecordMgrService.java @@ -83,10 +83,12 @@ public class ReactionRecordMgrService { } - public List getAll() { - return reactionReportDao.getAll(); + public List getAllDesc() { + return reactionReportDao.getAllDesc(); } + + public void deleteAll() { List records = reactionReportDao.getAll(); for (ReactionReport record : records) { diff --git a/src/main/java/a8k/app/utils/ProjBuildinInfo.java b/src/main/java/a8k/app/utils/ProjBuildinInfo.java index f7813ec..bcd9157 100644 --- a/src/main/java/a8k/app/utils/ProjBuildinInfo.java +++ b/src/main/java/a8k/app/utils/ProjBuildinInfo.java @@ -4,6 +4,7 @@ import a8k.app.dao.db.type.OptCfg; import a8k.app.dao.db.type.ProjectBaseInfo; import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; @@ -45,7 +46,7 @@ public class ProjBuildinInfo implements Serializable { public List optcfg; - public ProjBuildinInfo(){} //for json + public ProjBuildinInfo() {} //for json public A8kOptType getOptType(Integer subProjIndex) { for (OptCfg optCfg : optcfg) { @@ -56,6 +57,27 @@ public class ProjBuildinInfo implements Serializable { return null; } + @JsonIgnore + public OptCfg getFoptCfg() { + for (OptCfg optCfg : optcfg) { + if (optCfg.optType.equals(A8kOptType.FOPT)) { + return optCfg; + } + } + return null; + } + + @JsonIgnore + public OptCfg getToptCfg() { + for (OptCfg optCfg : optcfg) { + if (optCfg.optType.equals(A8kOptType.TOPT)) { + return optCfg; + } + } + return null; + } + + public ProjBuildinInfo(ProjectBaseInfo baseInfo, List optInfos) { //遍历所有ProjectBaseInfo字段,赋值给ProjBuildinInfo for (var field : baseInfo.getClass().getDeclaredFields()) { diff --git a/src/main/java/a8k/app/utils/ZSqlite.java b/src/main/java/a8k/app/utils/ZSqlite.java index 65447d1..8a7a18c 100644 --- a/src/main/java/a8k/app/utils/ZSqlite.java +++ b/src/main/java/a8k/app/utils/ZSqlite.java @@ -43,7 +43,6 @@ public class ZSqlite { return jdbcTemplate.query("select * from " + tableName, this::rowMapperList); } - public List getAllDesc() { return jdbcTemplate.query("select * from " + tableName + " order by id desc", this::rowMapperList); } @@ -195,8 +194,6 @@ public class ZSqlite { } - - public void resetDBData() { deleteAll(); tryInitDBData(); diff --git a/src/main/java/a8k/extui/factory/A8kScanCurveFactory.java b/src/main/java/a8k/extui/factory/A8kScanCurveFactory.java new file mode 100644 index 0000000..b4dfca5 --- /dev/null +++ b/src/main/java/a8k/extui/factory/A8kScanCurveFactory.java @@ -0,0 +1,25 @@ +package a8k.extui.factory; + +import a8k.app.utils.ZList; +import a8k.extui.type.ret.A8kScanCurve; + +import java.util.ArrayList; +import java.util.List; + +public class A8kScanCurveFactory { + + + + public static A8kScanCurve createScanCurve1200Point(Integer[] optScanResult) { + List refCurve = new ArrayList<>(); + for (int i = 1; i < 6; i++) { + refCurve.add((int) (40 * 4.8 * i)); + } + + var result = new A8kScanCurve(); + result.refCurve = refCurve; + result.scanDataCurve = ZList.of(optScanResult); + return result; + } + +} diff --git a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java index 66ad8e6..d9faeba 100644 --- a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java +++ b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java @@ -128,9 +128,7 @@ public class ExtApiPageGroupCfgMgr { new Menu("高级应用", List.of( new Menu("光学标定与验证", List.of( new Menu(A8kOptVerification.class, "光学模组验证"), - new Menu(OptModuleParamCalibration.class, "光学模块参数校准"), - new Menu(OptFormulaTestPageV2.class, "光学公式测试1"), - new Menu(OptFormulaTestPage.class, "光学公式测试2") + new Menu(OptModuleParamCalibration.class, "光学模块参数校准") )), new Menu("验证(过检专用)", List.of( new Menu(P01PipetteGunVerification.class, "移液枪验证"), @@ -187,6 +185,10 @@ public class ExtApiPageGroupCfgMgr { )), new Menu("压力测试", List.of( new Menu(PipetteGunStressTest.class, "移液枪压力测试") + )), + new Menu("代码测试", List.of( + new Menu(OptFormulaTestPageV2.class, "光学公式测试1"), + new Menu(OptFormulaTestPage.class, "光学公式测试2") )) )) ); diff --git a/src/main/java/a8k/extui/page/extapp/A8kOptVerification.java b/src/main/java/a8k/extui/page/extapp/A8kOptVerification.java index bf29126..20fa333 100644 --- a/src/main/java/a8k/extui/page/extapp/A8kOptVerification.java +++ b/src/main/java/a8k/extui/page/extapp/A8kOptVerification.java @@ -5,8 +5,8 @@ import a8k.app.a8kproj.optalgo.type.OptScanResult; import a8k.app.a8ktype.device.BloodType; import a8k.app.a8ktype.state.SampleInfo; import a8k.app.a8ktype.type.ReactionResult; -import a8k.app.controler.filemgr.StorageControler; import a8k.app.dao.db.type.ProjExtInfoCard; +import a8k.extui.factory.A8kScanCurveFactory; import a8k.app.service.data.ProjIdCardInfoMgrService; import a8k.app.service.lowerctrl.DeviceInitCtrlService; import a8k.app.utils.ProjInfo; @@ -24,7 +24,6 @@ import a8k.app.a8ktype.device.ConsumableGroup; import a8k.app.a8ktype.device.IncubatorPos; import a8k.app.a8ktype.exception.AppException; import a8k.app.utils.ProjBuildinInfo; -import a8k.app.utils.ZList; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; @@ -34,7 +33,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Objects; @Component public class A8kOptVerification { @@ -131,16 +129,7 @@ public class A8kOptVerification { } - A8kScanCurve createScanCurve1200Point(Integer[] optScanResult) { - List refCurve = new ArrayList<>(); - for (int i = 1; i < 6; i++) { - refCurve.add((int) (40 * 4.8 * i)); - } - var result = new A8kScanCurve(); - result.refCurve = refCurve; - result.scanDataCurve = ZList.of(optScanResult); - return result; - } + static class OptScanReport { public A8kOptType optType; @@ -164,7 +153,7 @@ public class A8kOptVerification { public void generateOptReport(ProjBuildinInfo info, Integer subProjIndex, OptScanResult optScanResult) throws IOException { OptScanReport report = new OptScanReport(); - report.optScanCurve = createScanCurve1200Point(optScanResult.rawData.rawData); + report.optScanCurve = A8kScanCurveFactory.createScanCurve1200Point(optScanResult.rawData.rawData); report.optType = info.optcfg.get(subProjIndex).optType; report.optScanResult = optScanResult; report.projInfo = info; diff --git a/src/main/java/a8k/extui/page/extapp/OptModuleParamCalibration.java b/src/main/java/a8k/extui/page/extapp/OptModuleParamCalibration.java index 25ef5a9..57e87d7 100644 --- a/src/main/java/a8k/extui/page/extapp/OptModuleParamCalibration.java +++ b/src/main/java/a8k/extui/page/extapp/OptModuleParamCalibration.java @@ -2,6 +2,7 @@ package a8k.extui.page.extapp; import a8k.app.a8ktype.device.ConsumableGroup; import a8k.app.a8ktype.device.IncubatorPos; +import a8k.extui.factory.A8kScanCurveFactory; import a8k.app.service.lowerctrl.DeviceInitCtrlService; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ret.A8kScanCurve; @@ -12,7 +13,6 @@ import a8k.app.service.param.optparam.OptModuleExtParamsMgr; import a8k.app.a8ktype.param.optpos.OptModuleExtParam; import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; import a8k.app.a8ktype.exception.AppException; -import a8k.app.utils.ZList; import a8k.app.utils.opt_gain_convert.OptGainConvert; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; @@ -20,9 +20,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; @@ -101,22 +99,7 @@ public class OptModuleParamCalibration { optScanModuleCtrlService.dropPlate(); } - - A8kScanCurve createScanCurve1200Point(Integer[] optScanResult) { - // Integer[] optScanResult250 = A8kOptAlgoUtils.supperSamplingAndSubSampling(optScanResult); - List refCurve = new ArrayList<>(); - for (int i = 1; i < 6; i++) { - refCurve.add((int) (40 * 4.8 * i)); - } - - var result = new A8kScanCurve(); - result.refCurve = refCurve; - result.scanDataCurve = ZList.of(optScanResult); - return result; - } - A8kScanCurve fcurveCache = null; - public void setFOptScanShift(Integer shift) throws AppException { if (shift < 0) { throw AppException.ofAECodeError("扫描偏移量必须大于0"); @@ -153,7 +136,7 @@ public class OptModuleParamCalibration { Integer rawScanGain = OptGainConvert.scanerToRawGain(A8kOptType.FOPT, scanGain); Integer rawLasterGain = optModuleExtParamsMgr.getOptLasterRawGain(A8kOptType.FOPT); var result = optScanModuleCtrlService.startOptScan(A8kOptType.FOPT, rawLasterGain, rawScanGain); - fcurveCache = createScanCurve1200Point(result); + fcurveCache = A8kScanCurveFactory.createScanCurve1200Point(result); return fcurveCache; } @@ -191,7 +174,7 @@ public class OptModuleParamCalibration { Integer rawLasterGain = optModuleExtParamsMgr.getOptLasterRawGain(A8kOptType.TOPT); var result = optScanModuleCtrlService.startOptScan(A8kOptType.TOPT, rawLasterGain, rawScanGain); - return createScanCurve1200Point(result); + return A8kScanCurveFactory.createScanCurve1200Point(result); } diff --git a/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordDebugPage.java b/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordDebugPage.java index 1810feb..50a03f2 100644 --- a/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordDebugPage.java +++ b/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordDebugPage.java @@ -3,6 +3,8 @@ package a8k.extui.page.extsetting.db; import a8k.app.a8ktype.exception.AppException; import a8k.app.controler.filemgr.StorageControler; import a8k.app.dao.db.type.ReactionReport; +import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; +import a8k.extui.factory.A8kScanCurveFactory; import a8k.app.service.data.FileMgrService; import a8k.app.service.data.ProjIdCardInfoMgrService; import a8k.app.service.data.ProjInfoMgrService; @@ -10,6 +12,7 @@ import a8k.app.service.data.ReactionRecordMgrService; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ExtUIPageCfg; import a8k.extui.type.ExtUiTable; +import a8k.extui.type.ret.A8kScanCurve; import a8k.extui.type.ret.ExtUIDownloadTasks; import a8k.extui.type.ret.FileToBeDownload; import jakarta.annotation.PostConstruct; @@ -38,7 +41,7 @@ public class ReactionRecordDebugPage { FileMgrService fileMgrService; public ExtUiTable getReactionRecordList() { - var results = reactionRecordMgrService.getAll(); + var results = reactionRecordMgrService.getAllDesc(); return new ExtUiTable(ReactionReport.class, results); } @@ -53,8 +56,8 @@ public class ReactionRecordDebugPage { public ExtUIDownloadTasks downloadOptData(Integer id) throws IOException, AppException { ExtUIDownloadTasks tasks = new ExtUIDownloadTasks(); ReactionReport report = reactionRecordMgrService.findById(id); - if( report.detailOptData.isEmpty()){ - throw AppException.ofSimplePrompt("没有光学数据"); + if (report.detailOptData.isEmpty()) { + throw AppException.ofSimplePrompt("没有光学数据"); } for (var optData : report.detailOptData) { tasks.urls.add(fileMgrService.storageOptReport(report.projName, report.projId, optData)); @@ -67,6 +70,20 @@ public class ReactionRecordDebugPage { } + public A8kScanCurve displayOptCurve(Integer id, A8kOptType optType) throws AppException { + ReactionReport report = reactionRecordMgrService.findById(id); + if (report == null) { + throw AppException.ofSimplePrompt("没有找到记录"); + } + for (var optdate : report.detailOptData) { + if (optdate.rawData.optType.equals(optType)) { + return A8kScanCurveFactory.createScanCurve1200Point(optdate.rawData.rawData); + } + } + throw AppException.ofSimplePrompt("当前项目没有%s光学扫描曲线", optType); + } + + @PostConstruct void init() { ExtUIPageCfg page = new ExtUIPageCfg(this); @@ -79,6 +96,9 @@ public class ReactionRecordDebugPage { page.addFunction("导出所有记录", this::exportReactionRecords); page.addFunction("导出指定项目光学数据", this::downloadOptData); + page.newGroup("光学曲线"); + page.addFunction("查看光学曲线", this::displayOptCurve); + extApiPageMgr.addPage(page); } } diff --git a/src/main/java/a8k/extui/page/test/frond_end_test/FakeReactionRecordGeneratorPage.java b/src/main/java/a8k/extui/page/test/frond_end_test/FakeReactionRecordGeneratorPage.java index d44e0e1..6b4de44 100644 --- a/src/main/java/a8k/extui/page/test/frond_end_test/FakeReactionRecordGeneratorPage.java +++ b/src/main/java/a8k/extui/page/test/frond_end_test/FakeReactionRecordGeneratorPage.java @@ -44,17 +44,18 @@ public class FakeReactionRecordGeneratorPage { void init() { ExtUIPageCfg page = new ExtUIPageCfg(this); page.addFunction("添加1条反应结果记录", this::addVirtualReactionRecord); - page.addFunction("添加100条反应结果记录", this::add100VirtualReactionRecord); + page.addFunction("添加多条反应记录(每个项目添加一条)", this::addSomeVirtualReactionRecord); extApiPageMgr.addPage(page); } - public void add100VirtualReactionRecord() throws AppException { - for (int i = 0; i < 100; i++) { - addVirtualReactionRecord(String.format("SAMPLE%03d", i)); + public void addSomeVirtualReactionRecord() throws AppException { + var allproj = projInfoMgrService.getAllProjBuildInInfo(); + for (var proj : allproj) { + addVirtualReactionRecord("SAMPLEID-123456", proj.projId); } } - public void addVirtualReactionRecord(String sampleId) throws AppException { + public void addVirtualReactionRecord(String sampleId, Integer projNum) throws AppException { SampleInfo sampleInfo = new SampleInfo(); sampleInfo.sampleId = sampleId; @@ -64,7 +65,7 @@ public class FakeReactionRecordGeneratorPage { sampleInfo.sampleBarcode = "BARCODE-111222333"; sampleInfo.userid = "USERID-ABCDEFG"; - ProjInfo projInfo = new ProjInfo(projInfoMgrService.getProjBuildInInfo(1), ProjExtInfoCardFactory.buildProjExtInfoCard(1, "LOTID123")); + ProjInfo projInfo = new ProjInfo(projInfoMgrService.getProjBuildInInfo(projNum), ProjExtInfoCardFactory.buildProjExtInfoCard(1, "LOTID123")); A8kResultBuilderFn resultBuilder0 = new A8kResultBuilderFn(A8kResultUnit.coi, A8kResultUnit.iuPml, A8kResultUnit.iuPml, 2.0, 2.0, 3.0, 3.0); A8kResultBuilderFn resultBuilder1 = new A8kResultBuilderFn(A8kResultUnit.coi, A8kResultUnit.iuPml, A8kResultUnit.iuPml, 2.0, 2.0, 3.0, 3.0); @@ -72,18 +73,25 @@ public class FakeReactionRecordGeneratorPage { List reactionResults = new ArrayList<>(); - reactionResults.add(new ReactionResult("Tn-I", "Tn-I", 1.0, resultBuilder0.toResultUnitConverters())); - reactionResults.add(new ReactionResult("CK-MB", "CK-MB", 2.0, resultBuilder1.toResultUnitConverters())); - reactionResults.add(new ReactionResult("Myoglobin", "MG", 3.0, resultBuilder2.toResultUnitConverters())); + for (int i = 0; i < projInfo.buildIn.getSubProjNum(); i++) { + if (i == 0) + reactionResults.add(new ReactionResult("Tn-I", "Tn-I", 1.0, resultBuilder0.toResultUnitConverters())); + if (i == 1) + reactionResults.add(new ReactionResult("CK-MB", "CK-MB", 2.0, resultBuilder1.toResultUnitConverters())); + if (i == 2) + reactionResults.add(new ReactionResult("Myoglobin", "MG", 3.0, resultBuilder2.toResultUnitConverters())); + } - List optScanResults = new ArrayList<>(); - optScanResults.add(FakeOptScanResultFactory.buildOptScanResult(A8kOptType.FOPT)); - optScanResults.add(FakeOptScanResultFactory.buildOptScanResult(A8kOptType.TOPT)); + List optScanResults = new ArrayList<>(); + if (projInfo.buildIn.getFoptCfg() != null) { + optScanResults.add(FakeOptScanResultFactory.buildOptScanResult(A8kOptType.FOPT)); + } + if (projInfo.buildIn.getToptCfg() != null) { + optScanResults.add(FakeOptScanResultFactory.buildOptScanResult(A8kOptType.TOPT)); + } reactionRecordMgrService.addRecord(sampleInfo, projInfo, optScanResults, reactionResults); - - } } diff --git a/src/main/java/a8k/extui/type/ExtUiTable.java b/src/main/java/a8k/extui/type/ExtUiTable.java index 93b7b3a..f08fa6e 100644 --- a/src/main/java/a8k/extui/type/ExtUiTable.java +++ b/src/main/java/a8k/extui/type/ExtUiTable.java @@ -2,13 +2,12 @@ package a8k.extui.type; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.databind.ObjectMapper; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.text.SimpleDateFormat; +import java.util.*; public class ExtUiTable { @@ -81,6 +80,7 @@ public class ExtUiTable { || field.getType().equals(Boolean.class) || field.getType().equals(Character.class) || field.getType().equals(Byte.class) + || field.getType().equals(Date.class) || field.getType().equals(Short.class)) { this.columns.add(new TableColumn(field.getName(), field.getName())); if (this.columns.size() == 1) { @@ -94,7 +94,13 @@ public class ExtUiTable { if (datas == null || datas.isEmpty()) { this.datas.add(emptyData); } else { - this.datas.addAll(datas); + + ObjectMapper mapper = new ObjectMapper(); + mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")); + for (Object data : datas) { + var val = mapper.valueToTree(data); + this.datas.add(val); + } }