From 20360b1647d70bfed06ff976bb461eabac7fb9e3 Mon Sep 17 00:00:00 2001 From: yj <913944315@qq.com> Date: Tue, 28 May 2024 13:33:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E5=B1=B1=E7=AB=99=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MeterReadController.java | 40 ++++++ .../analysis/entity/MeterReadingRecord.java | 5 + .../mapper/MeterReadingRecordMapper.java | 7 + .../service/MeterReadingRecordService.java | 5 + .../impl/MeterReadingRecordServiceImpl.java | 8 ++ .../analysis/MeterReadingRecordMapper.xml | 7 + .../controller/MeterReadingController.java | 2 + .../src/main/resources/IEC61850.xlsx | Bin 14258 -> 14153 bytes .../device_udpclent/common/utils/Files.java | 67 +++++++++ .../models/scheduled/UdpClentScheduled.java | 131 ++++++++++-------- .../src/main/resources/application-dev.yml | 2 +- .../src/main/resources/application.yml | 3 + 12 files changed, 215 insertions(+), 62 deletions(-) create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterReadController.java diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterReadController.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterReadController.java new file mode 100644 index 0000000..fc4698e --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterReadController.java @@ -0,0 +1,40 @@ +package com.xr.device_car.modules.analysis.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xr.device_car.config.utils.StringFormatterUtil; +import com.xr.device_car.config.utils.StringUtils; +import com.xr.device_car.modules.analysis.entity.DataTransferCamera; +import com.xr.device_car.modules.analysis.entity.MeterReadingRecord; +import com.xr.device_car.modules.analysis.service.MeterReadingRecordService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@RestController +@RequestMapping("read") +@RequiredArgsConstructor +public class MeterReadController { + + private final MeterReadingRecordService meterReadingRecordService; + + @RequestMapping("/pageList") + public IPage pageList(MeterReadingRecord readingRecord, HttpServletRequest req){ + Page page = StringFormatterUtil.returnPage(req); + QueryWrapper query=new QueryWrapper<>(); + if(StringUtils.isNotEmpty(readingRecord.getMeterName())){ + query.like("b.meter_name",readingRecord.getMeterName()); + } + if(StringUtils.isNotEmpty(readingRecord.getOwningInterval())){ + query.like("b.owning_interval",readingRecord.getOwningInterval()); + } + IPage ipage = meterReadingRecordService.pageList(page,query); + return ipage; + } + + + +} diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/MeterReadingRecord.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/MeterReadingRecord.java index 727fd88..90aecea 100644 --- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/MeterReadingRecord.java +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/MeterReadingRecord.java @@ -32,6 +32,11 @@ public class MeterReadingRecord implements Serializable { */ private String meterCode; + @TableField(exist = false) + private String meterName; + + private String readingUrl; + private String readingType; diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/MeterReadingRecordMapper.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/MeterReadingRecordMapper.java index fe27af7..d5b61cc 100644 --- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/MeterReadingRecordMapper.java +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/MeterReadingRecordMapper.java @@ -1,7 +1,12 @@ package com.xr.device_car.modules.analysis.mapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xr.device_car.modules.analysis.entity.MeterReadingRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; /** * @author asus @@ -15,6 +20,8 @@ public interface MeterReadingRecordMapper extends BaseMapper void deleteToLog(); + IPage pageList(@Param("page") Page page, @Param(Constants.WRAPPER)Wrapper wrapper); + } diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/MeterReadingRecordService.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/MeterReadingRecordService.java index 19a5cba..7ab19f2 100644 --- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/MeterReadingRecordService.java +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/MeterReadingRecordService.java @@ -1,5 +1,8 @@ package com.xr.device_car.modules.analysis.service; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xr.device_car.modules.analysis.entity.MeterReadingRecord; import com.baomidou.mybatisplus.extension.service.IService; @@ -13,4 +16,6 @@ public interface MeterReadingRecordService extends IService void deleteToZt(); void deleteToLog(); + IPage pageList(Page page, QueryWrapper query); + } diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/MeterReadingRecordServiceImpl.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/MeterReadingRecordServiceImpl.java index bbd3a09..9d2a1d3 100644 --- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/MeterReadingRecordServiceImpl.java +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/MeterReadingRecordServiceImpl.java @@ -1,6 +1,9 @@ package com.xr.device_car.modules.analysis.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xr.device_car.modules.analysis.entity.MeterReadingRecord; import com.xr.device_car.modules.analysis.service.MeterReadingRecordService; @@ -26,6 +29,11 @@ public class MeterReadingRecordServiceImpl extends ServiceImpl pageList(Page page, QueryWrapper query) { + return ((MeterReadingRecordMapper)this.baseMapper).pageList(page,query); + } } diff --git a/device_cars/src/main/resources/modules/analysis/MeterReadingRecordMapper.xml b/device_cars/src/main/resources/modules/analysis/MeterReadingRecordMapper.xml index 98d50db..8f4b424 100644 --- a/device_cars/src/main/resources/modules/analysis/MeterReadingRecordMapper.xml +++ b/device_cars/src/main/resources/modules/analysis/MeterReadingRecordMapper.xml @@ -33,4 +33,11 @@ delete from send_udp_log WHERE DATE(request_time) = DATE(NOW() - INTERVAL 1 DAY); + + diff --git a/device_display/src/main/java/com/xr/device_display/modules/analysis/controller/MeterReadingController.java b/device_display/src/main/java/com/xr/device_display/modules/analysis/controller/MeterReadingController.java index 00cd0b3..803cff1 100644 --- a/device_display/src/main/java/com/xr/device_display/modules/analysis/controller/MeterReadingController.java +++ b/device_display/src/main/java/com/xr/device_display/modules/analysis/controller/MeterReadingController.java @@ -17,5 +17,7 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/meter-reading") public class MeterReadingController { + + } diff --git a/device_iec61850clent/src/main/resources/IEC61850.xlsx b/device_iec61850clent/src/main/resources/IEC61850.xlsx index df2be4b816931c8722ad2be7dda7fe603b6cdf0f..fa770a2b18fb20854ea88085fb97a70783026885 100644 GIT binary patch delta 8850 zcma)iby!qg-!3hUbSj9Xi1Z*JH6TcrGy>8B14v74Q9_Uq1_|lzE|G4KZkUl)x&&zk z&Vcdwyx;qsbLNkI&9(R1Yp?aYYwakr@3t#RLIuv_pPfEJMM2R)LqQ=%K|wLIH&u1C zcW~k|wRbeX=MJ&;kDQfn0Q4`IHb8#MwS;&X50#L^`x3@ z&fXPLgcrK9Vb=&9H=Omm5q2+$=wfag+v?`iwG&ICvKhWrhdBQDsOQH=rqdZ^tXaq) z>j{)t873r~8)z8PeiW?4T9hyGWo1{W=^q*wQsSxd!i${h5{aUmsEp`69=0v9IC~F4 zVf8aG#tFk&qO$W%z4>P4C7GARnxKXYN;A)621%i}i)mje9o zt9N{Uv#8BkR$MWhUlSMH`#50_wI(pF+6;_;f% zv?A~=t+ZV;lp}5}=XQwyG9w+X7Yc?eQ_Wo;Zrici{MbCXlTKy5SX1f@)mlxhDjL03 z0IOO|Q}v?ptB55oYw_aMBCtAZX~wg6Dgz#Zf(KkJ8b!jD1%t%qEe8p!Y)p={j$Wu8 z0d2Ac_)gL|eX1X^(WS@zNn4{?f>WLR%5^oiNNv2G@aI5H_vj`mT*)a{>4 z`y8DgmGv!B>)RJxG;wBKzs7Rn2H~?2i|3U!fQN$uh_rfYbidDVh2Amb2w!cjCfp-x z=>0`JL6VBg3$tC+%PQd_tAuh{r3eB7s6B=xPV^&dCx+`NC~43d3`W2S-a#I)Ei!VE zGVjf_7r(31AH^cMl*SjAML$s?4NrKKCO@P#Y-F@?i;&PQSvzMWzN!aB37wY3MTjjD*^mwON+2c zB^M_p6T8cLnO{XvR zVx~vRwNE#XXYUD6=D~3<1CMo37P?h`sZX@4&9>g@cQAXn9@3r~aj5 zhqqwxcM_OrF&i-E-h zorqQwr!PNd8p~DYmRrY8-P~$nCMPRggm4wX`oYp7D^HSmT9$%x~HkH<$n z2R@#jUuMQ^G6A=U@up71`2@!KV|ov0Fzq{eJG<~&dpHsN^fZ1(1tD1GbLy1I383D&PC(VxQ4&FiPV&m9ZmsSU$4hTsVA zC#mPl?XC9;muK2rm#Q_2v&(H9gq0Oe4o^Ja?65GjUFiER>nYZ)F^A z6P^MwZ%^1Yiqk5vMr1wpls5AU@E$;hTT3qvJ~as1ks@Mfio-|W=7}xWh@EUA;@z}o z)e!-)(3R!3Yb37|bly=dwMDkEvECtBOwfsl{o3}Sji1$rk;f(|U+?+4kSN$-xnL|V zZ05&WZNb=!=_I?BWu_DV??h%0?ErMjYk&_69#~Kv65$G3xgPg8&xW zDm>&7I=Qk1HOI(rrZ+D8X5@Xt!mGdDI1d_Il>3Ao3wCyg zXH}BBri$#DKZs>|fiDSOOt!lZ=qRteHc1JMS(A$A%PP!K&CQpH*T!Z>sG3+$r1di# zd^OO=tp?Nbaa9nff||*ohCeXTA^ovcCKc-BDSaHy&u;U*nHHLeHYpnH_<;wJ&QanX zWQhg$mTiYT$ zlRLV$qM9XVtmMWda-81Cahh1&218!?f|@0eqvK2x>{DJ#e*(imhnQjUtRqL(45lrA zPF7;E?9DjJLS;pYUm;`)TX->IwKsI{@;u&FZA0u6WFaAn-GefImuDjPS}N*4u&05D z!7`Nq?m-y~s_CVCPE6C(&==IOH>&Z*X~gkA(zvLsoH{Dn_p*kTeqAzPNG=PKVnnjx zaPzY~1kD%J9t9&K?fVdG-VGTjLP{Z+o;Rjq^VU-@s~(pNx65O!)j2!8JsaHOG= zzvqkOK`4lRa~KKuZN6Y-UWgPT+Bk48+csB;;R*qhG+okiTj~)lXZ6bT8!$2rYtmk} zq==fTsE`_10DkYoawlI^+MYR1$uYneR1B?1L})Ekz#jX@7V&VjOT-&7{|JB8U76{} zS;6D}vx-_jr=b<1B}E^)%J`CvB`OwHX)NJZ>dNJDJP)E9&-3OjdQROmqGP$wJ4oq$|2!vX!jXwTP1$$yVQ= zY)wHbZYkv1TiWbDOqID5hkOT^7TxJm98!Owi|nf6*eV7I3~k(Z4toHnH7dj(gk|wB zq1h$;1D0&{v9-caur9HRwQ6Ijr^3a8CGbEVvcAuI$=S@2kn0cPU0h)r0S(*ZxPCn4 zl>CE(My+jJ#^%QUNd*ix#K)X@sTmBuFyWtA$lwFL?UoNHu`5gQXGk93u-X&OD!gu# zi_7ywqgEZi;#d=WaX%J0l}Rw|Yr)?R6oORoKMv$aa`r)elv;KY3E2OjJ<<*Sp?%PM zGY&`2*ynzU|MUp_Ls2coYMQIcAdyJxzu%(#zf^gO#H&I9Nr%wh|Gmv0Bs%_$#O?n? z0{8_*H-|k=`u`n?IO+d}1kyx*Bat}z6A9=g6661WNB}{c{-E%0&&hwYip(V16zRID8P>Atx@R0z?QQa9^M2SNlD`QV-wNM1NbDpmKVjZ0+R&ufOT0 z$ZrBQ4Eb4&G^o5Ln=AaiNeVLaPO>jUBW)HL8i)F?BvO=kkP?tC&vKpORo54x837)m z5cgK7)@mu{^dUR!9Roczz9+U=Bastoz7w6YCJ{d&2kZCYc>YOF(;wU|kIaI#0@|#w zJDWh6Xy|1k{MY38fJ}~dB%a@O^Ow!=Y5mHYD>k+} z=Ldy%IKP16X62MqxMcmUfom&X;6FKB0RoUdE)yWa9yi7D+%592bo-6**7!!o6~;Oc zGm9Ze!{0f?LQ^Wo#qu-IH|+k>y9$|KYYl7D~O23rLfkF8m`+i_%In7?5?s*-YrR zo$)KqHLPurVO0y4(-(oIUV_!!i%f#mYQNmh-IWXj2wEyAx>^5K9y-LZvw}SFaUQsU z1Zh=@Y&;g6vAPdrFKvF0C6V{>ui%%u3iHUSa-${w{65)5J{c6XX)x`2?}E^WOQ#3^ zSpAobpA%6_{c!Tj6n^!G2f5jkPI@IJc9#0spWfSUm3e25W&aAeAmMWNuqBu}5;v;6 z-wBP(A=t%;@TO{3p(-*4ks)J|NmT%H<$e2CNQ(k$OB#Q95;FVqNUip8Ev?@og|~cy zRKm0WqJ&!ga^|CzIFic+S42&i-QL*W3zMNYN*+AqSNt+@v-y)Y>nlwEq2gGpaiHyP zHqy%{r++TTkV;+>)`Da~vi_}@D3~5n?^~|J<6*8=8j86}+!M`TVL$X+dQD$As~3ST zp;Qrgs&v@TbvONz+V7$8z& zQF(0T)#0w7dWnlcrxX9bM)^_hm#V>5-r<<~o@ovR&9b$cH z=f&ZX*Yifi;|mrr{%{5 zWp`HdwP5x!9v4RCb7Uj9fbej0p9AtS1DP5M3IXz2gS#!4lk*E(bEnHkUSkFjd-yo{ zxtQ^VuWE@mmBrh%9LlWdavhK_+NLT4HMcP>nqHbM8riDaV`Dd}cOa!{m#&w$rpw4N z$1A(ah~8Gav{E=LometHJRfZ=aWd-iEOut+4U$tMz78cD5E>8ymTQ(9cGUH?!vc#O zM+jxYwq5R2DpjUU8V+oW%t&VMrmru_)TV`id)D=fwx<$52Z`nxOr0N8SINu=*%*mb zY^tJ?&*W$b;kTyujIHIkSrHWuWdUZMJAF+=0b1DE&5|z8WRqHepI?BTrpB0siK^C7B%TPlXhX(3d&BM4cD;wUV4r;GQ@*G+WE-5EXDX}_d=qd!8zDH~ zs1>I_owuR=O4P7;O)yGcfVX{pY-yh))xN<;g3z50&*-}rWdjo>uW!!4>l7`)F`p6wiEcV(;{A9gH^}>O=~V17#saw)UYjT6TK(c8UXd zNB5qHtAbOA&8UsO7o;j}#U>z5rl6ijMN%A8sHbm?pU6&dAFd=yb?%`%m&)53ykp+~ zwuy1=G%@(u`22`9qd=}*{U@IEd@x@RoT`sJz*9{*R85SzE=3Ka`teBJqfT}Fs%GO; zu;>?+op&rrzhX!tJw8lG#P95$0nv3Z(`-IlS>F`w2=Av7Hk=ou=Ngfb+)pvpAW_($OByG;&v**;XrXRUGt;%*QmTEO5}1`Gv3#A zSOo|s!ferQ&$^sow@b#*(>K2qbsmg;AvMjkcCbniHc=f8p}H^leKO}W>HscpvjtyS zu3Z&=tJTDZO;`Bfx_~X4?CEo0Y?B5n*d?sW%5&Ze^0HW_9>Oo+pxd6?GbFZGIX2Dl zWkUEP%o^Z_g?>m~t*kS>acccx+K#6IL>2gU|NSoRl4-_tUOY$XtloPB+r$T)J+l2*Bdx>UL+?WM)T|pa&RH|!=TvUw$(G-D-y87<-aZvMq z6UEJXx+HU*1BcJ@g1j|^wTk=w%;9UX2PWz(BR6!ug%?5WYYrIvf(+*9=+YWf0lzF4 zAF30n`zs>jzT3L@=(K_;)JT$)noV<*nIE);M|6FP6(ICJnM(;C)!58EG{L6=uN9*3 zf#W;?uIDV%lsm+?A8CFxNl^E4&gqEO)41Kp7O^mqCZR_`!Cbav5*IE)bCQz8nIE1Y z4WbwF4H0uB(e(~F!UB%9C~L$jPW#=lIp6c=xzD{h>z|S~SaPZOlu_+mnJHMo67)g~ z9zhR&mJ%WnKG((QI!@+DGNs;yW2ShE^?RBaaDe#UVAEOi`Kx(eZ(4FLBZ-QJdD+Pa zuy)Oj5x-7X_n-@AArAA1L5g8-3Ol2vdz%X>of}g{o&+us@tbYaS#}by!moYl$J9A} zs8Tt!gzb#o)Boe0^ZT!6o;{9<==N5gI|W||!P$XH6^C=9Ea9Eu*PN_f>TWSA6`S0+ zQ3J5DOm>cUQ%e|IihP7yE^FVW+ZfjOrH9pDw-=LyqZ*Rkp+v0^@smM0P~RbDcm&+P zxdrzPs!r!dX*ZGf&7^vY2!D#vbl=A@M5s-v6D~Q<*lq?N(35yyPP}w-cf_G5QjxMp zrsCV1GU6o1DD3nwL8(Ih&uY-Lc|S~F5`O@i&g{U`f~{R{!rxp7R$x(-91*E1bCDPf z7{66TM>}}S{BFS}HwXn9L&jd(Gmz@EaNQAtd%yX53#Y>MEi&PqmmN1B5*wSh>$t}+ zq~UfO^0nnKsAd((h1jso*kHxcg7MS>3{B;1NaGUhMRT6tUWo*Mm8V#c823;O`+x~} z>&Wr;1rodK_H&Payv3i!B88LK5-G9t< z=(fw9U5;N^QRi{U4`>j6b<0avxb9H8+qXfYgzBgAKtBYn z>m#QGp_DOM1u8LC+;p?~gWBLFwxJhK8T`@8P|D~^7~Yv|?E3oG5ZEpq#J&+xG}+=< zQ94&P-#z-iG4DzD5mCC>B0}QVSHfXwXne382<_ZHlSb$=p`$LF?Ii8IpjJYJm8B{+ zoH!nY!$)S5m2XaqUu;09iW^i@0E%}x3`sn#F1yMvDii|1iK6v_HG2$^66St#O%=?< zHcY4w-$0v+O?uH2ztkf(x~IFZZ6^a~#LJ8{Fdlt(H$+`V(i$U;2M@DL-L$)5&(}sv zVm*FrlWLpckGl@Hh4}A1b^PkRTO$F|C{25gu94RB`ZQT&`7lWtAhpCO1_JrmpAjZs zd}o(-J2?zz{8*wNE9gIKuNU%}vb?-_U^`j#;;4S=m1czSaEbE8{>0u0ktvkX1*OVQ zIEW{hme)|#Y->ETBG$*l<9v#qEam3BkRHo7Mg_zAghRK36)xzk4>p1MN%yRYWQ5p{ z?8i$a3I*+qjQ&j(Z39!S1Hdi*5q+ZN-XMPKM=zuk-*Vj311%)#Q$*Ykac}nZCytJ1 zVk0dlhIc5SDH7oOGg-44Yq>~oHQkAnW*c%%c&x-kw$TuoBRRJIqlZnrlYKM1x^J<+C6%omY3Qoa_h#7gjq67)EKHHU)vhOa*2<%VunSC zm5{H`x&(Li@9&NA5))_ue4WBV1koYNDdkJA@k*G~BFtEet`EN6#WfyDmzFen5K9x0 zTmscjW8t}}7}}*f8P2M9`#Gxx2duf1+~Wz&pfug(?k6OcRr>Wb(C?u_Y4<$%1Ew3FKtQD!P%}TYlK8#Tv7#zSf6f0WA6Q{oK?BOfEdu`r=Xy$zP8hW-R z*SS@Snm}4I0frEBjO@KHZRJ*)56JkFdSTjiDE%q+@DlP66mbhstfTU$;m@mnW>MeD6FOJ$>=&UY?9(b1}Jys39B`p zu(0#OnIIKDUDu~z$~1BWzok;6KQ-7qLxY9jcbh1tnm z`ta7Crr+T2IhlqPlIPl}ZD0{plVTa_0$(4VqgV zO9xNxzv8c?=Ehu8{D^OtkvgwjLW^aqW#wghz7U4 z?O zp{mp0s8a_P?Q4wh8`J?H;OvQaY+m?lg9jpySURnD_-J#=S=W9@)QhT#cdV2xFFxND z(UuiOeAw7vm1XVz%I0ZqGK5B4CV@-QW8pG!=wattsZ~>7S)-M2TSQqNp|%X4stgTX zOZ?JNnIcz48>1voW>ym&)BnCnh>(}mjKpkwjCugz;qr8B>PHp1wn10ogzAANMtFoV zNBU9)MGW=wk8u@R30~7ZlvT5VJKNv;9UAmyijRS@s$M$KU5+E zV=vlxhNM^j)eD6kx<}kRICVNrZ!wV@1sraNrhcyP)T_xR%S8X?97v)SUjq4QfDn>* zL_hD5-0U4~OzZ)Bo6Fmz&YrPAg;DQ|NVcq_sd z<{A&HNUxEAiah99jrv8O6e;UP*gF{NX$*d6OUF<&_vb%-WhZX9wG?&K6gu~rhHZt& z{nH(L`{+cMKrS014Ac(F3Y^p@+)Mdb{D-&UubP!0iAw;gezj$TOOwAn$}6qA17)6B zHT)H0RUf2y&vuQEIO-~3)}AxAzz;%get4@#v2C@MzeAOl zWSxW&_P?fP-kKDT`hW zIExV?ki7Ir_iHJh3@)1PDl&8=evWUbq@sv zN+>`94dbIh^?>H`L2>?kq5*x#55lYV0km!|sD!{>+CRR5hrHLle5sE7p`tJ#w@;yg0<5(Ec^~}G@eXLWfH3Mj6axf8 z!={El05Q}4Cn5f6ybARKJwOGZHK1E`f8Nzwqo7b-HbMS=UNRp8+JHd=y)JkM4V4`F TKu{X>JJeT@11p91vd#YiJekOG delta 8980 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 OKTuR8BuoLs)&BvZDh+7> diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/Files.java b/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/Files.java index 0f62a17..7a969ff 100644 --- a/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/Files.java +++ b/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/Files.java @@ -6,6 +6,7 @@ import sun.misc.BASE64Encoder; import javax.imageio.ImageIO; import java.awt.*; +import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.*; import java.net.Authenticator; @@ -355,13 +356,79 @@ public class Files { return rqImg; } + public static BufferedImage drawRectangleAndText(BufferedImage image, double x1, double y1,double x2, double wid, double hei, String text1, String text2) { + // 创建一个Graphics2D对象 + Graphics2D g2d = image.createGraphics(); + // 设置抗锯齿 + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + // 创建一个Rectangle2D.Double对象 + Rectangle2D.Double rect = new Rectangle2D.Double(x1, y1, wid, hei); + // 绘制红色框 + g2d.setColor(Color.RED); + g2d.draw(rect); + // 设置粗线条 + g2d.setStroke(new BasicStroke(3.0f * 30)); // 设置线条宽度为3.0f + // 设置字体和颜色 + g2d.setFont(new Font("微软雅黑", Font.BOLD, 38)); // 使用支持中文的字体,增加字体大小 + // 获取当前时间 + String currentTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + // 获取文本的宽度和高度 + FontMetrics fm = g2d.getFontMetrics(); + // 绘制当前时间的背景矩形 + int padding = 20; + int currentTimeWidth = fm.stringWidth(currentTime); + int currentTimeHeight = fm.getHeight(); + int rectPadding = 5; // 背景矩形内边距 + g2d.setColor(new Color(0, 0, 0, 50)); // 黑色半透明背景 + g2d.fillRect(padding, padding, currentTimeWidth + 2 * rectPadding, currentTimeHeight + 2 * rectPadding); + + // 绘制当前时间在左上角,内边距为20px + g2d.setColor(Color.WHITE); + int currentTimeX = padding + rectPadding + (currentTimeWidth + rectPadding - currentTimeWidth) / 2; + int currentTimeY = padding + rectPadding + fm.getAscent(); + g2d.drawString(currentTime, currentTimeX, currentTimeY); + + // 绘制文本2的背景矩形 + int text2Width = fm.stringWidth(text2); + int text2Height = fm.getHeight(); + g2d.setColor(new Color(0, 0, 0, 50)); // 黑色半透明背景 + g2d.fillRect(padding, padding + currentTimeHeight + rectPadding * 2, text2Width + 2 * rectPadding, text2Height + 2 * rectPadding); + + // 绘制文本2在时间的下面,内边距为20px + g2d.setColor(Color.WHITE); + int text2X = padding + rectPadding + (text2Width + rectPadding - text2Width) / 2; + int text2Y = padding + currentTimeHeight + rectPadding * 3 + fm.getAscent(); + g2d.drawString(text2, text2X, text2Y); + + // 计算文本1的右上角位置 + int text1Width = fm.stringWidth(text1); + int text1X = (int) (x1 + wid); // 框的右上角位置 + int text1Y = (int) (y1 + fm.getAscent()); // 框的右上角紧挨着框 + g2d.setColor(Color.RED); + + g2d.drawString(text1, text1X, text1Y); + + + // 释放资源 + g2d.dispose(); + + return image; + } + + public static void delFile(String url){ + String filePath = url.replace(StaticPropUtil.imageUrl,StaticPropUtil.imagePath).replace("/","\\"); + File file = new File(filePath); + if(file.exists()){ + file.delete(); + } + } } diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/models/scheduled/UdpClentScheduled.java b/device_udpclent/src/main/java/com/xr/device_udpclent/models/scheduled/UdpClentScheduled.java index 856a8b8..10b1f2b 100644 --- a/device_udpclent/src/main/java/com/xr/device_udpclent/models/scheduled/UdpClentScheduled.java +++ b/device_udpclent/src/main/java/com/xr/device_udpclent/models/scheduled/UdpClentScheduled.java @@ -39,6 +39,9 @@ public class UdpClentScheduled { @Autowired private FocalLengthConfigService focalLengthConfigService; + @Autowired + private MeterConfigService meterConfigService; + @Scheduled(cron = "0 0/3 * * * ?") //定时发送监测数据 @@ -48,68 +51,74 @@ public class UdpClentScheduled { } List list = meterReadingRecordService.selectMaxReading(); for (MeterReadingRecord record:list){ -// QueryWrapper wrapper=new QueryWrapper<>(); -// wrapper.eq("config_id",record.getMeterId()); -// List configs=focalLengthConfigService.list(wrapper); -// if(configs.size()>0){ -// BufferedImage image = Files.bytesTobufferedImage(configs.get(0).getFocalPicture()); -// try { -// String url = Files.uploadImage(image,record.getMeterId()); -// record.setReadingUrl(url); -// meterReadingRecordService.updateById(record); -// }catch (Exception e){ -// e.printStackTrace(); -// } -// } - ByteBuf buf = Unpooled.buffer(); - ByteBuf checksumBuffer = Unpooled.buffer(Long.BYTES); - buf.writeBytes(new byte[]{(byte) 0xEB, (byte) 0x90,(byte) 0xEB, (byte) 0x90,(byte)0x78}); - buf.writeShortLE(3); - buf.writeShort(record.getMeterId()); - buf.writeByte(2); - String s="在线监测#"+record.getReadingUrl(); - byte [] sx; - try { - sx = s.getBytes("GB2312"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - buf.writeByte(sx.length); - buf.writeBytes(sx); - byte [] sz; - try { - sz = record.getReadingValue().getBytes("GB2312"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - buf.writeByte(sz.length); - buf.writeBytes(sz); - buf.writeBytes(generateCP56Time2a()); - - // 计算要校验的部分的开始索引和结束索引 - byte c = 0; - int startIndex = 5; // 从第6位开始,索引是5(因为索引从0开始) - int endIndex = buf.readableBytes() - 1; // 到倒数第二位结束 - // 截取并处理指定范围内的字节 - if (startIndex <= endIndex) { - // 临时存放截取的字节 - byte[] slice = new byte[endIndex - startIndex + 1]; - // 从ByteBuf中获取数据 - buf.getBytes(startIndex, slice); - c=checksum8(slice); - // 更新Checksum对象 - //checksum.update(slice, 0, slice.length); - } - buf.writeByte(c); - // 将checksumBuffer追加到buffer末尾 - buf.writeBytes(checksumBuffer); - System.out.println(EnumUtil.byteBufTo16Str(buf)); - udpClientService.sendData(buf); - try { - Thread.sleep(100); - } catch (InterruptedException e) { - throw new RuntimeException(e); + QueryWrapper wrapper=new QueryWrapper<>(); + wrapper.eq("config_id",record.getMeterId()); + List configs=focalLengthConfigService.list(wrapper); + if(configs.size()>0){ + FocalLengthConfig config = configs.get(0); + MeterConfig meterConfig=meterConfigService.getById(config.getConfigId()); + BufferedImage image = Files.bytesTobufferedImage(config.getFocalPicture()); + if(image!=null && config.getCopperX()!=null){ + image = Files.drawRectangleAndText(image,config.getCopperX(),config.getCopperY(),config.getCopperX2(),config.getCopperWid(),config.getCopperHei(),record.getReadingValue(),meterConfig.getMeterName()); + try { + Files.delFile(record.getReadingUrl()); + String url = Files.uploadImage(image,record.getMeterId()); + record.setReadingUrl(url); + meterReadingRecordService.updateById(record); + }catch (Exception e){ + e.printStackTrace(); + } + } } +// ByteBuf buf = Unpooled.buffer(); +// ByteBuf checksumBuffer = Unpooled.buffer(Long.BYTES); +// buf.writeBytes(new byte[]{(byte) 0xEB, (byte) 0x90,(byte) 0xEB, (byte) 0x90,(byte)0x78}); +// buf.writeShortLE(3); +// buf.writeShort(record.getMeterId()); +// buf.writeByte(2); +// String s="在线监测#"+record.getReadingUrl(); +// byte [] sx; +// try { +// sx = s.getBytes("GB2312"); +// } catch (UnsupportedEncodingException e) { +// throw new RuntimeException(e); +// } +// buf.writeByte(sx.length); +// buf.writeBytes(sx); +// byte [] sz; +// try { +// sz = record.getReadingValue().getBytes("GB2312"); +// } catch (UnsupportedEncodingException e) { +// throw new RuntimeException(e); +// } +// buf.writeByte(sz.length); +// buf.writeBytes(sz); +// buf.writeBytes(generateCP56Time2a()); +// +// // 计算要校验的部分的开始索引和结束索引 +// byte c = 0; +// int startIndex = 5; // 从第6位开始,索引是5(因为索引从0开始) +// int endIndex = buf.readableBytes() - 1; // 到倒数第二位结束 +// // 截取并处理指定范围内的字节 +// if (startIndex <= endIndex) { +// // 临时存放截取的字节 +// byte[] slice = new byte[endIndex - startIndex + 1]; +// // 从ByteBuf中获取数据 +// buf.getBytes(startIndex, slice); +// c=checksum8(slice); +// // 更新Checksum对象 +// //checksum.update(slice, 0, slice.length); +// } +// buf.writeByte(c); +// // 将checksumBuffer追加到buffer末尾 +// buf.writeBytes(checksumBuffer); +// System.out.println(EnumUtil.byteBufTo16Str(buf)); +// udpClientService.sendData(buf); +// try { +// Thread.sleep(100); +// } catch (InterruptedException e) { +// throw new RuntimeException(e); +// } } } diff --git a/device_udpclent/src/main/resources/application-dev.yml b/device_udpclent/src/main/resources/application-dev.yml index 5c9ec18..71ae995 100644 --- a/device_udpclent/src/main/resources/application-dev.yml +++ b/device_udpclent/src/main/resources/application-dev.yml @@ -91,7 +91,7 @@ udp: host: 172.26.4.59 port: 9300 upLoad: - url: http://116.196.120.81:18081/file/img/zs/ + url: http://192.168.1.83:18081/file/img/zs/ path: D:\\service\\fileService\\img\\zs\\ python: path: C:\\Users\\admin\\Anaconda3\\envs\\myconda310\\python.exe diff --git a/device_udpclent/src/main/resources/application.yml b/device_udpclent/src/main/resources/application.yml index 9297701..19a3b56 100644 --- a/device_udpclent/src/main/resources/application.yml +++ b/device_udpclent/src/main/resources/application.yml @@ -11,4 +11,7 @@ logging: boot: autoconfigure: logging: debug + level: + com.xr.device_udpclent: debug +