From 61f328d577993f53bc9a6a778c6ca05a6a446cdc Mon Sep 17 00:00:00 2001 From: nieziyan Date: Wed, 6 Sep 2023 20:07:10 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat=EF=BC=9AExportFile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jeecg-boot-base-core/pom.xml | 20 +++++ .../org/jeecg/common/util/ExportUtil.java | 68 +++++++++++++++++ .../jeecg/modules/base/dto/QCResultDto.java | 14 ++++ .../modules/entity/vo/TableQCResult.java | 5 ++ .../resources/excelTemplate/SampleInfo-G.xlsx | Bin 0 -> 19456 bytes .../modules/spectrum/Sample_G_Analysis.java | 2 +- .../org/jeecg/common/util/GammaFileUtil.java | 69 +++++++++--------- .../modules/controller/GammaController.java | 22 ++++-- .../SpectrumAnalysesController.java | 25 ++++++- .../jeecg/modules/service/IGammaService.java | 10 ++- .../service/ISpectrumAnalysisService.java | 4 +- .../service/impl/GammaServiceImpl.java | 38 ++++++++-- .../impl/SpectrumAnalysisServiceImpl.java | 26 ++++++- .../template/export/SampleInfo-G.xls | Bin 0 -> 19968 bytes .../main/resources/template/export/export.xls | Bin 0 -> 18944 bytes 15 files changed, 249 insertions(+), 54 deletions(-) create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/QCResultDto.java create mode 100644 jeecg-boot-base-core/src/main/resources/excelTemplate/SampleInfo-G.xlsx create mode 100644 jeecg-module-spectrum-analysis/src/main/resources/template/export/SampleInfo-G.xls create mode 100644 jeecg-module-spectrum-analysis/src/main/resources/template/export/export.xls diff --git a/jeecg-boot-base-core/pom.xml b/jeecg-boot-base-core/pom.xml index 1e5181eb..a2a12189 100644 --- a/jeecg-boot-base-core/pom.xml +++ b/jeecg-boot-base-core/pom.xml @@ -258,5 +258,25 @@ commons-net 3.3 + \ No newline at end of file diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/ExportUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/ExportUtil.java index 4b40c13a..d9f25273 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/ExportUtil.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/ExportUtil.java @@ -1,10 +1,19 @@ package org.jeecg.common.util; +import cn.hutool.core.util.ObjectUtil; +import org.apache.poi.ss.usermodel.Workbook; +import org.jeecg.modules.base.dto.QCResultDto; +import org.jeecgframework.poi.excel.ExcelExportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.TemplateExportParams; + import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; public class ExportUtil { @@ -33,4 +42,63 @@ public class ExportUtil { response.setHeader("Content-disposition", "attachment;filename=" + name); return response.getOutputStream(); } + + public static void exportXls(HttpServletResponse response, Class target, + List data, String sheetName, String fileName){ + ExportParams params = new ExportParams(); + params.setSheetName(sheetName); + Workbook workbook = null; + OutputStream outputStream = null; + try { + // 设置文件名、Excel类型(xls|xlsx) + outputStream = ExportUtil.xls(response,fileName); + workbook = ExcelExportUtil. + exportExcel(params, target, data); + workbook.write(outputStream); + } catch (IOException e) { + e.printStackTrace(); + }finally { + try { + if (ObjectUtil.isNotNull(outputStream)) + outputStream.close(); + if (ObjectUtil.isNotNull(workbook)) + workbook.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public static void exportXls(HttpServletResponse response, Class target, List data){ + exportXls(response, target, data, "sheet1", "file"); + } + + public static TemplateExportParams excelTemplate(String name){ + //return new TemplateExportParams("C:/Users/a/Desktop/"+ name +".xlsx"); + return new TemplateExportParams("E:\\Code\\IDEA\\AnalysisSystemForRadionuclide\\jeecg-boot-base-core\\src\\main\\resources\\excelTemplate\\"+ name +".xlsx"); + } + + public static void exportXls(HttpServletResponse response, String template, + Map data, String fileName){ + TemplateExportParams params = excelTemplate(template); + Workbook workbook = null; + OutputStream outputStream = null; + try { + // 设置文件名、Excel类型(xls|xlsx) + outputStream = ExportUtil.xls(response,fileName); + workbook = ExcelExportUtil.exportExcel(params, data); + workbook.write(outputStream); + } catch (IOException e) { + e.printStackTrace(); + }finally { + try { + if (ObjectUtil.isNotNull(outputStream)) + outputStream.close(); + if (ObjectUtil.isNotNull(workbook)) + workbook.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/QCResultDto.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/QCResultDto.java new file mode 100644 index 00000000..4d9dc19d --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/QCResultDto.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.base.dto; + +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +@Data +public class QCResultDto { + + @Excel(name = "Name",orderNum = "1",width = 30) + private String fieldName; + + @Excel(name = "Value",orderNum = "2",width = 10) + private Object fieldValue; +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/TableQCResult.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/TableQCResult.java index c67d472a..d036c0cc 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/TableQCResult.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/TableQCResult.java @@ -1,18 +1,23 @@ package org.jeecg.modules.entity.vo; import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; import java.io.Serializable; @Data public class TableQCResult implements Serializable { + @Excel(name = "Name",orderNum = "1",width = 20) private String name; + @Excel(name = "Flag",orderNum = "2",width = 10) private String flag; + @Excel(name = "Value",orderNum = "3",width = 15) private double value; + @Excel(name = "Standard",orderNum = "4",width = 30) private String standard; } diff --git a/jeecg-boot-base-core/src/main/resources/excelTemplate/SampleInfo-G.xlsx b/jeecg-boot-base-core/src/main/resources/excelTemplate/SampleInfo-G.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b956e69e7945596d63df34233452a4a4d1394cca GIT binary patch literal 19456 zcmeHP30M@z^6y<1SVWXt1cBuc5CJ(v5Th)33*M+Po`{R6C<+E8N?5NL1r^1hC{d%q z`#z(1prVLkyzfLs#50~xgDATHsvc%{nVsE-zI^Zd=Y8q@dS<%1>ep4($4qz6?76dM zcYfM#TS_>g4bdYX6-LBBjV^#|j5L@MB7qA`e^e+Glm-X5{3ra4Jn#W@b%A=*gD8Ti z4-xC!5TY2O5yUzWjUm>BXacbw#QG4S2@o@g<`69)T0*pfXbrIeL>q_=A=*N;gV+e7 zJwykHju5fkV04CSSGDxt$bEl%ReO;H_)UPm+@6eub0SHBny7uSh8Dv*K?q_JF&+si zphwbyIWfnfE;92)cdiSZASuPh2B9C6o=8TMVN{RN4Dl0==0qr9%g1wVL{Y>1Rt#r* z5(Sn|0?XTxXgEgK20)F+63WLh5c^MU%SZ7L#!cY8-sEdC27b}h_nn~@VyRD%GJ%YQ z>#-=HC3sZZkM68(`Pip-RpS|np%)wIlYEmihDYQAVgQ}LlnBW-(GfTjau?!2G7iRh zK{S#4_d+<;AzFYs6o7+U!<7I=6HG&$!_k5sw^EJ+^w^q?M1;u4Rrv-32i~1t3#629 zE1sLoJMj=m(?QZ;+)(qa5Tr@O%1z z-rYZ!E++gqMq21C$N@B3qg*pB{6<>%O||g1(L%3F=>m;%Ew#|K*;R)JKMs7&ZpSBs0Zf*G32asOS0*8}9S_FgO9^Ft=&hx2ElU9M0e!XDY?WO6j$Os2^zpKU$c!Vvw$_0L;?{odQ)9 zqTLS0Ts~cE7N(t#DL53Gq6&qzYXoTuLko{xTsTeZ_&9VG)eQQS6%h=CM=kYQY67)1 zka$2;rw;^gJBV6B%e3VeQMD0m!mXfn+Hr+hrTI%`a+$K*L&*|d;<_|Y0o|cbrG&gu zNT9c}p+JIk0VLlj;Qsfzc61zo`S`Wb5tWbsf0-_TN>c^K&jdya>i@TF4nxPe2K5g- zj7TL?2@y4;^@4K^N?&AVw%B;FF%fxEI)R?bheM#T^3k>7<9vp%Tmqeu4+rN%HTkWn zJ~$tubZ9?Rf5O^p#EXM-Cq90hPf>cVnVGe*HP~xQ@ioh}r*uP>pHnW*$@uVbp2kPV zxf>rH=W>*Oi9oGLVH(HSh4VZ})caw_!;VB`MCmx6 zq~$8x14GB>ScV=O%kT$Ler@%xS#BWZ$9ZbCT|>cMn65H<;#{_x9xavlD*b@-VoF!G zTc&;DoVO;Ov8(p_`0CVO6UXrr`I-Ku=?BJdn)CoI_)PoM)Q7QG6Q_k197calejCcK zNpGnIhv|=+{0tqc1;%>l1=ta2D3DAMTaqbQk;)K89AgT%ri#NzY7IK}56 z7Rz9R38gV>U@Wa3JpBn%#S1tf*mVqHF$JcJaFv#prktqO;h`Dw(8N46R0{DFB{@nw zR0?UKp~*^GwNhNmuzj`)4@wWv;GYf+uX z)}lI1S&NDiC7u>P;p&;nPuTz1z_vv;jb|-pA zQlOS4I4K3V-9w8boIyYjW--_)nT1O@(ZD)_$1ZNubpe6@7z7tCRaH{Gs#QZ1ny5Z# zF{d#FVa!p4@`2RC95)KW3{?IBhHAyKK2amFje|Q-xdV@Cpb8BQRn|4z#MNnR6IZ9P zO8mZpB~Wsl2>A4Ns}B z?`dgBo}d)l8fCHgfW!v24dA4Q4O&2&LOu(^>sX36>u$X${+O+o?y#=j<%$W2iXR(iEdFhv;AeHlU4d|6KoZG@Jf z4d$@gSja`74UE5X1FDr3YSmmv8Jb$TgI2mEn4%0}HyZY?o()9t;7N4Yv2WX;8f-Rz@Zc@fj3RYbQhHfdXH#PVYnOhMOofV}KW`mkUNbz2ZuKB7bAyO1Oc02i6k^VZ$+n65usRJ!eO#0mqs=HAFiMq=kmzA=bX&*x zRzo%1rq>YMhB*wYA@RYnEVaMpSY``jS!#b4u^A!?GrhZMAPO1*BIYoxPB6~t^k^WD zM}2g96d$|LE-TpA((ovD3$91)H9X381t+LDo!asBG6$X7sh|T8TKoNj584r+bxE*3 zZLV8uY*yUf=&Vy~wuw2xcC${c`Ji2NYRy7h!5vJax^Vd6R##(<>SBi>D-xs$fkO`$ zqKO6sJKQ*tVBNms8_7I%`c4JiQn&B;pquLS9Sdy*`^Or-!=A%6+*`wNwzoLJF09U) z2m>!_ha20f@ zZo~PYo9i^3fsPSdlNhzTf;F`T582`~b+grSkk%tYPlP*;gv{!8SBhsg;5zq&IN2Ck zGwnRM$H?%gI4yxDrf8#6vaM4gH3uRtPOEd$>#osbqesXReI|{GH!0~_=a|G)TAKRP z#LVkKG5H?thwV7MCI3&-HrF<+Xyt_!H?NkLO%M9@w&mqz5hne;at%%9$j|ifnVWb2F1fP1>1C(qUcV3C=Q^r& zddGebFIF_U+x|&Yw>rY$4+1n$rFNu!_PLudBbUIEJvvWAZ9i1_Y5%SXc0r~G8$3+= z@{fZHhCgxfcQ)M9=B`_^dAlxi8m%8RYO&eGeUc`v_FENimrh+Z@_fY9TiOllQP8uFsa0mX*9P*|$IOO?3Fdm=gWykwsevZFuL< zP0xB^^T%%|cAP%n=l$|b4-+$4lV@*}ys9?lJAOM(|LI8^_iK9ZqyAVq&oLtBX_Tk4 zJlfS~d)>7!;*U<6<~pUkXXAShMOALQcJ$fYqN$Pd`saBbg1vj)EX;?dO)TBh{m4Ym znYLmNN6)pB?CrXZuH$rnRm8rD8F59k8iptPAFZGFyr-+{7Z2a|`S74$^46$x-J;u- z8w@x$cBP_D{!vNp*hei>n)|qKzH0a8{@_PL^wte5dNbfd?BV|JE)q-8whOuGk9Kaq zed~E(olSyMp&?T$zB>4H>CB+2gstOmjb4{#yfti};+^fcz7NAKy$=|azdd1lXmG-q zub)^Co}M@*$>jEiXKx;R1D9XpM-xm2jcL9&KmBrcrqOD{ZjGwE1s9o_Ai|3i`wntrDX`hktpt6VL%6FGC zmWzXnhZh}Q?sUy8V(Zo+Rd3%N4|x72eeK%$%U85{SN{5C*~N~b4-R=9(_7SGP3gwx zhu^-x+5O<*<*5~qi~Ef|;QR8h;`Q}}!{0tKINIhb|8FYaTnt?vnp%10LE6U`g@W5< zaq&kxx*j>2KfC*ZR$fzgKPtFZ@^Z=HoZ}uH3U^5T-X{O@?DRF^tz4JKN1w*Dnp6?o z>3iczWBx3-8DhBeZ?D#GGP?RDZ+h0osqet~oeFY>T0HvQ{ZbmJw;@(X&uAYlrRal-l!+exM zm1*&{_KCp{rp|t1Y?L$4S2j4bF#MPJvE#qoy5O~)#PQiK$MY$}T=u#4UVOG~;gZ>Z zY#$laq4WKt^*Y-wyEgy0Wf#koy*U$(%wKY_?WKt)^|}PDdGBzf@BXva)ACp5y5-5H zu5%A~cCtLMWYatQUmuC0H~UNe$R6zO+Pe3Fe>J>yI=Sd}S>e8vdVLGOv3M5halUo) zh=iDHR!_Vi9}GX-FHVuR_1v;QU%|MLXF0vg#$!Xjy?f=s^WkMLCx?63pK5u0R``kn z{pKsjk?E(p4G9^aVt;zr+jYtQkwZ(J=k1zXlv6e1~S;5 zDLOJX>soSVoVP)r%-0`mr`?zQ)bG!}U+%K^@@ZO;9<_Np871p`XU4rF`!ACLH;H@vE}~>UN~mcIJsF~X4__~Q%R{uTAZ`p zO}i&IyB8VM$rsP~`FX|q)*rW|SC%e%AhBM$!Qj~4wxOrvN|Re3PMcOd^XIjV#RDdd z`)>8*o4bb`=y87a7iawJ@;dGD{lUEc_t(20=(Qz$`1xYf3tigZY(C62ZS8{bL#{e5 zS>EtYi^z*_tb1Jz8oFivx?;u7W4Q&xeG&X2aJMzE=buPF^^n=p2QZ0v*~Q7PkONrUjQ zVe^91-H!R1wy)?^HND)sOYRP-xbdTDMe~YQO({5;<7!=eZO7U^?<*oNM1`-DSjT%^ zFWdKE(!ebhWh;|yvi=qIsL$ZInZr}d)@^+K{(h7E%btEc^rpLSdM(Hre06by^82Q~ zO&+a@dbGUdZw<5J=ezv;o1yFaU2WzS?3nwb(a_M9ZIcFB2A%k3nCq{TPM!O@QtlmZ z*mwTqmTi`{YqYR$MNzuN#tWuL?|5xnveZ8Cw#W7GlX*#pvc73>;fJ`mq-@_l-x_$O zZuMXK&^9W;v{Jvrd0(&jgyRpr(zYTKJ;*PrRX(%M&@F0Cj=@CT=CJsP@5j~h|s5%Yy|JOghKC%qYWVg zJ`c&@Olanbza;b2XqkX)2EQoSG9571Mvyq5`N52HA$)LxJ6-tpj)K`crJJg74QEP$3pp}WALMYBV*)M;3JTyPCpqvs zR8BxF$dr&0;E#o$0_Y?b()1-8*fPN%VpBYdKryfs5TbG=Ag@s5kQ_)WazGYv%gV|~ zK&*lUl#~D+xH0BHj0O1E9Fm=#O@M&}gzsO?cVC4YihI6u6$vRkGG<>}@ zj#f7-1%OOxsw`H*lq=B@pc4QAjmNLgLSP?BLz>HkT5BNngl2|c>)=;Y*Z_HvxJ=dd z*R&!Eq{o3qYJO8$!e*vIn-{bN-Q%h4=sD(VEeUPj_&wJIKmaw-7cn&$nMy(iEFYY# zDt{zcFarD^1!(9MB|?(Y(F_aAQ0)utnk0ZNA@Ief7CkTrfo#d!gzo;EF5B)5AaND ze1K;RH*z-MK+qWOonf$JZi4IjASs0YSf5^-!4cnU6_cvyT{)srlePcLihrhLK zL2$kk$|UZD3P>(24CboTP~+lW_5m%#;4kzNy!vKYAKtqJorUP*Fg`+X@8G=}Ek*mQQ;2{XF?oo9+)N4)Pzyv5C=rA}k<$7?E^I|o zs4qqaHiRIBZIQ`C1e{_af>4QoT1jbrAeSCRzz-Uj6e3{VFeya9j}Z_7U-FPrI_fWl zw#sn9&M~CSlqp2OM=?YYfs~X!-y?!ZiGVgs=_4+3!Dbtzu;nr-M8MTVCWQ$2LOvqs zD-qC7Qu<*!a-oN$@R<@LgVsvv$LdTTBH$~+h=5v1$sy1leJfS|MC2;yGfjwh=I|Q7 zHbQf<2a5wf!+D+OWj@C*COq@a2{`){97ALtG=tb`+!zkDroR?<27q?%8euS|30 zm^8(MOO+hU$A31(J_35MXI74zX7%KrS$_7+%GuyZf&N|j|LR;-?fr`Scq29O^b%J6r%iPhxJMD-xBotM(%?QxJDjq)cs)M*_%j6 z-1lF^L9#~BrazV^ynNe ncP<}ajS7VKY`kIN!4KXq3Wn$p(GTeU@N22G@}G 写日志文件和报告文件 + /** 收尾处理 ==> 写日志文件和报告文件 **/ }catch (Exception e){ e.printStackTrace(); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java index 43d64f28..070f2915 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java @@ -75,19 +75,21 @@ public class GammaFileUtil { pathName = StringPool.SLASH + spectrumPathProperties.getRootPath() + StringPool.SLASH + pathName; ftpClient.changeWorkingDirectory(pathName); List ftpFiles = Arrays.asList(ftpClient.listFiles()); - ftpFiles = ftpFiles.stream().filter(item-> item.getName().equals(fileName)).collect(Collectors.toList()); - if (ftpFiles.size() == 0){ + ftpFiles = ftpFiles.stream().filter(item -> item.getName().equals(fileName)).collect(Collectors.toList()); + if (ftpFiles.size() == 0) { result.error500("ftp获取文件数据失败"); return false; } FTPFile ftpFile = ftpFiles.get(0); - if (Objects.nonNull(ftpFile)){ + if (Objects.nonNull(ftpFile)) { InputStream inputStream = ftpClient.retrieveFileStream(ftpFile.getName()); //声明一个临时文件 File file = File.createTempFile("tmp", null); //将ftp文件的输入流复制给临时文件 FileUtils.copyInputStreamToFile(inputStream, file); //读取文件信息 + //String path = "C:\\Users\\a\\Desktop\\AUX04_005-20230601_1405_S_FULL_40186.PHD"; + //EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(path); EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(file.getAbsolutePath()); //MsgInfo phd.getMsgInfo().setMsg_id(struct.msg_id); @@ -109,64 +111,64 @@ public class GammaFileUtil { //Comment phd.setOriTotalCmt(struct.comment); //Collection - if (StringUtils.isNotBlank(struct.collection_start_date) || StringUtils.isNotBlank(struct.collection_start_time) || StringUtils.isNotBlank(struct.collection_stop_date) || StringUtils.isNotBlank(struct.collection_stop_time) || Objects.nonNull(struct.air_volume)){ + if (StringUtils.isNotBlank(struct.collection_start_date) || StringUtils.isNotBlank(struct.collection_start_time) || StringUtils.isNotBlank(struct.collection_stop_date) || StringUtils.isNotBlank(struct.collection_stop_time) || Objects.nonNull(struct.air_volume)) { phd.getCollect().setCollection_start_date(struct.collection_start_date); phd.getCollect().setCollection_start_time(struct.collection_start_time); phd.getCollect().setCollection_stop_date(struct.collection_stop_date); phd.getCollect().setCollection_stop_time(struct.collection_stop_time); phd.getCollect().setAir_volume(struct.air_volume); - if(phd.getCollect().getCollection_start_time().indexOf('.')<0) { - phd.getCollect().setCollection_start_time(phd.getCollect().getCollection_start_time()+".0"); + if (phd.getCollect().getCollection_start_time().indexOf('.') < 0) { + phd.getCollect().setCollection_start_time(phd.getCollect().getCollection_start_time() + ".0"); } - if(phd.getCollect().getCollection_stop_time().indexOf('.')<0) { - phd.getCollect().setCollection_stop_time(phd.getCollect().getCollection_stop_time()+".0"); + if (phd.getCollect().getCollection_stop_time().indexOf('.') < 0) { + phd.getCollect().setCollection_stop_time(phd.getCollect().getCollection_stop_time() + ".0"); } - }else { + } else { phd.getCollect().setAir_volume(0.0); } //Acquisition - if (StringUtils.isNotBlank(struct.acquisition_start_date) || StringUtils.isNotBlank(struct.acquisition_start_time) || Objects.nonNull(struct.acquisition_real_time) || Objects.nonNull(struct.acquisition_live_time)){ + if (StringUtils.isNotBlank(struct.acquisition_start_date) || StringUtils.isNotBlank(struct.acquisition_start_time) || Objects.nonNull(struct.acquisition_real_time) || Objects.nonNull(struct.acquisition_live_time)) { phd.getAcq().setAcquisition_start_date(struct.acquisition_start_date); phd.getAcq().setAcquisition_start_time(struct.acquisition_start_time); phd.getAcq().setAcquisition_real_time(struct.acquisition_real_time); phd.getAcq().setAcquisition_live_time(struct.acquisition_live_time); - if(phd.getAcq().getAcquisition_start_time().indexOf('.')<0) { - phd.getAcq().setAcquisition_start_time(phd.getAcq().getAcquisition_start_time()+".0"); + if (phd.getAcq().getAcquisition_start_time().indexOf('.') < 0) { + phd.getAcq().setAcquisition_start_time(phd.getAcq().getAcquisition_start_time() + ".0"); } - }else { + } else { phd.getAcq().setAcquisition_live_time(0.0); phd.getAcq().setAcquisition_real_time(0.0); } //Processing - if (Objects.nonNull(struct.sample_volume_of_Xe) || Objects.nonNull(struct.uncertainty_1) || Objects.nonNull(struct.Xe_collection_yield) || Objects.nonNull(struct.uncertainty_2) || StringUtils.isNotBlank(struct.archive_bottle_id) ){ + if (Objects.nonNull(struct.sample_volume_of_Xe) || Objects.nonNull(struct.uncertainty_1) || Objects.nonNull(struct.Xe_collection_yield) || Objects.nonNull(struct.uncertainty_2) || StringUtils.isNotBlank(struct.archive_bottle_id)) { phd.getProcess().setSample_volume_of_Xe(struct.sample_volume_of_Xe); phd.getProcess().setUncertainty_1(struct.uncertainty_1); phd.getProcess().setXe_collection_yield(struct.Xe_collection_yield); phd.getProcess().setUncertainty_2(struct.uncertainty_2); phd.getProcess().setArchive_bottle_id(struct.archive_bottle_id); - }else { + } else { phd.getProcess().setSample_volume_of_Xe(0.0); phd.getProcess().setXe_collection_yield(0.0); phd.getProcess().setUncertainty_1(0.0); phd.getProcess().setUncertainty_2(0.0); } //Sample - if (Objects.nonNull(struct.dimension_1) || Objects.nonNull(struct.dimension_2)){ + if (Objects.nonNull(struct.dimension_1) || Objects.nonNull(struct.dimension_2)) { phd.getSampleBlock().setDimension_1(struct.dimension_1); phd.getSampleBlock().setDimension_2(struct.dimension_2); - }else { + } else { phd.getSampleBlock().setDimension_1(0.0); phd.getSampleBlock().setDimension_2(0.0); } //Calibration - if (StringUtils.isNotBlank(struct.date_calibration) || StringUtils.isNotBlank(struct.time_calibration)){ + if (StringUtils.isNotBlank(struct.date_calibration) || StringUtils.isNotBlank(struct.time_calibration)) { phd.getCalibration().setDate_calibration(struct.date_calibration); phd.getCalibration().setTime_calibration(struct.time_calibration); } //Certificate - if (Objects.nonNull(struct.total_source_activity) || StringUtils.isNotBlank(struct.assay_date) || StringUtils.isNotBlank(struct.assay_time) || StringUtils.isNotBlank(struct.units_activity) || CollectionUtils.isNotEmpty(struct.nuclide_name) + if (Objects.nonNull(struct.total_source_activity) || StringUtils.isNotBlank(struct.assay_date) || StringUtils.isNotBlank(struct.assay_time) || StringUtils.isNotBlank(struct.units_activity) || CollectionUtils.isNotEmpty(struct.nuclide_name) || CollectionUtils.isNotEmpty(struct.half_life_time) || CollectionUtils.isNotEmpty(struct.time_unit) || CollectionUtils.isNotEmpty(struct.activity_nuclide_time_assay) || CollectionUtils.isNotEmpty(struct.uncertainty) - || CollectionUtils.isNotEmpty(struct.cer_g_energy) || CollectionUtils.isNotEmpty(struct.g_intensity) || CollectionUtils.isNotEmpty(struct.electron_decay_mode) || CollectionUtils.isNotEmpty(struct.maximum_energy) || CollectionUtils.isNotEmpty(struct.intensity_b_particle) || Objects.nonNull(struct.record_count)){ + || CollectionUtils.isNotEmpty(struct.cer_g_energy) || CollectionUtils.isNotEmpty(struct.g_intensity) || CollectionUtils.isNotEmpty(struct.electron_decay_mode) || CollectionUtils.isNotEmpty(struct.maximum_energy) || CollectionUtils.isNotEmpty(struct.intensity_b_particle) || Objects.nonNull(struct.record_count)) { phd.getCertificate().setTotal_source_activity(struct.total_source_activity); phd.getCertificate().setAssay_date(struct.assay_date); phd.getCertificate().setAssay_time(struct.assay_time); @@ -184,23 +186,23 @@ public class GammaFileUtil { phd.getCertificate().setRecord_count(struct.record_count); } //g_Spectrum - if (Objects.nonNull(struct.num_g_channel) || Objects.nonNull(struct.g_energy_span) || Objects.nonNull(struct.g_begin_channel) || CollectionUtils.isNotEmpty(struct.g_counts)){ + if (Objects.nonNull(struct.num_g_channel) || Objects.nonNull(struct.g_energy_span) || Objects.nonNull(struct.g_begin_channel) || CollectionUtils.isNotEmpty(struct.g_counts)) { phd.getSpec().setNum_g_channel(struct.num_g_channel); phd.getSpec().setG_energy_span(struct.g_energy_span); phd.getSpec().setBegin_channel(struct.g_begin_channel); phd.getSpec().setCounts(struct.g_counts); - int i=0; - for (;i 0){ + int i = 0; + for (; i < phd.getSpec().getNum_g_channel(); ++i) { + if (phd.getSpec().getCounts().get(i) > 0) { break; } } - if(i == phd.getSpec().getNum_g_channel()){ + if (i == phd.getSpec().getNum_g_channel()) { phd.setValid(false); } } //g_Energy - if (CollectionUtils.isNotEmpty(struct.g_energy) || CollectionUtils.isNotEmpty(struct.g_centroid_channel) || CollectionUtils.isNotEmpty(struct.g_uncertainty) || Objects.nonNull(struct.g_record_count)){ + if (CollectionUtils.isNotEmpty(struct.g_energy) || CollectionUtils.isNotEmpty(struct.g_centroid_channel) || CollectionUtils.isNotEmpty(struct.g_uncertainty) || Objects.nonNull(struct.g_record_count)) { GEnergyBlock gEnergyBlock = new GEnergyBlock(); gEnergyBlock.setG_energy(struct.g_energy); gEnergyBlock.setCentroid_channel(struct.g_centroid_channel); @@ -209,7 +211,7 @@ public class GammaFileUtil { phd.getMapEnerKD().put(CalName.CalPHD.getType(), gEnergyBlock); } //g_Resolution - if (CollectionUtils.isNotEmpty(struct.g_r_energy) || CollectionUtils.isNotEmpty(struct.g_r_FWHM) || CollectionUtils.isNotEmpty(struct.g_r_uncertainty) || Objects.nonNull(struct.g_r_record_count)){ + if (CollectionUtils.isNotEmpty(struct.g_r_energy) || CollectionUtils.isNotEmpty(struct.g_r_FWHM) || CollectionUtils.isNotEmpty(struct.g_r_uncertainty) || Objects.nonNull(struct.g_r_record_count)) { GResolutionBlock gResolutionBlock = new GResolutionBlock(); gResolutionBlock.setG_energy(struct.g_r_energy); gResolutionBlock.setFWHM(struct.g_r_FWHM); @@ -218,7 +220,7 @@ public class GammaFileUtil { phd.getMapResoKD().put(CalName.CalPHD.getType(), gResolutionBlock); } //g_Efficiency - if (CollectionUtils.isNotEmpty(struct.g_e_energy) || CollectionUtils.isNotEmpty(struct.g_e_efficiency) || CollectionUtils.isNotEmpty(struct.g_e_uncertainty) || Objects.nonNull(struct.g_e_record_count)){ + if (CollectionUtils.isNotEmpty(struct.g_e_energy) || CollectionUtils.isNotEmpty(struct.g_e_efficiency) || CollectionUtils.isNotEmpty(struct.g_e_uncertainty) || Objects.nonNull(struct.g_e_record_count)) { GEfficiencyBlock gEfficiencyBlock = new GEfficiencyBlock(); gEfficiencyBlock.setG_energy(struct.g_e_energy); gEfficiencyBlock.setEfficiency(struct.g_e_efficiency); @@ -227,7 +229,7 @@ public class GammaFileUtil { phd.getMapEffiKD().put(CalName.CalPHD.getType(), gEfficiencyBlock); } //TotalEff - if (CollectionUtils.isNotEmpty(struct.t_g_energy) || CollectionUtils.isNotEmpty(struct.total_efficiency) || CollectionUtils.isNotEmpty(struct.t_uncertainty) || Objects.nonNull(struct.t_record_count)){ + if (CollectionUtils.isNotEmpty(struct.t_g_energy) || CollectionUtils.isNotEmpty(struct.total_efficiency) || CollectionUtils.isNotEmpty(struct.t_uncertainty) || Objects.nonNull(struct.t_record_count)) { TotaleffBlock totaleffBlock = new TotaleffBlock(); totaleffBlock.setG_energy(struct.t_g_energy); totaleffBlock.setTotal_efficiency(struct.total_efficiency); @@ -237,18 +239,19 @@ public class GammaFileUtil { } // 初始化默认分析设置 - if(phd.getHeader().getSystem_type().equals("P")) { + if (phd.getHeader().getSystem_type().equals("P")) { phd.getSetting().setECutAnalysis_Low(35.0); phd.getSetting().setBUpdateCal(true); } - phd.getSetting().setRefTime_conc(DateUtils.parseDate(phd.getCollect().getCollection_start_date() + " " + phd.getCollect().getCollection_start_time().substring(0, phd.getCollect().getCollection_start_time().indexOf(StringPool.DOT)),"yyyy/MM/dd HH:mm:ss")); - phd.getSetting().setRefTime_act(DateUtils.parseDate(phd.getAcq().getAcquisition_start_date() + " " + phd.getAcq().getAcquisition_start_time().substring(0, phd.getAcq().getAcquisition_start_time().indexOf(StringPool.DOT)),"yyyy/MM/dd HH:mm:ss")); + phd.getSetting().setRefTime_conc(DateUtils.parseDate(phd.getCollect().getCollection_start_date() + " " + phd.getCollect().getCollection_start_time().substring(0, phd.getCollect().getCollection_start_time().indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss")); + phd.getSetting().setRefTime_act(DateUtils.parseDate(phd.getAcq().getAcquisition_start_date() + " " + phd.getAcq().getAcquisition_start_time().substring(0, phd.getAcq().getAcquisition_start_time().indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss")); phd.setUsedSetting(phd.getSetting()); phd.setBAnalyed(false); phd.setAnaly_start_time(DateUtils.formatDate(new Date(), "yyyy/MM/dd HH:mm:ss")); + } - } catch (IOException e) { + }catch (IOException e) { throw new RuntimeException(e); } catch (ParseException e) { throw new RuntimeException(e); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java index c25ed7d3..e8102e8f 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java @@ -1,10 +1,8 @@ package org.jeecg.modules.controller; +import cn.hutool.core.collection.CollUtil; import org.jeecg.common.api.vo.Result; -import org.jeecg.modules.entity.vo.ChangeData; -import org.jeecg.modules.entity.vo.CoeffData; -import org.jeecg.modules.entity.vo.ConfigureData; -import org.jeecg.modules.entity.vo.InputData; +import org.jeecg.modules.entity.vo.*; import org.jeecg.modules.service.IGammaService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -189,11 +187,25 @@ public class GammaController { return gammaService.sampleInformation(sampleId, fileName); } + @GetMapping("exportSampleInformation") + public void exportSampleInformation(Integer sampleId, String fileName, + HttpServletResponse response){ + gammaService.exportSampleInformation(sampleId, fileName, response); + } + @GetMapping("viewQCResult") - public Result viewQCResult(Integer sampleId, String fileName){ + public Result> viewQCResult(Integer sampleId, String fileName){ return gammaService.viewQCResult(sampleId, fileName); } + @GetMapping("exportQCResult") + public void exportQCResult(Integer sampleId, String fileName,HttpServletResponse response){ + Result> result = gammaService.viewQCResult(sampleId, fileName); + List tableQCResults = result.getResult(); + if (CollUtil.isEmpty(tableQCResults))return; + gammaService.exportQCResult(tableQCResults,response); + } + @GetMapping("viewRLR") public Result viewRLR(Integer sampleId, String fileName){ return gammaService.viewRLR(sampleId, fileName); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java index 071d4b48..4054b615 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java @@ -1,14 +1,13 @@ package org.jeecg.modules.controller; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.jeecg.common.api.QueryRequest; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.entity.GardsSampleDataSpectrum; -import org.jeecg.modules.entity.vo.AnalyseData; -import org.jeecg.modules.entity.vo.BgDataAnlyseResultIn; -import org.jeecg.modules.entity.vo.FittingBody; -import org.jeecg.modules.entity.vo.StatisticsQueryData; +import org.jeecg.modules.entity.vo.*; import org.jeecg.modules.service.ISpectrumAnalysisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; @@ -103,6 +102,16 @@ public class SpectrumAnalysesController { return spectrumAnalysisService.viewQCResult(sampleId); } + + @GetMapping("exportQCResult") + @ApiOperation(value = "导出QC Result数据", notes = "导出QC Result数据") + public void exportQCResult(Integer sampleId,HttpServletResponse response){ + Result result = spectrumAnalysisService.viewQCResult(sampleId); + QCResult qcResult = result.getResult(); + if (ObjectUtil.isNull(qcResult))return; + spectrumAnalysisService.exportQCResult(qcResult,response); + } + @GetMapping("viewRLR") @ApiOperation(value = "查看RLR数据", notes = "查看RLR数据") public Result viewRLR(Integer sampleId){ @@ -183,4 +192,12 @@ public class SpectrumAnalysesController { return spectrumAnalysisService.saveToDB(anlyseResultIn); } + public static void main(String[] args) { + String str = "\n#FILE INFORMATION\n SampleMeasID: AUX04_005-2023/06/18-14:05\n GASBKMeasID: AUX04_005-2023/06/18-02:05\n DETBKMeasID: AUX04_005-2022/04/22-13:27\n SRID: 04202306171811X\n\n#COLLECTION INFORMATION\n Station CODE: AUX04\n Detector CODE: AUX04_005\n Sample ID: 426132\n Collection Start: 2023/06/17 18:54:10\n Collection Stop: 2023/06/18 06:54:08\n Collection TIME: 43198.00\n Sample Volume[m3]: 14.410883\n Xe Volume[cm3]: 1.00978\n\n#ACQUISITION INFORMATION\n Acquisition Start: 2023/06/18 14:05:09\n Acq Real Time: 40200.803\n Acq Live Time: 40187.202\n\n"; + String[] parts = str.split("\\n"); + + for (String part : parts) { + System.out.println(part); + } + } } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java index d3886c7f..9061c8f9 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java @@ -6,6 +6,7 @@ import org.jeecg.modules.entity.vo.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; public interface IGammaService{ @@ -72,9 +73,14 @@ public interface IGammaService{ Result Spectrum(Integer sampleId, String fileName); - Result sampleInformation(Integer sampleId, String fileName); + Result> sampleInformation(Integer sampleId, String fileName); - Result viewQCResult(Integer sampleId, String fileName); + void exportSampleInformation(Integer sampleId, String fileName, + HttpServletResponse response); + + Result> viewQCResult(Integer sampleId, String fileName); + + void exportQCResult(List data,HttpServletResponse response); Result viewRLR(Integer sampleId, String fileName); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java index 6ccc60bb..2760fc91 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java @@ -37,7 +37,9 @@ public interface ISpectrumAnalysisService { Result viewSampleInformation(Integer sampleId); - Result viewQCResult(Integer sampleId); + Result viewQCResult(Integer sampleId); + + void exportQCResult(QCResult qcResult,HttpServletResponse response); Result viewRLR(Integer sampleId); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java index 446f624d..a57a4f97 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java @@ -1,5 +1,6 @@ package org.jeecg.modules.service.impl; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -8,6 +9,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.google.common.cache.Cache; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; +import org.jeecg.common.Excel.ExportExcel; import org.jeecg.common.api.vo.Result; import org.jeecg.common.cache.LocalCache; import org.jeecg.common.properties.SpectrumPathProperties; @@ -20,15 +22,17 @@ import org.jeecg.modules.entity.*; import org.jeecg.modules.mapper.SpectrumAnalysisMapper; import org.jeecg.modules.native_jni.CalValuesHandler; import org.jeecg.modules.service.*; +import org.jeecgframework.poi.excel.ExcelExportUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.Resource; import org.springframework.stereotype.Service; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.math.BigDecimal; import java.sql.Connection; import java.sql.ResultSet; @@ -1432,8 +1436,8 @@ public class GammaServiceImpl implements IGammaService { } @Override - public Result sampleInformation(Integer sampleId, String fileName) { - Result result = new Result(); + public Result> sampleInformation(Integer sampleId, String fileName) { + Result> result = new Result(); Cache phdCache = localCache.getPHDCache(); PHDFile phd = phdCache.getIfPresent(fileName); if (Objects.isNull(phd)){ @@ -1478,8 +1482,23 @@ public class GammaServiceImpl implements IGammaService { } @Override - public Result viewQCResult(Integer sampleId, String fileName) { - Result result = new Result(); + public void exportSampleInformation(Integer sampleId, String fileName, + HttpServletResponse response) { + /*Result> result = sampleInformation(sampleId, fileName); + Map sampleInfo = result.getResult(); + if (MapUtil.isEmpty(sampleInfo)) return;*/ + /*Map data = sampleInfo.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));*/ + /*String exportFileName = "SampleInfo-Gamma.xls"; + ExportUtil.exportXls(response,"SampleInfo-G",data,exportFileName);*/ + Map data = new HashMap<>(); + data.put("name","123"); + data.put("sex",1); + } + + @Override + public Result> viewQCResult(Integer sampleId, String fileName) { + Result> result = new Result(); Cache phdCache = localCache.getPHDCache(); PHDFile phd = phdCache.getIfPresent(fileName); if (Objects.isNull(phd)){ @@ -1546,6 +1565,13 @@ public class GammaServiceImpl implements IGammaService { return result; } + @Override + public void exportQCResult(List data, HttpServletResponse response) { + String sheetName = "QCResult-Gamma"; + String fileName = "QCResult-Gamma.xls"; + ExportUtil.exportXls(response,TableQCResult.class,data,sheetName,fileName); + } + @Override public Result viewRLR(Integer sampleId, String fileName) { Result result = new Result(); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java index ca6dcb51..3a2e6c4d 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java @@ -1,5 +1,8 @@ package org.jeecg.modules.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -10,11 +13,13 @@ import org.apache.commons.io.FileUtils; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; +import org.apache.poi.ss.usermodel.Workbook; import org.jeecg.common.api.QueryRequest; import org.jeecg.common.api.vo.Result; import org.jeecg.common.properties.SpectrumPathProperties; import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.util.*; +import org.jeecg.modules.base.dto.QCResultDto; import org.jeecg.modules.base.entity.original.*; import org.jeecg.modules.base.enums.*; import org.jeecg.modules.entity.*; @@ -25,6 +30,8 @@ import org.jeecg.modules.native_jni.struct.BgAnalyseResult; import org.jeecg.modules.native_jni.struct.BgBoundary; import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; import org.jeecg.modules.service.*; +import org.jeecgframework.poi.excel.ExcelExportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -1049,8 +1056,8 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService { } @Override - public Result viewQCResult(Integer sampleId) { - Result result = new Result(); + public Result viewQCResult(Integer sampleId) { + Result result = new Result(); QCResult qcResult = new QCResult(); Sections sections = new Sections(); List collectionTimeSections = sections.getCollectionTimeSections(); @@ -1276,6 +1283,21 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService { return result; } + @Override + public void exportQCResult(QCResult qcResult, HttpServletResponse response) { + Map qcMap = BeanUtil.beanToMap(qcResult); + List qcResultDtos = new ArrayList<>(); + for (Map.Entry entry : qcMap.entrySet()) { + QCResultDto qcResultDto = new QCResultDto(); + qcResultDto.setFieldName(entry.getKey()); + qcResultDto.setFieldValue(entry.getValue()); + qcResultDtos.add(qcResultDto); + } + String sheetName = "QCResult-Beta"; + String fileName = "QCResult-Beta.xls"; + ExportUtil.exportXls(response,QCResultDto.class,qcResultDtos,sheetName,fileName); + } + @Override public Result viewRLR(Integer sampleId) { Result result = new Result(); diff --git a/jeecg-module-spectrum-analysis/src/main/resources/template/export/SampleInfo-G.xls b/jeecg-module-spectrum-analysis/src/main/resources/template/export/SampleInfo-G.xls new file mode 100644 index 0000000000000000000000000000000000000000..e1fc215a50ccc3f043935719f70d3f33544fcef3 GIT binary patch literal 19968 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 literal 0 HcmV?d00001 From 919bae79f783d22a18cd4c341f6a2f15643cdbb1 Mon Sep 17 00:00:00 2001 From: panbaolin <123456> Date: Thu, 7 Sep 2023 09:32:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:1.=E5=AE=8C=E6=88=90B=E5=88=86=E6=9E=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=95=B0=E6=8D=AE=E5=AD=98=E5=82=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/email/EmailServiceManager.java | 3 +- .../common/properties/SoftwareProperties.java | 24 ++ .../properties/SpectrumPathProperties.java | 5 + .../modules/exception/BAnalyseException.java | 19 ++ .../modules/exception/PHD_ReadException.java | 19 ++ .../java/org/jeecg/modules/ftp/FTPUtils.java | 67 ++-- .../mapper/GardsCalibrationMapper.java | 5 + .../mapper/GardsRoiChannelsMapper.java | 8 + .../modules/mapper/GardsRoiResultsMapper.java | 7 + .../modules/mapper/GardsSampleDataMapper.java | 18 +- .../modules/mapper/GardsXeResultsMapper.java | 7 + .../mapper/xml/GardsCalibrationMapper.xml | 35 ++ .../native_jni/struct/BgAnalyseResult.java | 176 +++++++++-- .../jeecg/modules/service/BlockConstant.java | 5 + .../modules/service/GardsAnalysesService.java | 13 +- .../service/GardsCalibrationService.java | 11 +- .../service/GardsRoiChannelsService.java | 20 ++ .../service/GardsRoiResultsService.java | 20 ++ .../service/GardsSampleDataService.java | 20 +- .../service/GardsXeResultsService.java | 20 ++ .../impl/GardsAnalysesServiceImpl.java | 47 ++- .../GardsCalibrationPairsServiceImpl.java | 1 + .../impl/GardsCalibrationServiceImpl.java | 193 ++++++++++- .../impl/GardsRoiChannelsServiceImpl.java | 104 ++++++ .../impl/GardsRoiResultsServiceImpl.java | 101 ++++++ .../impl/GardsSampleDataServiceImpl.java | 34 +- .../impl/GardsXeResultsServiceImpl.java | 128 ++++++++ .../impl/SpectrumBaseBlockServiceImpl.java | 4 +- .../jeecg/modules/spectrum/AlertSpectrum.java | 5 +- .../spectrum/HealthStatusSpectrum.java | 5 +- .../jeecg/modules/spectrum/MetSpectrum.java | 2 +- .../spectrum/S_D_Q_G_SpectrumHandler.java | 22 +- .../modules/spectrum/Sample_B_Analysis.java | 299 ++++++++++++++++++ .../modules/spectrum/SamplephdSpectrum.java | 96 +----- .../modules/spectrum/SpectrumHandler.java | 3 +- .../spectrum/SpectrumParsingActuator.java | 2 +- .../spectrum/SpectrumServiceQuotes.java | 7 + 37 files changed, 1314 insertions(+), 241 deletions(-) create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/SoftwareProperties.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/BAnalyseException.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/PHD_ReadException.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiChannelsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiResultsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsXeResultsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationMapper.xml create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiChannelsService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiResultsService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsXeResultsService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsRoiChannelsServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsRoiResultsServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsXeResultsServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java index 8d4634b5..8a2bd25a 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java @@ -212,9 +212,8 @@ public class EmailServiceManager { public void getMailContent(@NotNull Part part, StringBuilder content) throws MessagingException, IOException { if(part.isMimeType(MailContentType.PLAIN.getContentType())){ content.append(part.getContent()); - }else if(part.isMimeType(MailContentType.HTML.getContentType())){ - content.append(part.getContent()); }else if(part.isMimeType("multipart/*")){ + System.out.println(part.getContentType()); Multipart multipart = (Multipart) part.getContent(); for(int i=0;i { - if (fileName.equals(file.getName())) { - return true; - } - return false; - }); - for(FTPFile file : ftpFiles){ - InputStream inputStream = null; - try{ - inputStream = this.client.retrieveFileStream(new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)); - FileUtil.writeFromStream(inputStream,localPath+File.separator+fileName); - }catch (Exception e){ - if(null != inputStream){ - inputStream.close(); + InputStream inputStream = null; + try{ + final FTPFile[] ftpFiles = this.client.listFiles(fileName); + if(ArrayUtils.isNotEmpty(ftpFiles)){ + inputStream = this.client.retrieveFileStream(fileName); + if(Objects.nonNull(inputStream)){ + FileUtil.writeFromStream(inputStream,localPath+File.separator+fileName); + return true; } + }else { + log.warn("{}不存在",fileName); + } + }catch (Exception e){ + e.printStackTrace(); + return false; + }finally { + if(Objects.nonNull(inputStream)){ + inputStream.close(); + this.client.completePendingCommand(); } } + return false; } /** * 检查目录是否存在,不存在则创建,支持递归创建 * @param path 目录路径 * @return 返回值true/false - * @throws IOException */ private boolean checkDirectory(String path){ try{ @@ -114,6 +117,12 @@ public class FTPUtils { return true; } + public static void main(String[] args) throws IOException { + FTPUtils ftp = new FTPUtils("8.141.87.165",21,"rmsops","cnndc010","utf-8","/"); +// ftp.saveFile("log/Soh/2023/08","GBX68_RMSSOH-20230731_152800.0.log",new ByteArrayInputStream((System.lineSeparator()+"ssssssssssss").getBytes(StandardCharsets.UTF_8))); + ftp.downloadFTPFile("/savefile/Spectrum/Xenon/Sauna/Gasbkphd/2023/09","AUX09_003-20151224_0655_G_FULL_40182.873.PHD","E:\\file"); + } + /** * 写入文件,若文件或文件目录不存在则自行创建 * @param filePath 文件路径 @@ -125,9 +134,12 @@ public class FTPUtils { try{ final boolean flag = this.checkDirectory(filePath); if(flag){ - client.setFileType(FTP.BINARY_FILE_TYPE); - String encodedName = new String(fileName.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1); - return client.storeFile(encodedName, inputStream); + final FTPFile[] ftpFiles = this.client.listFiles(fileName); + if(ArrayUtils.isEmpty(ftpFiles)){ + return client.storeFile(fileName, inputStream); + }else{ + return client.appendFile(fileName,inputStream); + } } }catch (IOException e){ log.error("{}文件创建失败,原因为:{}",filePath+"/"+fileName,e.getMessage()); @@ -201,6 +213,7 @@ public class FTPUtils { public void close(){ try{ if (client != null){ + client.logout(); client.disconnect(); } }catch (IOException e){ diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationMapper.java index fb3db82d..1025782a 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationMapper.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationMapper.java @@ -1,7 +1,12 @@ package org.jeecg.modules.mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.jeecg.modules.base.entity.rnauto.GardsCalibration; public interface GardsCalibrationMapper extends BaseMapper { + + @InterceptorIgnore(tenantLine = "true") + public int create(@Param("calibration") GardsCalibration calibration); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiChannelsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiChannelsMapper.java new file mode 100644 index 00000000..edba26d7 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiChannelsMapper.java @@ -0,0 +1,8 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.rnauto.GardsRoiChannels; + +public interface GardsRoiChannelsMapper extends BaseMapper { + +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiResultsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiResultsMapper.java new file mode 100644 index 00000000..711cbae7 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiResultsMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.rnauto.GardsRoiResults; + +public interface GardsRoiResultsMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDataMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDataMapper.java index 95657d3f..76c11320 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDataMapper.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDataMapper.java @@ -9,22 +9,10 @@ import org.jeecg.modules.base.entity.original.GardsSampleData; public interface GardsSampleDataMapper extends BaseMapper { @Select(value = "select " + - "gsd.SAMPLE_ID,gsd.input_file_name " + - "from GARDS_SAMPLE_AUX gsa inner join GARDS_SAMPLE_DATA gsd on gsa.sample_id = gsd.sample_id " + + "gsd.SAMPLE_ID as sampleId,gsd.input_file_name as inputFileName " + + "from ORIGINAL.GARDS_SAMPLE_AUX gsa inner join ORIGINAL.GARDS_SAMPLE_DATA gsd on gsa.sample_id = gsd.sample_id " + "where gsa.measurement_id = #{measurementId} and gsd.data_type=#{dataType}") - public GardsSampleData getSampleInputFileName(@Param("measurementId") String measurementId,@Param("dataType") String dataType); - - @Select(value = "select " + - "gsd.SAMPLE_ID,gsd.input_file_name " + - "from GARDS_SAMPLE_AUX gsa inner join GARDS_SAMPLE_DATA gsd on gsa.sample_id = gsd.sample_id " + - "where gsa.bkgd_measurement_id = #{bkgdMeasurementId} and gsd.data_type=#{dataType}") - public GardsSampleData getDetInputFileName(@Param("bkgdMeasurementId") String bkgdMeasurementId,@Param("dataType") String dataType); - - @Select(value = "select " + - "gsd.SAMPLE_ID,gsd.input_file_name " + - "from GARDS_SAMPLE_AUX gsa inner join GARDS_SAMPLE_DATA gsd on gsa.sample_id = gsd.sample_id " + - "where gsa.gas_bkgd_measurement_id = #{gasMeasurementId} and gsd.data_type=#{dataType}") - public GardsSampleData getGasInputFileName(@Param("gasMeasurementId") String gasMeasurementId,@Param("dataType") String dataType); + public GardsSampleData getSampleIdAndInputFileName(@Param("measurementId") String measurementId,@Param("dataType") String dataType); @Update(value = "UPDATE ORIGINAL.GARDS_SAMPLE_DATA SET STATUS=#{status} WHERE INPUT_FILE_NAME=#{inputFileName}") public int updateStatus(@Param("status") String status,@Param("inputFileName") String inputFileName); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsXeResultsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsXeResultsMapper.java new file mode 100644 index 00000000..c60bc80b --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsXeResultsMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.rnauto.GardsXeResults; + +public interface GardsXeResultsMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationMapper.xml b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationMapper.xml new file mode 100644 index 00000000..f63942f5 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationMapper.xml @@ -0,0 +1,35 @@ + + + + + + insert into RNAUTO.GARDS_CALIBRATION( + SAMPLE_ID, + IDANALYSIS, + SAMPLE_TYPE, + CALTYPE, + FUNCTION, + FUNCTIONDEF, + STARTOFRANGE, + ENDOFRANGE, + coeff1, + coeff2, + coeff3, + moddate) + values( + #{calibration.sampleId}, + #{calibration.idAnalysis}, + #{calibration.sampleType}, + #{calibration.calType}, + #{calibration.function}, + #{calibration.functionDef}, + #{calibration.startOfRange}, + #{calibration.endOfRange}, + #{calibration.coeff1}, + #{calibration.coeff2}, + #{calibration.coeff3}, + #{calibration.moddate}) + + + + \ No newline at end of file diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/BgAnalyseResult.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/BgAnalyseResult.java index 493f6450..a20be280 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/BgAnalyseResult.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/BgAnalyseResult.java @@ -3,29 +3,92 @@ package org.jeecg.modules.native_jni.struct; import java.util.List; public class BgAnalyseResult { - /************************** BgMDCPara **************************/ - /** MDC XE135 */ - public double MDC_Xe135; - /** MDC XE131m */ - public double MDC_Xe131m; - /** MDC XE133m*/ - public double MDC_Xe133m; - /** MDC XE133 */ - public double MDC_Xe133; - public List MDC; - public List MDC_CTS; - - /************************** BgXeConUncer **************************/ - /** 135不浓度 */ - public double Xe135_con; - /** 135不确定度 */ - public double Xe135_uncer; + /************************** GARDS_XE_RESULTS START**************************/ + /************************** XE_131m **************************/ public double Xe131m_con; public double Xe131m_uncer; - public double Xe133m_con; - public double Xe133m_uncer; + public double MDC_Xe131m; + public double LC_Xe131m; + public int XE_131m_NID_FLAG; + + /************************** XE_133 **************************/ public double Xe133_con; public double Xe133_uncer; + public double MDC_Xe133; + public double LC_Xe133; + public int XE_133_NID_FLAG; + /************************** XE_133m **************************/ + public double Xe133m_con; + public double Xe133m_uncer; + public double MDC_Xe133m; + public double LC_Xe133m; + public int XE_133m_NID_FLAG; + + /************************** XE_135 **************************/ + public double Xe135_con; + public double Xe135_uncer; + public double MDC_Xe135; + public double LC_Xe135; + public int XE_135_NID_FLAG; + /************************** GARDS_XE_RESULTS end **************************/ + + /************************** GARDS_ROI_RESULTS START**************************/ + public List ROI; + public List LC; + public List s_roi_cts; + public List g_roi_cts; + public List d_roi_cts; + public List s_deduct_d_cts; + public List g_deduct_d_cts; + public List ROI_net_coutns; + public List ROI_net_coutns_err; + public List ROI_con_uncer; + public List ROI_con_uncer_err; + public List MDC; + public List dNidFlag; + + /************************** GARDS_ROI_RESULTS end **************************/ + + /************************** GARDS_CALIBRATION START**************************/ + public List s_b_fitting_e_c; + public int s_b_fitting_type; + public String s_b_fitting_type_def; + public List s_g_fitting_e_c; + public int s_g_fitting_type; + public String s_g_fitting_type_def; + + public List g_b_fitting_e_c; + public int g_b_fitting_type; + public String g_b_fitting_type_def; + public List g_g_fitting_e_c; + public int g_g_fitting_type; + public String g_g_fitting_type_def; + + public List d_b_fitting_e_c; + public int d_b_fitting_type; + public String d_b_fitting_type_def; + public List d_g_fitting_e_c; + public int d_g_fitting_type; + public String d_g_fitting_type_def; + /************************** GARDS_CALIBRATION end **************************/ + + /************************** GARDS_ROI_CHANNELS START**************************/ + public List S_ROI; + public List S_ROI_B_Boundary_start; + public List S_ROI_B_Boundary_stop; + public List S_ROI_G_Boundary_start; + public List S_ROI_G_Boundary_stop; + public List G_ROI; + public List G_ROI_B_Boundary_start; + public List G_ROI_B_Boundary_stop; + public List G_ROI_G_Boundary_start; + public List G_ROI_G_Boundary_stop; + public List D_ROI; + public List D_ROI_B_Boundary_start; + public List D_ROI_B_Boundary_stop; + public List D_ROI_G_Boundary_start; + public List D_ROI_G_Boundary_stop; + /************************** GARDS_ROI_CHANNELS end **************************/ /** * 分析结果标记,true成功,false失败 @@ -36,23 +99,76 @@ public class BgAnalyseResult { */ public String error_log; + @Override public String toString() { return "BgAnalyseResult{" + - "MDC_Xe135=" + MDC_Xe135 + - ", MDC_Xe131m=" + MDC_Xe131m + - ", MDC_Xe133m=" + MDC_Xe133m + - ", MDC_Xe133=" + MDC_Xe133 + - ", MDC=" + MDC + - ", MDC_CTS=" + MDC_CTS + - ", Xe135_con=" + Xe135_con + - ", Xe135_uncer=" + Xe135_uncer + - ", Xe131m_con=" + Xe131m_con + + "Xe131m_con=" + Xe131m_con + ", Xe131m_uncer=" + Xe131m_uncer + - ", Xe133m_con=" + Xe133m_con + - ", Xe133m_uncer=" + Xe133m_uncer + + ", MDC_Xe131m=" + MDC_Xe131m + + ", LC_Xe131m=" + LC_Xe131m + + ", XE_131m_NID_FLAG=" + XE_131m_NID_FLAG + ", Xe133_con=" + Xe133_con + ", Xe133_uncer=" + Xe133_uncer + + ", MDC_Xe133=" + MDC_Xe133 + + ", LC_Xe133=" + LC_Xe133 + + ", XE_133_NID_FLAG=" + XE_133_NID_FLAG + + ", Xe133m_con=" + Xe133m_con + + ", Xe133m_uncer=" + Xe133m_uncer + + ", MDC_Xe133m=" + MDC_Xe133m + + ", LC_Xe133m=" + LC_Xe133m + + ", XE_133m_NID_FLAG=" + XE_133m_NID_FLAG + + ", Xe135_con=" + Xe135_con + + ", Xe135_uncer=" + Xe135_uncer + + ", MDC_Xe135=" + MDC_Xe135 + + ", LC_Xe135=" + LC_Xe135 + + ", XE_135_NID_FLAG=" + XE_135_NID_FLAG + + ", ROI=" + ROI + + ", LC=" + LC + + ", s_roi_cts=" + s_roi_cts + + ", g_roi_cts=" + g_roi_cts + + ", d_roi_cts=" + d_roi_cts + + ", s_deduct_d_cts=" + s_deduct_d_cts + + ", g_deduct_d_cts=" + g_deduct_d_cts + + ", ROI_net_coutns=" + ROI_net_coutns + + ", ROI_net_coutns_err=" + ROI_net_coutns_err + + ", ROI_con_uncer=" + ROI_con_uncer + + ", ROI_con_uncer_err=" + ROI_con_uncer_err + + ", MDC=" + MDC + + ", dNidFlag=" + dNidFlag + + ", s_b_fitting_e_c=" + s_b_fitting_e_c + + ", s_b_fitting_type=" + s_b_fitting_type + + ", s_b_fitting_type_def='" + s_b_fitting_type_def + '\'' + + ", s_g_fitting_e_c=" + s_g_fitting_e_c + + ", s_g_fitting_type=" + s_g_fitting_type + + ", s_g_fitting_type_def='" + s_g_fitting_type_def + '\'' + + ", g_b_fitting_e_c=" + g_b_fitting_e_c + + ", g_b_fitting_type=" + g_b_fitting_type + + ", g_b_fitting_type_def='" + g_b_fitting_type_def + '\'' + + ", g_g_fitting_e_c=" + g_g_fitting_e_c + + ", g_g_fitting_type=" + g_g_fitting_type + + ", g_g_fitting_type_def='" + g_g_fitting_type_def + '\'' + + ", d_b_fitting_e_c=" + d_b_fitting_e_c + + ", d_b_fitting_type=" + d_b_fitting_type + + ", d_b_fitting_type_def='" + d_b_fitting_type_def + '\'' + + ", d_g_fitting_e_c=" + d_g_fitting_e_c + + ", d_g_fitting_type=" + d_g_fitting_type + + ", d_g_fitting_type_def='" + d_g_fitting_type_def + '\'' + + ", S_ROI=" + S_ROI + + ", S_ROI_B_Boundary_start=" + S_ROI_B_Boundary_start + + ", S_ROI_B_Boundary_stop=" + S_ROI_B_Boundary_stop + + ", S_ROI_G_Boundary_start=" + S_ROI_G_Boundary_start + + ", S_ROI_G_Boundary_stop=" + S_ROI_G_Boundary_stop + + ", G_ROI=" + G_ROI + + ", G_ROI_B_Boundary_start=" + G_ROI_B_Boundary_start + + ", G_ROI_B_Boundary_stop=" + G_ROI_B_Boundary_stop + + ", G_ROI_G_Boundary_start=" + G_ROI_G_Boundary_start + + ", G_ROI_G_Boundary_stop=" + G_ROI_G_Boundary_stop + + ", D_ROI=" + D_ROI + + ", D_ROI_B_Boundary_start=" + D_ROI_B_Boundary_start + + ", D_ROI_B_Boundary_stop=" + D_ROI_B_Boundary_stop + + ", D_ROI_G_Boundary_start=" + D_ROI_G_Boundary_start + + ", D_ROI_G_Boundary_stop=" + D_ROI_G_Boundary_stop + ", analyse_flag=" + analyse_flag + ", error_log='" + error_log + '\'' + '}'; diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/BlockConstant.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/BlockConstant.java index 1ca9045a..82882588 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/BlockConstant.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/BlockConstant.java @@ -9,5 +9,10 @@ public interface BlockConstant { public final static String SYSTEMTYPE_G = "G"; public final static String EFFICIENCY_CAL ="efficiency"; + public final static String XE_131m = "Xe131m"; + public final static String XE_133m = "Xe133m"; + public final static String XE_133 = "Xe133"; + public final static String XE_135 = "Xe135"; + } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsAnalysesService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsAnalysesService.java index 2ed5e7e9..312a192b 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsAnalysesService.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsAnalysesService.java @@ -1,9 +1,12 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.original.GardsSampleData; import org.jeecg.modules.base.entity.rnauto.GardsAnalyses; import org.jeecg.modules.native_jni.struct.BgAnalyseResult; +import java.util.Date; + /** * 存储谱数据分析的基本信息 */ @@ -12,10 +15,16 @@ public interface GardsAnalysesService extends IService { /** * 存储谱数据分析的基本信息 * 不提交事务,由调用方手动统一提交事务 - * @param analyseResult * @param sampleId + * @param detSampleData + * @param gasSampleData + * @param beginDate 分析开始时间 + * @param endDate 分析结束时间 + * @param logPath + * @param reportPath + * @return */ - public void create(BgAnalyseResult analyseResult,Integer sampleId); + public GardsAnalyses create(Integer sampleId, GardsSampleData detSampleData, GardsSampleData gasSampleData, Date beginDate, Date endDate, String logPath, String reportPath); Integer getIdAnalysis(Integer sampleId); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsCalibrationService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsCalibrationService.java index d6b5e45a..55f51a8b 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsCalibrationService.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsCalibrationService.java @@ -2,11 +2,20 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.base.entity.rnauto.GardsCalibration; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; /** * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 */ public interface GardsCalibrationService extends IService { - + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param anayId + */ + public void create(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiChannelsService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiChannelsService.java new file mode 100644 index 00000000..7506daee --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiChannelsService.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.rnauto.GardsRoiChannels; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; + +/** + * 存储β-γ符合谱中感兴趣区道址边界数据。 + */ +public interface GardsRoiChannelsService extends IService { + + /** + * 存储β-γ符合谱中感兴趣区道址边界数据。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + public void create(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis); +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiResultsService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiResultsService.java new file mode 100644 index 00000000..5adbc9bc --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiResultsService.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.rnauto.GardsRoiResults; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; + +/** + * 存储β-γ符合谱中分析过程中的有关感兴趣区(ROI)计算的中间结果。 + */ +public interface GardsRoiResultsService extends IService { + + /** + * 存储β-γ符合谱中分析过程中的有关感兴趣区(ROI)计算的中间结果。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + public void create(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis); +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsSampleDataService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsSampleDataService.java index d7841cfd..59d6a559 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsSampleDataService.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsSampleDataService.java @@ -13,28 +13,12 @@ public interface GardsSampleDataService extends IService { public boolean fileExist(String inputFileName); /** - * 获取Sample谱文件保存路径 + * 获取谱文件保存路径 * @param measurementId * @param dataType * @return */ - public GardsSampleData getSampleInputFileName(String measurementId,String dataType); - - /** - * 获取Det谱文件保存路径 - * @param bkgdMeasurementId - * @param dataType - * @return - */ - public GardsSampleData getDetInputFileName(String bkgdMeasurementId,String dataType); - - /** - * 获取Gas谱文件保存路径 - * @param gasMeasurementId - * @param dataType - * @return - */ - public GardsSampleData getGasInputFileName(String gasMeasurementId,String dataType); + public GardsSampleData getSampleIdAndInputFileName(String measurementId,String dataType); /** * 修改能谱处理状态 diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsXeResultsService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsXeResultsService.java new file mode 100644 index 00000000..44c0a218 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsXeResultsService.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.rnauto.GardsXeResults; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; + +/** + * 存储β-γ符合谱最终分析结果。 + */ +public interface GardsXeResultsService extends IService { + + /** + * 存储β-γ符合谱最终分析结果 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + public void create(BgAnalyseResult analyseResult, Integer sampleId, Integer idAnalysis); +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsAnalysesServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsAnalysesServiceImpl.java index c312cbf6..8708f13c 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsAnalysesServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsAnalysesServiceImpl.java @@ -3,45 +3,58 @@ package org.jeecg.modules.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jeecg.common.properties.SoftwareProperties; +import org.jeecg.modules.base.entity.original.GardsSampleData; import org.jeecg.modules.base.entity.rnauto.GardsAnalyses; import org.jeecg.modules.base.enums.AnalysesType; import org.jeecg.modules.mapper.GardsAnalysesMapper; -import org.jeecg.modules.native_jni.struct.BgAnalyseResult; import org.jeecg.modules.service.GardsAnalysesService; import org.springframework.stereotype.Service; - -import java.util.Optional; +import java.util.Date; /** * 存储谱数据分析的基本信息 */ @Service +@RequiredArgsConstructor public class GardsAnalysesServiceImpl extends ServiceImpl implements GardsAnalysesService { + private final SoftwareProperties properties; + /** * 存储谱数据分析的基本信息 * 不提交事务,由调用方手动统一提交事务 - * @param analyseResult * @param sampleId + * @param detSampleData + * @param gasSampleData + * @param beginDate 分析开始时间 + * @param endDate 分析结束时间 + * @param logPath + * @param reportPath + * @return */ @Override - public void create(BgAnalyseResult analyseResult,Integer sampleId) { + public GardsAnalyses create(Integer sampleId, GardsSampleData detSampleData, GardsSampleData gasSampleData, Date beginDate, Date endDate, String logPath, String reportPath) { GardsAnalyses analyses = new GardsAnalyses(); analyses.setSampleId(sampleId); - analyses.setAnalysisBegin(null);//分析开始时间,java控制 - analyses.setAnalysisEnd(null);//分析结束时间,java控制 - analyses.setType(AnalysesType.AUTO.getValue());//类型,java控制 - analyses.setSoftware(null);//使用的软件名称,配置文件配置 - analyses.setSwVersion(null);//软件版本号,配置文件配置 - analyses.setAnalyst(null);//分析员名称,配置文件配置 + analyses.setAnalysisBegin(beginDate); + analyses.setAnalysisEnd(endDate); + analyses.setType(AnalysesType.AUTO.getValue()); + analyses.setSoftware(properties.getSwName()); + analyses.setSwVersion(properties.getSwVersion()); + analyses.setAnalyst(properties.getAnalyst()); analyses.setCategory(1);//按C++代码写死的1,该字段是分级结果张博士还没有想好数据要不要分级1,2,3,4 analyses.setComments("test");//按C++代码写死的test - analyses.setUsedgasphd(null);//gas谱的phd文件ftp路径 - analyses.setUseddetphd(null);//det谱的phd文件ftp路径 - analyses.setUsedgasphdId(null);//gas谱的sampleId - analyses.setUseddetphdId(null);//det谱的sampleId - analyses.setLogPath(null);//解析过程日志ftp路径 - analyses.setReportPath(null);//报告ftp路径 + analyses.setUsedgasphd(gasSampleData.getInputFileName()); + analyses.setUseddetphd(detSampleData.getInputFileName()); + analyses.setUsedgasphdId(gasSampleData.getSampleId()); + analyses.setUseddetphdId(detSampleData.getSampleId()); + analyses.setLogPath(logPath); + analyses.setReportPath(reportPath); + + this.save(analyses); + return analyses; } @Override diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsServiceImpl.java index 1ed06ee3..6f721267 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsServiceImpl.java @@ -70,6 +70,7 @@ public class GardsCalibrationPairsServiceImpl extends ServiceImpl implements GardsCalibrationService { +public class GardsCalibrationServiceImpl extends ServiceImpl implements GardsCalibrationService, BlockConstant { + private final static int START_RANGE = 0; + private final static int END_RANGE = 1; + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param anayId + */ + @Override + public void create(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId){ + this.saveSampleB_EnergyRecord(analyseResult,sampleId,anayId); + this.saveSampleG_EnergyRecord(analyseResult,sampleId,anayId); + this.saveGasB_EnergyRecord(analyseResult,sampleId,anayId); + this.saveGasG_EnergyRecord(analyseResult,sampleId,anayId); + this.saveDetB_EnergyRecord(analyseResult,sampleId,anayId); + this.saveDetG_EnergyRecord(analyseResult,sampleId,anayId); + } + + /** + * 保存 B_Energy 块信息 + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveSampleB_EnergyRecord(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_B); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.s_b_fitting_type); + calibration.setFunctionDef(analyseResult.s_b_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.s_b_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.s_b_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.s_b_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + + } + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * G_Energy能道存储 + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveSampleG_EnergyRecord(BgAnalyseResult analyseResult,Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_G); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.s_g_fitting_type); + calibration.setFunctionDef(analyseResult.s_g_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.s_g_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.s_g_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.s_g_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + } + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * B_Energy + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveGasB_EnergyRecord(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_B); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.g_b_fitting_type); + calibration.setFunctionDef(analyseResult.g_b_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.g_b_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.g_b_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.g_b_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + } + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * G_Energy能道存储 + * + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveGasG_EnergyRecord(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_G); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.g_g_fitting_type); + calibration.setFunctionDef(analyseResult.g_g_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.g_g_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.g_g_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.g_g_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + } + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * B_Energy + * + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveDetB_EnergyRecord(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_B); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.d_b_fitting_type); + calibration.setFunctionDef(analyseResult.d_b_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.d_b_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.d_b_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.d_b_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + } + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * G_Energy能道存储 + * + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveDetG_EnergyRecord(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_G); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.d_g_fitting_type); + calibration.setFunctionDef(analyseResult.d_g_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.d_g_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.d_g_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.d_g_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + } + +// public static void main(String[] args) { +// System.loadLibrary("ReadPHDFile"); +// String sampleTempFilePath = "E:\\file\\AUX09_003-20151224_1855_S_FULL_40184.505.PHD"; +// String gasTempFilePath = "E:\\file\\AUX09_003-20151224_0655_G_FULL_40182.873.PHD"; +// String detTempFilePath = "E:\\file\\AUX09_003-20150527_0425_D_FULL_259449.672.PHD"; +// BgAnalyseResult analyseResult = EnergySpectrumHandler.bgAnalyse(sampleTempFilePath,gasTempFilePath,detTempFilePath); +// System.out.println(analyseResult); +// } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsRoiChannelsServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsRoiChannelsServiceImpl.java new file mode 100644 index 00000000..5f5bc3d8 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsRoiChannelsServiceImpl.java @@ -0,0 +1,104 @@ +package org.jeecg.modules.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.compress.utils.Lists; +import org.jeecg.modules.base.entity.rnauto.GardsRoiChannels; +import org.jeecg.modules.mapper.GardsRoiChannelsMapper; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; +import org.jeecg.modules.service.GardsRoiChannelsService; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; + +/** + * 存储β-γ符合谱中感兴趣区道址边界数据。 + */ +@Service +public class GardsRoiChannelsServiceImpl extends ServiceImpl implements GardsRoiChannelsService { + + /** + * 存储β-γ符合谱中感兴趣区道址边界数据。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + @Override + public void create(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis) { + List roiChannelsList = Lists.newArrayList(); + this.saveSampleRoiChannels(analyseResult,sampleId,idAnalysis,roiChannelsList); + this.saveGasRoiChannels(analyseResult,sampleId,idAnalysis,roiChannelsList); + this.saveDetRoiChannels(analyseResult,sampleId,idAnalysis,roiChannelsList); + if(!CollectionUtils.isEmpty(roiChannelsList)){ + this.saveBatch(roiChannelsList); + } + } + + /** + * 存储sample谱RoiChannels数据 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + private void saveSampleRoiChannels(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis,List roiChannelsList) { + for(int i=0;i roiChannelsList) { + for(int i=0;i roiChannelsList) { + for(int i=0;i implements GardsRoiResultsService { + + + /** + * 存储β-γ符合谱中分析过程中的有关感兴趣区(ROI)计算的中间结果。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + @Override + public void create(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis) { + List list = Lists.newArrayList(); + for(int i=0;i analyseResult.MDC.get(i)){ +// list.get(i).setNidFlag(1); +// }else { +// list.get(i).setNidFlag(0); +// } +// } + list.get(i).setNidFlag(0); + } + + if(!CollectionUtils.isEmpty(list)){ + this.saveBatch(list); + } + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataServiceImpl.java index 3ed94ab2..29245aa0 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataServiceImpl.java @@ -3,6 +3,7 @@ package org.jeecg.modules.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; import org.jeecg.modules.base.entity.original.GardsSampleData; import org.jeecg.modules.mapper.GardsSampleDataMapper; import org.jeecg.modules.service.GardsSampleDataService; @@ -26,43 +27,18 @@ public class GardsSampleDataServiceImpl extends ServiceImpl implements GardsXeResultsService, BlockConstant { + + /** + * 存储β-γ符合谱最终分析结果 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + @Override + public void create(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis) { + List xeResultsList = Lists.newArrayList(); + this.saveXE_131m(analyseResult,sampleId,idAnalysis,XE_131m,xeResultsList); + this.saveXE_133(analyseResult,sampleId,idAnalysis,XE_133,xeResultsList); + this.saveXE_133m(analyseResult,sampleId,idAnalysis,XE_133m,xeResultsList); + this.saveXE_135(analyseResult,sampleId,idAnalysis,XE_135,xeResultsList); + if(!CollectionUtils.isEmpty(xeResultsList)){ + this.saveBatch(xeResultsList); + } + } + + /** + * 保存XE_131m + * @param analyseResult + * @param sampleId + * @param idAnalysis + * @param nuclideName + */ + private void saveXE_131m(BgAnalyseResult analyseResult,Integer sampleId,Integer idAnalysis,String nuclideName,List xeResultsList){ + GardsXeResults xeResults = new GardsXeResults(); + xeResults.setSampleId(sampleId); + xeResults.setIdAnalysis(idAnalysis); + xeResults.setNuclideName(nuclideName); + xeResults.setConc(analyseResult.Xe131m_con); + xeResults.setConcErr(analyseResult.Xe131m_uncer); + xeResults.setMdc(analyseResult.MDC_Xe131m); + xeResults.setLc(analyseResult.LC_Xe131m); + xeResults.setNidFlag(analyseResult.XE_131m_NID_FLAG); + xeResults.setModdate(new Date()); + + xeResultsList.add(xeResults); + } + + /** + * 保存XE_133 + * @param analyseResult + * @param sampleId + * @param idAnalysis + * @param nuclideName + */ + private void saveXE_133(BgAnalyseResult analyseResult,Integer sampleId,Integer idAnalysis,String nuclideName,List xeResultsList){ + GardsXeResults xeResults = new GardsXeResults(); + xeResults.setSampleId(sampleId); + xeResults.setIdAnalysis(idAnalysis); + xeResults.setNuclideName(nuclideName); + xeResults.setConc(analyseResult.Xe133_con); + xeResults.setConcErr(analyseResult.Xe133_uncer); + xeResults.setMdc(analyseResult.MDC_Xe133); + xeResults.setLc(analyseResult.MDC_Xe133); + xeResults.setNidFlag(analyseResult.XE_133_NID_FLAG); + xeResults.setModdate(new Date()); + + xeResultsList.add(xeResults); + } + + /** + * 保存XE_133m + * @param analyseResult + * @param sampleId + * @param idAnalysis + * @param nuclideName + */ + private void saveXE_133m(BgAnalyseResult analyseResult,Integer sampleId,Integer idAnalysis,String nuclideName,List xeResultsList){ + GardsXeResults xeResults = new GardsXeResults(); + xeResults.setSampleId(sampleId); + xeResults.setIdAnalysis(idAnalysis); + xeResults.setNuclideName(nuclideName); + xeResults.setConc(analyseResult.Xe131m_con); + xeResults.setConcErr(analyseResult.Xe131m_uncer); + xeResults.setMdc(analyseResult.MDC_Xe131m); + xeResults.setLc(analyseResult.LC_Xe131m); + xeResults.setNidFlag(analyseResult.XE_131m_NID_FLAG); + xeResults.setModdate(new Date()); + + xeResultsList.add(xeResults); + } + + /** + * 保存XE_135 + * @param analyseResult + * @param sampleId + * @param idAnalysis + * @param nuclideName + */ + private void saveXE_135(BgAnalyseResult analyseResult,Integer sampleId,Integer idAnalysis,String nuclideName,List xeResultsList){ + GardsXeResults xeResults = new GardsXeResults(); + xeResults.setSampleId(sampleId); + xeResults.setIdAnalysis(idAnalysis); + xeResults.setNuclideName(nuclideName); + xeResults.setConc(analyseResult.Xe135_con); + xeResults.setConcErr(analyseResult.Xe135_uncer); + xeResults.setMdc(analyseResult.MDC_Xe135); + xeResults.setLc(analyseResult.LC_Xe135); + xeResults.setNidFlag(analyseResult.XE_135_NID_FLAG); + xeResults.setModdate(new Date()); + + xeResultsList.add(xeResults); + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java index 458bb105..f1631cb1 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java @@ -93,8 +93,8 @@ public class SpectrumBaseBlockServiceImpl implements ISpectrumBaseBlockService { if(StringUtils.isNotBlank(struct.acquisition_start_date) && StringUtils.isNotBlank(struct.acquisition_start_time)){ gardsSampleData.setAcquisitionStart(DateUtils.parseDate(struct.acquisition_start_date+" "+struct.acquisition_start_time)); } - if(Objects.nonNull(gardsSampleData.getAcquisitionStart()) && struct.acquisition_real_time > 0){ - Date acquisitionStop = new Date((long) (gardsSampleData.getAcquisitionStart().getTime()+struct.acquisition_real_time)); + if(Objects.nonNull(gardsSampleData.getAcquisitionStart()) && struct.acquisition_live_time > 0){ + Date acquisitionStop = new Date((long) (gardsSampleData.getAcquisitionStart().getTime()+(struct.acquisition_live_time*1000))); gardsSampleData.setAcquisitionStop(acquisitionStop); } gardsSampleData.setAcquisitionRealSec(struct.acquisition_real_time); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java index 7cece8f9..28c00d79 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java @@ -7,6 +7,7 @@ import org.jeecg.common.properties.SpectrumPathProperties; import org.jeecg.common.util.DateUtils; import org.jeecg.modules.base.entity.original.GardsAlertData; import org.jeecg.modules.base.enums.DataType; +import org.jeecg.modules.exception.PHD_ReadException; import org.jeecg.modules.native_jni.EnergySpectrumHandler; import org.jeecg.modules.native_jni.struct.AlertSpectrumStruct; @@ -81,10 +82,10 @@ public class AlertSpectrum extends SpectrumHandler{ * 调用dll解析邮件 */ @Override - protected void parseingEmail() { + protected void parseingEmail() throws Exception { final AlertSpectrumStruct sourceData = EnergySpectrumHandler.getAlertSourceData(mailFile.getAbsolutePath()); if(Objects.isNull(sourceData)){ - throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); + throw new PHD_ReadException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); } this.sourceData = sourceData; } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java index 607381c9..092deb36 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java @@ -8,6 +8,7 @@ import org.jeecg.common.util.DateUtils; import org.jeecg.modules.base.entity.original.GardsSohData; import org.jeecg.modules.base.enums.DataType; import org.jeecg.modules.exception.AirSamplerFlowException; +import org.jeecg.modules.exception.PHD_ReadException; import org.jeecg.modules.native_jni.EnergySpectrumHandler; import org.jeecg.modules.native_jni.struct.SOHSpectrumStruct; import org.springframework.util.CollectionUtils; @@ -80,10 +81,10 @@ public class HealthStatusSpectrum extends SpectrumHandler{ * 调用dll解析邮件 */ @Override - protected void parseingEmail() { + protected void parseingEmail() throws Exception { final SOHSpectrumStruct sourceData = EnergySpectrumHandler.getSOHSourceData(mailFile.getAbsolutePath()); if(Objects.isNull(sourceData)){ - throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); + throw new PHD_ReadException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); } if(sourceData.af_record_count <= 0 || sourceData.af_start_date.size() < 0 || sourceData.af_start_time.size() < 0){ throw new AirSamplerFlowException("ariSamplerFlow data error"); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java index 8395a868..e79a08da 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java @@ -80,7 +80,7 @@ public class MetSpectrum extends SpectrumHandler{ * 调用dll解析邮件 */ @Override - protected void parseingEmail() { + protected void parseingEmail() throws Exception{ final MetSpectrumStruct sourceData = EnergySpectrumHandler.getMetSourceData(mailFile.getAbsolutePath()); if(Objects.isNull(sourceData)){ throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java index e0174d01..58378faf 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java @@ -12,6 +12,7 @@ import org.jeecg.modules.config.datasource.DataSourceSwitcher; import org.jeecg.modules.exception.AcquisitionBlockException; import org.jeecg.modules.exception.FileRepeatException; import org.jeecg.modules.exception.HeaderBlockException; +import org.jeecg.modules.exception.PHD_ReadException; import org.jeecg.modules.native_jni.EnergySpectrumHandler; import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; import org.jeecg.modules.service.ISpectrumBlockService; @@ -49,6 +50,14 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ * 基础数据 */ protected GardsSampleData sampleData; + /** + * 日志文件路径 + */ + protected String logFilePath; + /** + * 日志文件名称 + */ + protected String logFileName; /** * 前置检查 @@ -80,10 +89,10 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ * 调用dll解析邮件 */ @Override - protected void parseingEmail() { + protected void parseingEmail() throws Exception { final EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(mailFile.getAbsolutePath()); if(Objects.isNull(sourceData)){ - throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); + throw new PHD_ReadException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); } this.sourceData = sourceData; } @@ -182,7 +191,7 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ } } //提交事务 - spectrumServiceQuotes.getTransactionManager().commit(transactionStatus); + this.spectrumServiceQuotes.getTransactionManager().commit(transactionStatus); this.endIntoDatabaseTime = new Date(); }catch (Exception e){ //回滚事务 @@ -225,9 +234,10 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ logContent.append("------------------- ").append("Write Data into Database Successfully at ").append(DateUtils.formatDate(this.endIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" --------------------"); //保存日志文件到ftp final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties(); - final String ftpPath = properties.getLogPath()+StringConstant.SLASH+this.getFileSavePath(); - final String fileName = super.mailFile.getName().replace(this.currDataType.getSuffix(),LOG_FILE_SUFFIX); - super.ftpUtil.saveFile(ftpPath,fileName,new ByteArrayInputStream(logContent.toString().getBytes(StandardCharsets.UTF_8))); + this.logFilePath = properties.getLogPath()+StringConstant.SLASH+this.getFileSavePath(); + this.logFileName = super.mailFile.getName().replace(this.currDataType.getSuffix(),LOG_FILE_SUFFIX); + + super.ftpUtil.saveFile(logFilePath,logFileName,new ByteArrayInputStream(logContent.toString().getBytes(StandardCharsets.UTF_8))); } /** diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java new file mode 100644 index 00000000..fa919a1d --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java @@ -0,0 +1,299 @@ +package org.jeecg.modules.spectrum; + +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.constant.StringConstant; +import org.jeecg.common.properties.SpectrumPathProperties; +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.base.entity.rnauto.GardsAnalyses; +import org.jeecg.modules.base.enums.DataType; +import org.jeecg.modules.base.enums.DataTypeAbbr; +import org.jeecg.modules.base.enums.SampleStatus; +import org.jeecg.modules.config.datasource.DataSourceSwitcher; +import org.jeecg.modules.exception.BAnalyseException; +import org.jeecg.modules.exception.FileNotExistException; +import org.jeecg.modules.ftp.FTPUtils; +import org.jeecg.modules.native_jni.EnergySpectrumHandler; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.springframework.transaction.TransactionStatus; +import java.io.File; +import java.io.IOException; +import java.time.LocalDate; +import java.util.Date; +import java.util.Objects; + +/** + * B谱分析过程 + */ +public class Sample_B_Analysis { + + /** + * 报告文件后缀 + */ + private static final String ARR_FILE_SUFFIX = ".txt"; + /** + * 正常分析过程日志 + */ + private StringBuilder analysesLog = new StringBuilder(); + /** + * 分析过程当前状态 + */ + private String currAnalysesStatus = null; + /** + * Sample谱结构体数据 + */ + private EnergySpectrumStruct sampleStruct = null; + /** + * sample谱原始数据 + */ + private GardsSampleData sampleData = null; + /** + * gas谱原始数据 + */ + private GardsSampleData detSampleData = null; + /** + * det谱原始数据 + */ + private GardsSampleData gasSampleData = null; + /** + * sample谱PHD文件临时路径 + */ + private String sampleTempFilePath; + /** + * det谱PHD文件临时路径 + */ + private String detTempFilePath; + /** + * gas谱PHD文件临时路径 + */ + private String gasTempFilePath; + /** + * 日志文件路径 + */ + private String logFilePath; + /** + * 日志文件名称 + */ + private String logFileName; + /** + * 报告文件路径 + */ + private String arrFilePath; + /** + * 报告文件名称 + */ + private String arrFileName; + /** + * spring bean引用 + */ + private SpectrumServiceQuotes spectrumServiceQuotes; + /** + * ftp工具 + */ + private FTPUtils ftpUtil; + /** + * 分析结果 + */ + private BgAnalyseResult analyseResult; + /** + * 开始分析时间 + */ + private Date startAnalysisTime; + /** + * 结束分析时间 + */ + private Date endAnalysisTime; + + public Sample_B_Analysis(GardsSampleData sampleData,String sampleTempFilePath,SpectrumServiceQuotes spectrumServiceQuotes, + EnergySpectrumStruct sampleStruct,FTPUtils ftpUtil,String logFilePath,String logFileName){ + this.sampleData = sampleData; + this.sampleTempFilePath = sampleTempFilePath; + this.spectrumServiceQuotes = spectrumServiceQuotes; + this.sampleStruct = sampleStruct; + this.ftpUtil = ftpUtil; + this.logFilePath = logFilePath; + this.logFileName = logFileName; + } + + /** + * 执行解析过程 + */ + public void start(){ + try { + //修改状态为解析中 + this.updateStatus(SampleStatus.IN_PROCESS.getValue()); + //查询det、gas数据(sampleId,inputFileName),sample数据在构造函数已经传过来 + this.queryPHDFile(); + //构造报告文件存储路径及文件名称,日志文件存储路径及文件名称在原始库存储阶段已存在,已经传过来 + this.structureArrFilePath(); + //下载det和gas谱PHD文件,sample谱PHD文件位置在构造函数已经传过来 + this.downloadPHDFile(); + //传入sample、det和gas谱PHD文件调用dll进行分析 + this.autoAnalyse(); + //存储数据 + this.storageDataToDatabase(); + //删除下载的det和gas临时文件 + this.deleteLocalTemporaryFile(); + }catch (Exception e){ + e.printStackTrace(); + } + } + + /** + * 修改状态为解析中 + * @param analysesStatus + */ + private void updateStatus(String analysesStatus){ + this.currAnalysesStatus = analysesStatus; + this.spectrumServiceQuotes.getSampleDataService().updateStatus(this.currAnalysesStatus,this.sampleData.getInputFileName()); + } + + /** + * 查询det、gas数据,sample在构造函数已经传过来 + * @throws FileNotExistException + */ + private void queryPHDFile() throws FileNotExistException { + //查询det和gas能谱文件 + this.detSampleData = spectrumServiceQuotes.getSampleDataService().getSampleIdAndInputFileName(this.sampleStruct.detector_bk_measurement_id, DataTypeAbbr.DETBKPHD.getType()); + this.gasSampleData = spectrumServiceQuotes.getSampleDataService().getSampleIdAndInputFileName(this.sampleStruct.gas_bk_measurement_id, DataTypeAbbr.GASBKPHD.getType()); + + //如果找不到sample、det、gas谱文件数据则解析失败修改记录状态 + if(StringUtils.isEmpty(this.sampleData.getInputFileName()) || Objects.isNull(this.detSampleData) || StringUtils.isEmpty(this.detSampleData.getInputFileName()) || Objects.isNull(this.gasSampleData) || StringUtils.isEmpty(this.gasSampleData.getInputFileName())){ + this.currAnalysesStatus = SampleStatus.FAIL.getValue(); + this.spectrumServiceQuotes.getSampleDataService().updateStatus(this.currAnalysesStatus,this.sampleData.getInputFileName()); + + throw new FileNotExistException("gas or det file is no exist or is error.."); + } + } + + /** + * 创建报告文件路径 + */ + private void structureArrFilePath(){ + //处理此文件需要保存到ftp服务的路径 + final int year = LocalDate.now().getYear(); + final int month = LocalDate.now().getMonth().getValue(); + final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties(); + StringBuilder ftpPath = new StringBuilder(); + ftpPath.append(properties.getRootPath()); + ftpPath.append(StringConstant.SLASH); + ftpPath.append(properties.getArrPath()); + ftpPath.append(StringConstant.SLASH); + ftpPath.append(properties.getFilePathMap().get(this.sampleStruct.system_type)); + ftpPath.append(StringConstant.SLASH); + ftpPath.append(properties.getFilePathMap().get(this.sampleStruct.data_type)); + ftpPath.append(StringConstant.SLASH); + ftpPath.append(year); + ftpPath.append(StringConstant.SLASH); + ftpPath.append(month>=10?month:"0"+month); + this.arrFilePath = ftpPath.toString(); + final String filePath = this.sampleData.getInputFileName().replace(DataType.SAMPLEPHD.getSuffix(), ARR_FILE_SUFFIX); + this.arrFileName = filePath.substring(filePath.lastIndexOf(StringConstant.SLASH)+1); + } + + /** + * 调用dll库的分析B谱结果 + */ + private void autoAnalyse() throws BAnalyseException, FileNotExistException { + this.startAnalysisTime = new Date(); + System.out.println("sam:"+this.sampleTempFilePath); + System.out.println("gas:"+this.gasTempFilePath); + System.out.println("det:"+this.detTempFilePath); + + BgAnalyseResult analyseResult = EnergySpectrumHandler.bgAnalyse(this.sampleTempFilePath,this.gasTempFilePath,this.detTempFilePath); + System.out.println(analyseResult); + this.endAnalysisTime = new Date(); + if(Objects.isNull(analyseResult)){ + throw new BAnalyseException("THE PHD file cannot be parsed:"+this.sampleTempFilePath+","+this.gasTempFilePath+","+this.detTempFilePath); + } + this.analyseResult = analyseResult; + } + + /** + * 下载det和gas谱PHD文件,sample谱PHD文件位置在构造函数已经传过来 + * @throws IOException + */ + private void downloadPHDFile() throws IOException, FileNotExistException { + boolean flag = false; + //下载gas谱PHD文件到本地临时路径 + String gasFileName = gasSampleData.getInputFileName().substring(gasSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH) + 1); + String gasFileFTPPath = gasSampleData.getInputFileName().substring(0, gasSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH)); + boolean gasFlag = ftpUtil.downloadFTPFile(gasFileFTPPath,gasFileName,this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()); + if(!gasFlag){ + flag = true; + } + gasTempFilePath = this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()+File.separator+gasFileName; + + //下载det谱PHD文件到本地临时路径 + final String detFileName = detSampleData.getInputFileName().substring(detSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH) + 1); + String detFileFTPPath = detSampleData.getInputFileName().substring(0, detSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH)); + boolean detFlag = ftpUtil.downloadFTPFile(detFileFTPPath,detFileName,this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()); + if(!detFlag){ + flag = true; + } + detTempFilePath = this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()+ File.separator+detFileName; + + if(flag){ + throw new FileNotExistException("gas or det file is no exist or is error.."); + } + } + + /** + * 数据入库 + */ + private void storageDataToDatabase(){ + String logFileRelativePath = this.logFilePath+StringConstant.SLASH+this.logFileName; + String arrFileRelativePath = this.arrFilePath+StringConstant.SLASH+this.arrFileName; + DataSourceSwitcher.switchToOracle(); + final TransactionStatus transactionStatus = spectrumServiceQuotes.getTransactionManager().getTransaction(spectrumServiceQuotes.getTransactionDefinition()); + try{ + //存储基础数据 + final GardsAnalyses analyses = spectrumServiceQuotes.getAnalysesService().create(this.sampleData.getSampleId(),this.detSampleData, + this.gasSampleData,this.startAnalysisTime,this.endAnalysisTime,logFileRelativePath,arrFileRelativePath); + //调用原始数据dll获取gas、det谱数据入库,sample已有数据直接入库 + //存储sample谱B_Energy和G_Energy块数据 + spectrumServiceQuotes.getGardsCalibrationPairsService().createB_EnergyRecord(sampleData.getSampleId(),analyses.getIdAnalysis(),sampleStruct); + spectrumServiceQuotes.getGardsCalibrationPairsService().createG_EnergyRecord(sampleData.getSampleId(),analyses.getIdAnalysis(),sampleStruct); + //存储det谱B_Energy和G_Energy块数据 + final EnergySpectrumStruct detStruct = EnergySpectrumHandler.getSourceData(detSampleData.getInputFileName()); + spectrumServiceQuotes.getGardsCalibrationPairsService().createB_EnergyRecord(detSampleData.getSampleId(),analyses.getIdAnalysis(),detStruct); + spectrumServiceQuotes.getGardsCalibrationPairsService().createG_EnergyRecord(detSampleData.getSampleId(),analyses.getIdAnalysis(),detStruct); + //存储gas谱B_Energy和G_Energy块数据 + final EnergySpectrumStruct gasStruct = EnergySpectrumHandler.getSourceData(gasSampleData.getInputFileName()); + spectrumServiceQuotes.getGardsCalibrationPairsService().createB_EnergyRecord(gasSampleData.getSampleId(),analyses.getIdAnalysis(),gasStruct); + spectrumServiceQuotes.getGardsCalibrationPairsService().createG_EnergyRecord(gasSampleData.getSampleId(),analyses.getIdAnalysis(),gasStruct); + + //存储gards_calibration表数据sample、det、gas谱B_Energy和G_Energy块数据 + spectrumServiceQuotes.getGardsCalibrationService().create(this.analyseResult,gasSampleData.getSampleId(),analyses.getIdAnalysis()); + //gards_roi_channels数据表,存储sample、det、gas谱数据 + spectrumServiceQuotes.getRoiChannelsService().create(this.analyseResult,sampleData.getSampleId(),analyses.getIdAnalysis()); + //gards_Xe_results数据表XE_131m、XE_133、XE_133m、XE_135数据 + spectrumServiceQuotes.getXeResultsService().create(this.analyseResult,sampleData.getSampleId(),analyses.getIdAnalysis()); + //gards_ roi_results数据表 + spectrumServiceQuotes.getRoiResultsService().create(this.analyseResult,sampleData.getSampleId(),analyses.getIdAnalysis()); + //提交事务 + spectrumServiceQuotes.getTransactionManager().commit(transactionStatus); + }catch (Exception e){ + //回滚事务 + spectrumServiceQuotes.getTransactionManager().rollback(transactionStatus); + throw e; + }finally { + DataSourceSwitcher.clearDataSource(); + } + } + + /** + * 删除下载的det和gas临时文件 + */ + private void deleteLocalTemporaryFile(){ + File detFile = new File(this.detTempFilePath); + if(detFile.exists() && detFile.isFile()){ + detFile.delete(); + } + + File gasFile = new File(this.gasTempFilePath); + if(gasFile.exists() && gasFile.isFile()){ + gasFile.delete(); + } + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java index 81808e7c..bd021eab 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java @@ -1,33 +1,13 @@ package org.jeecg.modules.spectrum; -import org.apache.commons.lang3.StringUtils; -import org.jeecg.common.constant.StringConstant; -import org.jeecg.modules.base.entity.original.GardsSampleData; import org.jeecg.modules.base.enums.DataType; -import org.jeecg.modules.base.enums.DataTypeAbbr; -import org.jeecg.modules.base.enums.SampleStatus; -import org.jeecg.modules.exception.FileNotExistException; -import org.jeecg.modules.native_jni.EnergySpectrumHandler; -import org.jeecg.modules.native_jni.struct.BgAnalyseResult; - -import java.io.File; -import java.io.IOException; -import java.util.Objects; +import org.jeecg.modules.base.enums.SystemType; /** * 样品谱处理 */ public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{ - /** - * 正常分析过程日志 - */ - private StringBuilder analysesLog = new StringBuilder(); - /** - * 分析过程当前状态 - */ - private String currAnalysesStatus = null; - /** * 设置过滤链路 */ @@ -60,78 +40,26 @@ public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{ super.handlerOriginalData(); //保存email日志 super.saveEmailLog(); + //把原始库流程日志写入ftp日志文件 + super.saveLogToFtp(); + //进行B、G(P)谱分析 + this.autoAnalysis(); //删除本地临时文件 super.deleteLocalTemporaryFile(); - //把流程日志写入ftp日志文件 - super.saveLogToFtp(); }else{ super.next.handler(); } } /** - * 处理分析结果 - * - * @param struct + * 进行B、G(P)谱分析 + * @throws Exception */ - protected void handlerAnalysisResult() throws FileNotExistException, IOException { - - final String sampleFilePath = super.ftpSavePath; - String detFilePath = null; - String gasFilePath = null; - //修改状态为解析中 - this.currAnalysesStatus = SampleStatus.IN_PROCESS.getValue(); - super.spectrumServiceQuotes.getSampleDataService().updateStatus(this.currAnalysesStatus,sampleFilePath); - //查询det和gas能谱文件 - GardsSampleData detSampleData = super.spectrumServiceQuotes.getSampleDataService().getDetInputFileName(super.sourceData.detector_bk_measurement_id, DataTypeAbbr.DETBKPHD.getType()); - GardsSampleData gasSampleData = super.spectrumServiceQuotes.getSampleDataService().getGasInputFileName(super.sourceData.gas_bk_measurement_id, DataTypeAbbr.GASBKPHD.getType()); - - //如果找不到sample、det、gas谱文件数据则解析失败修改记录状态 - if(StringUtils.isEmpty(sampleFilePath) || Objects.isNull(detSampleData) || StringUtils.isEmpty(detSampleData.getInputFileName()) || Objects.isNull(gasSampleData) || StringUtils.isEmpty(gasSampleData.getInputFileName())){ - this.currAnalysesStatus = SampleStatus.FAIL.getValue(); - super.spectrumServiceQuotes.getSampleDataService().updateStatus(this.currAnalysesStatus,sampleFilePath); - - throw new FileNotExistException("gas or det file is no exist or is error.."); + protected void autoAnalysis() throws Exception { + if(this.sourceData.system_type.equals(SystemType.BETA.getType())){ + Sample_B_Analysis bAnalysis = new Sample_B_Analysis(super.sampleData,super.mailFile.getAbsolutePath(), + super.spectrumServiceQuotes,super.sourceData,super.ftpUtil,super.logFilePath,super.logFileName); + bAnalysis.start(); } - //下载det谱PHD文件到本地临时路径 - final String detFileName = detSampleData.getInputFileName().substring(detSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH) + 1); - detFilePath = detSampleData.getInputFileName().substring(0, detSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH)); - ftpUtil.downloadFTPFile(detFilePath,detFileName,this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()); - detFilePath = this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()+File.separator+detFileName; - - //下载gas谱PHD文件到本地临时路径 - String gasFileName = gasSampleData.getInputFileName().substring(gasSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH) + 1); - gasFilePath = gasSampleData.getInputFileName().substring(0, gasSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH)); - ftpUtil.downloadFTPFile(gasFilePath,gasFileName,this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()); - gasFilePath = this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()+File.separator+gasFileName; - - //分析结果 - final BgAnalyseResult analyseResult = EnergySpectrumHandler.bgAnalyse(sampleFilePath, gasFilePath, detFilePath); - System.out.println(analyseResult); - if(Objects.nonNull(analyseResult) && analyseResult.analyse_flag){ - //存储数据 - super.spectrumServiceQuotes.getAnalysesService().create(analyseResult,super.sampleData.getSampleId()); - //修改分析状态为已完成 - this.currAnalysesStatus = SampleStatus.COMPLETE.getValue(); - super.spectrumServiceQuotes.getSampleDataService().updateStatus(this.currAnalysesStatus,sampleFilePath); - - //调用原始数据dll获取gas、det谱数据入库,sample已有数据直接入库 EnergySpectrumHandler.getSourceData() - - //存储gards_calibration表数据sample、det、gas谱数据 - - //存储GARDS_ROI_CHANNELS表数据sample、det、gas谱数据-乔钦政那边已和周雨涵调试过 - - //gards_ Xe_results数据表 - - - } - } - - /** - * 下载FTP文件到临时目录 - * @param filePath - */ - private void downFTPFileToTemporaryDirectory(String filePath){ - } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumHandler.java index b976f417..148e5fc3 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumHandler.java @@ -5,6 +5,7 @@ import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.base.enums.DataType; import org.jeecg.modules.email.EmailProperties; +import org.jeecg.modules.exception.PHD_ReadException; import org.jeecg.modules.ftp.FTPUtils; import javax.mail.Message; import java.io.File; @@ -94,7 +95,7 @@ public abstract class SpectrumHandler extends Chain{ /** * 调用dll解析邮件 */ - protected abstract void parseingEmail(); + protected abstract void parseingEmail() throws Exception; /** * 保存能谱文件到ftp diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java index f4485823..8aacc32a 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java @@ -95,7 +95,7 @@ public class SpectrumParsingActuator implements Runnable{ mailContent = new StringBuilder(); emailServiceManager.getMailContent(message,mailContent); //所有邮件都需以.eml格式存储到ftp eml文件夹中 - downloadEmailToFtp(); +// downloadEmailToFtp(); //判断是否是IMS2.0协议文件 if(checkMailContent(mailContent,subject)){ SpectrumHandler spectrumHandler = new SamplephdSpectrum(); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java index 2a495bee..861eaa6b 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java @@ -59,4 +59,11 @@ public class SpectrumServiceQuotes { private final GardsNuclLinesIdedAutoService gardsNuclLinesIdedAutoService; private final GardsQcCheckAutoService gardsQcCheckAutoService; + + private final GardsXeResultsService xeResultsService; + + private final GardsRoiResultsService roiResultsService; + + private final GardsRoiChannelsService roiChannelsService; + }