From c3e5879c395c2ade44d25c05f599e4b362867272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Wed, 12 Jul 2023 15:06:40 +0800 Subject: [PATCH 01/21] =?UTF-8?q?ticket=20=E4=B8=A4=E7=A5=A8=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/StandardTicketInfoServiceImpl.java | 4 +++- .../standardTicket/utils/OperationWordHelper.java | 2 ++ .../service/impl/TicketCountServiceImpl.java | 28 +++++++++++++++------- .../service/impl/WorkTicketInfoServiceImpl.java | 5 +++- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/StandardTicketInfoServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/StandardTicketInfoServiceImpl.java index 22dd9ab..eb971a1 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/StandardTicketInfoServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/StandardTicketInfoServiceImpl.java @@ -712,7 +712,9 @@ public class StandardTicketInfoServiceImpl extends BaseServiceImpl selectStandardTicketByDeptIdWithTicketType(List createDept, String ticketType, String dateTime) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(StandardTicketInfoEntity::getTicketType, ticketType); - queryWrapper.lambda().in(StandardTicketInfoEntity::getCreateDept, createDept); + if (CollectionUtils.isNotEmpty(createDept)){ + queryWrapper.lambda().in(StandardTicketInfoEntity::getCreateDept, createDept); + } queryWrapper.apply("date_format(CREATE_TIME,'%Y-%m') = {0}", dateTime); return baseMapper.selectList(queryWrapper); } diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/utils/OperationWordHelper.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/utils/OperationWordHelper.java index eb1b45b..803e2c1 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/utils/OperationWordHelper.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/utils/OperationWordHelper.java @@ -44,8 +44,10 @@ public class OperationWordHelper { switch (status) { case 1: result = "电气操作票.docx"; + break; default: result = "电气操作票.docx"; + break; } return result; } diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java index 4594890..eda0445 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java @@ -82,9 +82,13 @@ public class TicketCountServiceImpl extends BaseServiceImpl createDept = userClient.getDataScope(user.getUserId()); + + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.eq(TicketCount::getDateTime, dateTime); //根据月份查询统计的数据 CompletableFuture> ticketCountsCompletableFuture = CompletableFuture.supplyAsync(() -> { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -92,6 +96,7 @@ public class TicketCountServiceImpl extends BaseServiceImpl ticketCounts = baseMapper.selectList(queryWrapper); return ticketCounts; }, executor); + //第一种工作票 CompletableFuture oneTicketCompletableFuture = ticketCountsCompletableFuture.thenAcceptAsync((items) -> { //查询第一种工作票 @@ -324,10 +329,15 @@ public class TicketCountServiceImpl extends BaseServiceImpl deptName = systemClient.getDeptName(entry.getKey()); - if (deptName.isSuccess()) { - ticketCount.setDeptName(deptName.getData()); + if (entry.getKey() == null) { + continue; + } + if (entry.getKey() != null) { + //根据id获取部门名称 + R deptName = systemClient.getDeptName(entry.getKey()); + if (deptName.isSuccess()) { + ticketCount.setDeptName(deptName.getData() == null ? "" : deptName.getData()); + } } List values = entry.getValue(); ticketCount.setTicketType(CollectionUtils.isNotEmpty(values) ? values.get(0).getTicketType() : ticketType); @@ -389,10 +399,12 @@ public class TicketCountServiceImpl extends BaseServiceImpl deptName = systemClient.getDeptName(entry.getKey()); - if (deptName.isSuccess()) { - ticketCount.setDeptName(deptName.getData()); + if (entry.getKey() != null) { + //根据id获取部门名称 + R deptName = systemClient.getDeptName(entry.getKey()); + if (deptName.isSuccess()) { + ticketCount.setDeptName(deptName.getData() == null ? "" : deptName.getData()); + } } List values = entry.getValue(); ticketCount.setTicketType(CollectionUtils.isNotEmpty(values) ? values.get(0).getType() : ticketType); diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java index 5dbca58..e1333c2 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java @@ -1104,7 +1104,10 @@ public class WorkTicketInfoServiceImpl extends BaseServiceImpl selectTicketByDeptIdWithTicketType(List createDept, String ticketType, String dateTime) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(WorkTicketInfoEntity::getType, ticketType); - queryWrapper.lambda().in(BaseEntity::getCreateDept, createDept); + if (CollectionUtils.isNotEmpty(createDept)) { + queryWrapper.lambda().in(BaseEntity::getCreateDept, createDept); + } + queryWrapper.apply("date_format(CREATE_TIME,'%Y-%m') = {0}" , dateTime); return baseMapper.selectList(queryWrapper); } From a26cf6b2c4fcff436715341ce13b50dc7158f04a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Wed, 12 Jul 2023 15:07:30 +0800 Subject: [PATCH 02/21] =?UTF-8?q?ticket=20=E4=B8=A4=E7=A5=A8=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java index eda0445..379f1d9 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java @@ -86,9 +86,6 @@ public class TicketCountServiceImpl extends BaseServiceImpl createDept = userClient.getDataScope(user.getUserId()); - - LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); - queryWrapper1.eq(TicketCount::getDateTime, dateTime); //根据月份查询统计的数据 CompletableFuture> ticketCountsCompletableFuture = CompletableFuture.supplyAsync(() -> { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); From 666524e5c555690be1aa546b750ece83469ded97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Wed, 12 Jul 2023 16:51:09 +0800 Subject: [PATCH 03/21] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=A5=A8=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/template/电气操作票.docx | Bin 46645 -> 46726 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/hzims-service/ticket/src/main/resources/template/电气操作票.docx b/hzims-service/ticket/src/main/resources/template/电气操作票.docx index 54f4ffb1e2a81c3da0ec87d3c8b8aec18cdee521..f5491a9ff088106f10bbb3f60f1c7c93ad487806 100644 GIT binary patch delta 22466 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 rx6OZV(XaxZgyd%Z-#fn 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 From 806cdb64ca51cb5ff95fdbdda9c9aa24679ab2cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Wed, 12 Jul 2023 18:26:30 +0800 Subject: [PATCH 04/21] =?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=A5=A8=E6=B5=8F?= =?UTF-8?q?=E8=A7=88=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/OperationTicketServiceImpl.java | 2 +- .../main/resources/template/电气操作票.docx | Bin 46726 -> 46915 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/OperationTicketServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/OperationTicketServiceImpl.java index acfc197..f2e9ca6 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/OperationTicketServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/OperationTicketServiceImpl.java @@ -472,7 +472,7 @@ public class OperationTicketServiceImpl implements OperationTicketService { Map map = PdfUtils.objectToMap(measure); map.put("index", index.get()); map.put("status", TicketConstants.MATTER_FINISH_STATUS.equals(measure.getStatus()) ? "√" : ""); - map.put("operationTime", measure.getOperationTime()); + // map.put("operationTime", measure.getOperationTime()); map.put("hello", ""); map.put("hello1", ""); index.getAndIncrement(); diff --git a/hzims-service/ticket/src/main/resources/template/电气操作票.docx b/hzims-service/ticket/src/main/resources/template/电气操作票.docx index f5491a9ff088106f10bbb3f60f1c7c93ad487806..14abfde0d50db01195d098fdc0ac6b8f3ece6380 100644 GIT binary patch delta 18666 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 RgjhBMJ`^?H>ejE~e*vu-LT&&6 delta 18504 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ˏ? zpFEH&KU#t6z18uZ=TxVUD>Rws_7I)&2R^o3j-6?%J)AV0QYM^DtJEh$+6&h=!1fkr z(Q$4_^+B*%3FB+4w})oP7J37F<`P7iwQIJfQIMDBr}5Ay%sTo;Q%W#-nHQ|YE1&e^ zK0rJNJr*wZgAtP)l#EwW7>d~ow1QJEya@LX5Dnd9W%r<@5tRo)hKVCT=2APNtwZ4A zvfZZ87sH_)K4?e`GL1Q2K3^D>>w&%P>iAHv zxZnh~$Nvx~2(h^I;{=T)`D3rstikTyf9rRGmX5Q`pw0%AFA_2NQW0qE-7pQ`p)sHy3=ALaoaZ2rFHr~PU zt&N%#>n5(DfpyrWDhO4f!44u8$N$u->=1Zvmc>TTcvGF*x z)LQk$;r;>##YV~0K2@CNGzv2xz4M{$DD@s^AQ2|m)?7xz=p@2aZ+S|lI2NEV7+Fz2 zX;65Zk>_Q*)wTWF$yp6f6YKY)M@2zoB{0uFc@4eLG%wf~EGogvPtN}aBf{fEsUqEX z@&@9Q{kI@B#2VBgKBCf+;}W3VV{y2Hq#XESdk@05dD0?>p7(qv;E@r9mxIXHDwWOR zE_O?AHB6yWVOR+?=+k@OON*GY6O(0MEY=Gb&;&&#b<9AJU_yF-hn^>aVDe3Rv#BNk za&ZuV%7BDG!u%#1ig~DU7V_U!IYvxp@Btv5iBb4f-$Otkq$mg^#b=ZE>`Fk6Z3RiM2K;C;Km>c6!e(9` w0)s%Yd_{k%ajXT%Y_!7WpG)8agM47yA95ev0(fjQNFp8Ben(Ykj Date: Wed, 12 Jul 2023 18:47:33 +0800 Subject: [PATCH 05/21] =?UTF-8?q?=E4=B8=A4=E7=A5=A8=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=9F=E6=88=90=E5=88=A4=E6=96=ADnull?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ticket/twoTicket/service/impl/TicketCountServiceImpl.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java index 379f1d9..06e48ed 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java @@ -6,6 +6,7 @@ import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.hnac.hzims.common.logs.utils.StringUtils; import com.hnac.hzims.ticket.allTicket.entity.TicketInfoEvaluateEntity; import com.hnac.hzims.ticket.allTicket.service.TicketInfoEvaluateService; @@ -19,6 +20,7 @@ import com.hnac.hzims.ticket.twoTicket.vo.ticket.TicketCountResponseVo; import com.hnac.hzims.ticket.twoTicket.vo.ticket.TicketCountVo; import com.hnac.hzims.ticket.workTicket.entity.WorkTicketInfoEntity; import com.hnac.hzims.ticket.workTicket.service.IWorkTicketInfoService; +import jodd.util.ObjectUtil; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -326,10 +328,8 @@ public class TicketCountServiceImpl extends BaseServiceImpl " + entry.getKey()); + if (ObjectUtils.isNotEmpty(entry.getKey())) { //根据id获取部门名称 R deptName = systemClient.getDeptName(entry.getKey()); if (deptName.isSuccess()) { @@ -396,7 +396,8 @@ public class TicketCountServiceImpl extends BaseServiceImpl " + entry.getKey()); + if (ObjectUtils.isNotEmpty(entry.getKey())) { //根据id获取部门名称 R deptName = systemClient.getDeptName(entry.getKey()); if (deptName.isSuccess()) { From 106042ed5c45a08c73ced8b56070cd5291c7929c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Wed, 12 Jul 2023 19:10:50 +0800 Subject: [PATCH 06/21] =?UTF-8?q?=E4=B8=A4=E7=A5=A8=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=A5=A8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/template/电气操作票.docx | Bin 46915 -> 48260 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/hzims-service/ticket/src/main/resources/template/电气操作票.docx b/hzims-service/ticket/src/main/resources/template/电气操作票.docx index 14abfde0d50db01195d098fdc0ac6b8f3ece6380..a75791b90f44ff160f05cdbf95cf661574a895a5 100644 GIT binary patch delta 20849 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 b*5$rixsf5=sqYeJsJAusP}#nJ3jqED?b*}5 delta 19737 zcmYJab9`RU7cCsyw%xF4%*IB;#!h1!CrQJ`HX7TuZQC{)>n6YNz3=w{Gv#Q3O>W{jsV;;zn0JCKjXDh#6&*M@dD_ zEc@Nf5-Iial$PaK?^wK#R%0l@%1mZ=hVyb$k{{C`2H0Q zR5#!+W4rBlyS?4fsIPq1H9<3bO$n7VYS#Rmuq@O3$zRu0!X^Rd5g>|uyV&2=?ay)p z7ZHl&BvfaA6RJLF?EO5AcM^x+?)YD)#eVD4Qhd_R;sl)f@o*SO7|6daZhp%Txn930 zJJ|V2Gp~Dd{n=sI=fhDX3OHsbZqy8{9Oz@X#k(FQ8ooaaEUx6V{BZfDhYWgqC18~( zF>g8nJy(_`_{xT=IZnpy;OuEtL!DN^wBN-65{n{)QF9H>1P(V;o8Q{X2?7FR5&H$2 z0#G;|I8)uz&cm_D9=9H7Y#}^fUy8&>ftCCf3jywf)X8$U)?^yMN zAs%~!+uys0Fol+JJmEkplzN@}AMm#M3J3{&Q!2y6I)J;`>)X~0;-^tXe!ZD`e-wB- z8jWtcJ}nB^Hn5_iF{pCi9i2Ya43e8Smlj7NE+5aJXT&J((4rYr9iF?sT4pjGfe#uP zh)gsI4VsAi;t*67SbJHKC*@YJUIx`+ij5_YT^zK%Z88y|x~!FFOV#)jO9FW!1E5zn z@2lZ4&f>%FM#2xeU4z_$fP`e|{pF%)G$DG`Q?1$pmmLBJXI@uAkx-gT6uvVg)!ibE zHY7#XB0U`&Ukfh>-vX+mL&pe39hvwAK0xEL&VKt+=a?)vR+Ysr+~$mX7s*{R(TcpxKwygn>3jEb`nYmrThxu#SH&lBb-{{?P1QrUjO zptRofgf!=uIZOrj7yJZSR{_anh&ZHAF+Q}z4Kj6EWEi0hmnbpeno^41i*x423jYP( z@?}O<(5al=#a=#d)1-qa;U3F8AU41p{;;}td!4RNqtB~ya$a1TdKz_0E&jSFFMV3- zNXo-wfFdKhYlvw05A2-WwK>o{{PJd`Pg@xWUn9QGU!`7-5ithM26xDUPU1=B33mMs zs<12mV0vZgs>OeTYi5WL1?8Jb`9MaoEM_0HnB`c?CHDeuef}dO_k7lqG5~Hh!9b1S4#w`B1J8C$LH19LjPE^cl|uZ zZZV5s!>v=SY;h6)`)kw-w{CF9Sz7JLO#zls(mL-3FN#jJ`db|)#BrI;JD!&?kJB%w zl?u8%uE&FrO;#H6Vy=0!*_2*!*gwQaNh5rRITUA##ka?VqwYY$WXr_nulF3jmc%L0 zHT%T&Cz!(_XM?&T!K z6?iq1%7&hWh8_4UeM?ntB9;!{$84(fXIP@yJ66^QsouPcDi`UI@u#kqOEDjENm7wJ z;u2F1@_-bkVLzZ4fNN%YF)U)%472Jht(~}KTT{Zv|0YLC1IRMgFE%SKy0bRgE1pgp z9iC-xn?N>jCG>i-_oNotK-_NWS=D@dDJgE4vq_&TYUG>!?y|%pB8gLrP-R#JNjw%7 zfN-o2Yk-ExVwkhaHy9Rf{|>^+{&F{z#3C!sSRI`>999(d>z^E%L0Vu02Sj3P#a#Ac ztcxRzLA@cTfy911Cz>D+vWG1NiQ!zbHiXnb956-jM&m-QKOBq%Je;8$zsnAUid8D|sqvJi|2bxKwrpX&44zoS3m$h<+d_g}2-W3Ai zE%p^p|FJ-VBJlBUC;1lE6x#~qXFG$Yyb)13@=Qc|*Kn@N1G<_Clenom0HUihTx9ob zh>5~az7NCfuHQ6f9D7sHdkT;vzj@;Lh^t%%qmpv}<;qN6!j8N?!|luway7yeO51sG-V02D+I3`L8L!g`N?u^IW^=AF(zx|cSb{$Z)N+6<<=hq027J9lTwyU^52j- z_*=QT0c{H2B7$-EXV!`>J(akBo2?Pgqk7@*(U9QpO=4+N!nLyh9$|`obhD+%sjhb} zXF~z%sw|BI^ew}DSwFyvthB8#aHSw}pcVc44*3k@n#M^KJ<=q}MPG~Ts@$uqS-$_{ zs1D>~?uMQ%!kHHka%lb={pB5r$h%DNj~Szm5Z5Oa?g9Hp)R}|k8mC@e`Q`ulGFyXi z>c;rL&%nzOa>~)reE?oxU#jjO5rDlEF%TqU3G&eZGEC$wS;mpvg%G5Vc-)`C1-NkA$ZK#pE$#<;Y>j&|6V^tiEcDe-m%)~U{Noj zci{{jpjKoZ8g@7^8FA=C7C4jOI(lSYsnT-@SE|VjiG&LQ+_WxsNP0bBPuCLs z&ifSp!QUEOu=Xm1+23Q}!TF;)J922Re?xj_%3K8^o}uM4r)O-+E1uPes2py%;jw3l z#dOdFN`C8I_^-WO4$B9&35kQXY^j^zd!V8ZI%qXXtkax2(M*>OB7=BPkF7f#nCC6O zG-?SLgpr5#ic{aaGwzUH2jax>6b&yS0oSdHx4gHhKfqQ2gufV=WU4^eB*6o(8UISN z@$xSTYbeig&(haJgV!MH*JOHuZ0Rq2nQr)i5zRcx{kM?q*1Ve|F;LR<3qClBq?2Q@ z=ETj;UK(XqGZBRtWtCan@W ztwXND77FaDjJ`><-4%yWaN7_BRYXB=aZDnC05gyWlOgpjEL%#_o9l%^L78#A%;EH% z00(7Z1_76IR=+dt~javvOm0I%zt`^4X>dy8&G)v@P4O5tFFQ9QzJoG`>H z&5}-0V1lozZ2~DP%aJ7+zYCs9`j}y$Fc3_N`|bq@3KHb_NT5CNqM)#nbHYdiIbj73 z?mGwcFi2()K_u8E8y#Bj?rt}?#acwWeQi qjWqa~&^qu*u)~Mq!eh`l|}K1Wgo> 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 From 92b2563122bab298309a0e59e1aca9ffc9b37c62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Thu, 13 Jul 2023 08:12:27 +0800 Subject: [PATCH 07/21] =?UTF-8?q?=E4=B8=A4=E7=A5=A8=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=A5=A8=E6=96=87=E6=A1=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/template/电气操作票.docx | Bin 48260 -> 48367 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/hzims-service/ticket/src/main/resources/template/电气操作票.docx b/hzims-service/ticket/src/main/resources/template/电气操作票.docx index a75791b90f44ff160f05cdbf95cf661574a895a5..1d97fe5429a42fe083c8fef231135c83f253126f 100644 GIT binary patch delta 19114 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 AUjP6A From 0c4e969df0d572ab85aa84e4fe4d2dc766ef9bdc Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Thu, 13 Jul 2023 09:04:20 +0800 Subject: [PATCH 08/21] =?UTF-8?q?#=20=E6=97=A5=E5=B8=B8=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E6=9C=88=E8=AE=A1=E5=88=92=E6=9F=A5=E8=AF=A2bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/OperMaintenanceMonitorServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceMonitorServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceMonitorServiceImpl.java index 870080f..b1a8a03 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceMonitorServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceMonitorServiceImpl.java @@ -42,10 +42,11 @@ public class OperMaintenanceMonitorServiceImpl implements IOperMaintenanceMonito @Override public R>> reportMonth(OperMaintenanceMonitorReportMonthDTO req) { List planEntities = planMapper.selectList(new LambdaQueryWrapper() {{ - Date startTime = DateUtil.parse(DateUtil.format(DateUtil.now(), "yyyy-MM") + "-01", DateUtil.PATTERN_DATE); + LocalDate startDate = LocalDate.of(req.getYear(), req.getMonth(),1); + // Date startTime = DateUtil.parse(DateUtil.format(DateUtil.now(), "yyyy-MM") + "-01", DateUtil.PATTERN_DATE); eq(OperMaintenancePlanEntity::getIsDeleted, 0L); - ge(OperMaintenancePlanEntity::getDisposeTime, startTime); - lt(OperMaintenancePlanEntity::getDisposeTime, DateUtil.plusMonths(startTime, 1)); + ge(OperMaintenancePlanEntity::getDisposeTime, startDate); + lt(OperMaintenancePlanEntity::getDisposeTime, startDate.withDayOfMonth(startDate.getMonth().maxLength())); }}); //获取列表班次ID集合 From 32bf0e18411ebcd3ef2a7e6112ed4dffcaf7631b Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Thu, 13 Jul 2023 09:05:13 +0800 Subject: [PATCH 09/21] =?UTF-8?q?#=20=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E8=A7=84=E5=88=99=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/message/config/ThreadPoolConfig.java | 6 ++- .../message/controller/MessageController.java | 20 +++++++-- .../service/impl/PushMessageServiceImpl.java | 47 ++++++---------------- 3 files changed, 34 insertions(+), 39 deletions(-) diff --git a/hzims-service/message/src/main/java/com/hnac/hzims/message/config/ThreadPoolConfig.java b/hzims-service/message/src/main/java/com/hnac/hzims/message/config/ThreadPoolConfig.java index d8feb4f..b3e8b1a 100644 --- a/hzims-service/message/src/main/java/com/hnac/hzims/message/config/ThreadPoolConfig.java +++ b/hzims-service/message/src/main/java/com/hnac/hzims/message/config/ThreadPoolConfig.java @@ -18,9 +18,13 @@ public class ThreadPoolConfig { @Bean public ExecutorService logExecutorService() { - return new ThreadPoolExecutor(1, 1, + return new ThreadPoolExecutor(2, 5, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()); } + @Bean + public ExecutorService appMessagePushExecutor() { + return new ThreadPoolExecutor(2, 5, 5L, TimeUnit.SECONDS,new LinkedBlockingQueue()); + } } diff --git a/hzims-service/message/src/main/java/com/hnac/hzims/message/controller/MessageController.java b/hzims-service/message/src/main/java/com/hnac/hzims/message/controller/MessageController.java index 4b84621..89a171d 100644 --- a/hzims-service/message/src/main/java/com/hnac/hzims/message/controller/MessageController.java +++ b/hzims-service/message/src/main/java/com/hnac/hzims/message/controller/MessageController.java @@ -7,6 +7,7 @@ import com.hnac.hzims.message.dto.SmsPushDto; import com.hnac.hzims.message.dto.WsPushDto; import com.hnac.hzims.message.fegin.IPushMsgClient; import com.hnac.hzims.message.service.IMessageService; +import com.hnac.hzims.message.service.IPushMessageService; import com.hnac.hzims.message.service.impl.MailMessageServiceImpl; import com.hnac.hzims.message.service.impl.PushMessageServiceImpl; import com.hnac.hzims.message.service.impl.SmsMessageServiceImpl; @@ -14,16 +15,16 @@ import com.hnac.hzims.message.service.impl.WebsocketServiceImpl; import com.hnac.hzims.message.utils.HtmlModule; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.SpringUtil; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import java.util.List; import java.util.Map; /** @@ -79,4 +80,15 @@ public class MessageController extends BladeController { IMessageService messageService = SpringUtil.getBean(WebsocketServiceImpl.class); return messageService.send(wsPushDto); } + + @GetMapping("/sendByUsers") + @ApiOperation("发送APP消息(多人)") + @ApiOperationSupport(order=5) + public R sendByUsers(@ApiParam("消息主题") String subject, + @ApiParam("消息内容") String content, + @ApiParam("用户ID列表") String userIds, + @ApiParam("租户ID") String tenantId) throws Exception { + PushMessageServiceImpl messageService = SpringUtil.getBean(PushMessageServiceImpl.class); + return R.status(messageService.sendByUsers(subject,content, Func.toStrList(",",userIds),tenantId)); + } } diff --git a/hzims-service/message/src/main/java/com/hnac/hzims/message/service/impl/PushMessageServiceImpl.java b/hzims-service/message/src/main/java/com/hnac/hzims/message/service/impl/PushMessageServiceImpl.java index 51a512a..9c1d6be 100644 --- a/hzims-service/message/src/main/java/com/hnac/hzims/message/service/impl/PushMessageServiceImpl.java +++ b/hzims-service/message/src/main/java/com/hnac/hzims/message/service/impl/PushMessageServiceImpl.java @@ -30,6 +30,7 @@ import org.springframework.util.Assert; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.ExecutorService; import java.util.concurrent.FutureTask; import java.util.concurrent.atomic.AtomicReference; @@ -42,6 +43,7 @@ public class PushMessageServiceImpl implements IMessageService { private final IPushClient pushClient; private final BladeLogger logger; + private final ExecutorService appMessagePushExecutor; @Override @SaveLog(type = MessageConstants.APP_NAME) @@ -87,37 +89,14 @@ public class PushMessageServiceImpl implements IMessageService { } @Override - public boolean send(MessagePushRecordEntity request) { - PushInfoVO pushInfoVO = new PushInfoVO(); - pushInfoVO.setTenantId(Func.isNotEmpty(AuthUtil.getTenantId()) ? AuthUtil.getTenantId() : request.getTenantId()); - ArrayList platformTypes = Lists.newArrayList(PlatformType.Android, PlatformType.IOS); - platformTypes.forEach(platformType -> { - PushPlatform platform = PushPlatform.newBuilder().addPlatformType(platformType).build(); - R response; - // 安卓推送 - if(PlatformType.Android.equals(platformType)) { - PushAudience pushAudience = PushAudience.newBuilder().addPushAudienceType(PushAudienceType.TAG, Lists.newArrayList(request.getPusher())).build(); - PushInfo pushInfo = new PushInfo("ops-push-android", request.getSubject(), request.getContent(), - "", null, platform, pushAudience); - pushInfoVO.setPushInfo(pushInfo); - response = pushClient.tenantPush(pushInfoVO); - } - // IOS推送 - else if(PlatformType.IOS.equals(platformType)) { - PushAudience pushAudience = PushAudience.newBuilder().addPushAudienceType(PushAudienceType.TAG, Lists.newArrayList(request.getPusher())).build(); - PushInfo pushInfo = new PushInfo("ops-push-ios", request.getSubject(), request.getContent(), - "", null, platform, pushAudience); - pushInfoVO.setPushInfo(pushInfo); - response = pushClient.tenantPush(pushInfoVO); - } else { - response = null; - } - Assert.isTrue(ObjectUtil.isNotEmpty(response) && response.isSuccess(),() -> { - logger.error("hzims-message:PushMessageServiceImpl:send", "请求参数为:"+JSON.toJSONString(pushInfoVO)+"错误信息为:"+response.getMsg()); - throw new ServiceException(response.getMsg()); - }); - }); - return true; + public boolean send(MessagePushRecordEntity request) { + String tenantId = Func.isNotEmpty(AuthUtil.getTenantId()) ? AuthUtil.getTenantId() : request.getTenantId(); + try { + return this.sendByUsers(request.getSubject(), request.getContent(), Func.toStrList(",",request.getPusher()),tenantId); + } + catch (Exception e) { + throw new ServiceException(e.getMessage()); + } } /** @@ -125,7 +104,7 @@ public class PushMessageServiceImpl implements IMessageService { * @param subject 消息主题 * @param content 消息内容 * @param userIds 用户ID列表 - * @param tenantId 推送成功标识 + * @param tenantId 租户ID * @return */ public boolean sendByUsers(String subject, String content, List userIds,String tenantId) throws Exception { @@ -140,7 +119,7 @@ public class PushMessageServiceImpl implements IMessageService { R pushResult = pushClient.tenantPush(pushInfoVO); return pushResult.isSuccess(); }); - new Thread(androidPush,"安卓推送").start(); + appMessagePushExecutor.submit(new Thread(androidPush,"安卓推送")); // IOS推送 FutureTask iosPush = new FutureTask<>(() -> { @@ -153,7 +132,7 @@ public class PushMessageServiceImpl implements IMessageService { R pushResult = pushClient.tenantPush(pushInfoVO); return pushResult.isSuccess(); }); - new Thread(iosPush,"ios推送").start(); + appMessagePushExecutor.submit(new Thread(iosPush,"ios推送")); return androidPush.get() && iosPush.get(); } From cd0ab4a3874633f9b235b1c37f8f42c249e2c3a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Thu, 13 Jul 2023 09:06:24 +0800 Subject: [PATCH 10/21] =?UTF-8?q?=E4=B8=A4=E7=A5=A8=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=A5=A8=E6=96=87=E6=A1=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/template/电气操作票.docx | Bin 48367 -> 48540 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/hzims-service/ticket/src/main/resources/template/电气操作票.docx b/hzims-service/ticket/src/main/resources/template/电气操作票.docx index 1d97fe5429a42fe083c8fef231135c83f253126f..18d85af09dfdeadd8282d2aee8bee2fad358bb2b 100644 GIT binary patch delta 19091 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"P$C1}ntEFv>T%&NXQ8#< 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 E0dVRfWdHyG delta 18855 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 Date: Thu, 13 Jul 2023 13:50:43 +0800 Subject: [PATCH 11/21] =?UTF-8?q?=E4=B8=A4=E7=A5=A8=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=A5=A8=E6=8F=90=E7=A4=BA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ticket/standardTicket/service/impl/OperationTicketServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/OperationTicketServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/OperationTicketServiceImpl.java index f2e9ca6..7940416 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/OperationTicketServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/OperationTicketServiceImpl.java @@ -249,7 +249,7 @@ public class OperationTicketServiceImpl implements OperationTicketService { businessMessageDTO.setTenantId("200000"); //您有一张工作票待审批,工作内容:*****,审批环节:*****; String countent = - "您有一张工作票待审批,工作内容:".concat(standardTicketInfoEntity.getTitle()) + "您有一张操作票待审批,工作内容:".concat(standardTicketInfoEntity.getTitle()) .concat(",审批环节:") .concat(response.getTaskName()); businessMessageDTO.setContent(countent); From 923a0de3b00666e06625e0019c9915b408ac32bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Thu, 13 Jul 2023 14:33:45 +0800 Subject: [PATCH 12/21] =?UTF-8?q?=E4=B8=A4=E7=A5=A8=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E7=A5=A8=E5=B7=B2=E5=AE=8C=E6=88=90=E7=9A=84=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E7=A5=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java index e1333c2..d153b8d 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java @@ -242,7 +242,10 @@ public class WorkTicketInfoServiceImpl extends BaseServiceImpl pages = this.page(Condition.getPage(query), lqw); //数据转换 From 31377fa79b8edac46b5061c8073897ab2d0e6b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Thu, 13 Jul 2023 14:40:33 +0800 Subject: [PATCH 13/21] =?UTF-8?q?=E4=B8=A4=E7=A5=A8=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=A5=A8=E5=B7=B2=E5=AE=8C=E6=88=90=E7=9A=84app=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/StandardTicketInfoServiceImpl.java | 54 ++++++++-------------- 1 file changed, 18 insertions(+), 36 deletions(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/StandardTicketInfoServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/StandardTicketInfoServiceImpl.java index eb971a1..54e263f 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/StandardTicketInfoServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/impl/StandardTicketInfoServiceImpl.java @@ -36,6 +36,7 @@ import com.hnac.hzims.ticket.workTicket.service.IWorkTicketInfoService; import com.hnac.hzims.ticket.workTicket.vo.TicketMonthVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; @@ -112,6 +113,10 @@ public class StandardTicketInfoServiceImpl extends BaseServiceImpl queryWrapper = this.getQueryWrapper(req); queryWrapper.eq(Func.isNotEmpty(req.getCreateDept()), StandardTicketInfoEntity::getCreateDept, req.getCreateDept()); queryWrapper.orderByDesc(StandardTicketInfoEntity::getCreateTime); + //操作票已完成的数量 + if (StringUtils.isNoneBlank(req.getFlowTaskName())) { + queryWrapper.eq(StandardTicketInfoEntity::getFlowTaskName, req.getFlowTaskName()); + } IPage pages = super.page(Condition.getPage(query), queryWrapper); return R.data(pages.setRecords(StandardTicketInfoWrapper.build().listVO(pages.getRecords()))); } @@ -144,11 +149,7 @@ public class StandardTicketInfoServiceImpl extends BaseServiceImpllambdaUpdate() - .set(StandardTicketInfoEntity::getProcessInstanceId, processInstanceId) - .eq(StandardTicketInfoEntity::getId, req.getId()) - )); + return R.status(this.update(Wrappers.lambdaUpdate().set(StandardTicketInfoEntity::getProcessInstanceId, processInstanceId).eq(StandardTicketInfoEntity::getId, req.getId()))); } @Override @@ -244,9 +245,7 @@ public class StandardTicketInfoServiceImpl extends BaseServiceImpllambdaUpdate() - .set(StandardTicketInfoEntity::getStatus, TicketConstants.StandardTicketStatusEnum.TERMINATION.getStatus()) - .eq(StandardTicketInfoEntity::getId, id)); + this.update(Wrappers.lambdaUpdate().set(StandardTicketInfoEntity::getStatus, TicketConstants.StandardTicketStatusEnum.TERMINATION.getStatus()).eq(StandardTicketInfoEntity::getId, id)); /**删除工作流**/ R r = flowClient.delProcessInstanceById(ticketInfoEntity.getProcessInstanceId(), comment); if (!r.isSuccess()) { @@ -335,23 +334,18 @@ public class StandardTicketInfoServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); //开票来源 - queryWrapper.eq(Func.isNotEmpty(areaVo.getTaskType()), "sti.task_type", - areaVo.getTaskType()); + queryWrapper.eq(Func.isNotEmpty(areaVo.getTaskType()), "sti.task_type", areaVo.getTaskType()); //编号 queryWrapper.like(Func.isNotEmpty(areaVo.getCode()), "sti.code", areaVo.getCode()); //状态 - queryWrapper.eq(Func.isNotEmpty(areaVo.getStatus()), "sti.status", - areaVo.getStatus()); + queryWrapper.eq(Func.isNotEmpty(areaVo.getStatus()), "sti.status", areaVo.getStatus()); //开始时间 - queryWrapper.lt(Func.isNotEmpty(areaVo.getStartTime()), "sti.create_time", - areaVo.getStartTime()); + queryWrapper.lt(Func.isNotEmpty(areaVo.getStartTime()), "sti.create_time", areaVo.getStartTime()); //结束时间 - queryWrapper.le(Func.isNotEmpty(areaVo.getEndTime()), "sti.create_time", - areaVo.getEndTime()); + queryWrapper.le(Func.isNotEmpty(areaVo.getEndTime()), "sti.create_time", areaVo.getEndTime()); queryWrapper.eq("sti.CREATE_DEPT", areaVo.getAreaId()); - queryWrapper.eq(areaVo.getYearMonth() != null, - "date_format(sti.create_time,'%Y-%m')", areaVo.getYearMonth()); + queryWrapper.eq(areaVo.getYearMonth() != null, "date_format(sti.create_time,'%Y-%m')", areaVo.getYearMonth()); // queryWrapper.eq("tie.status",1); Page standardTicketInfoEntityPage = baseMapper.selectPages(searchPage, queryWrapper); @@ -450,8 +444,7 @@ public class StandardTicketInfoServiceImpl extends BaseServiceImpl ticketInfoEvaluateEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); ticketInfoEvaluateEntityLambdaQueryWrapper.eq(TicketInfoEvaluateEntity::getTicketId, item.getId()); - ticketInfoEvaluateEntityLambdaQueryWrapper.eq(TicketInfoEvaluateEntity::getStatus, - TicketConstants.TicketQualifiedEnum.Qualified.getCode()); + ticketInfoEvaluateEntityLambdaQueryWrapper.eq(TicketInfoEvaluateEntity::getStatus, TicketConstants.TicketQualifiedEnum.Qualified.getCode()); int count = ticketInfoEvaluateService.count(ticketInfoEvaluateEntityLambdaQueryWrapper); return count > 0; } @@ -580,9 +573,7 @@ public class StandardTicketInfoServiceImpl extends BaseServiceImpl operateTicketReportStatistic = this.baseMapper.getOperateTicketReportStatistic(startDate, endDate, deptIdList); if (CollectionUtil.isNotEmpty(operateTicketReportStatistic)) { //已完成数量 - int ticketInfoCompleteNum = operateTicketReportStatistic.stream().filter(ticket -> TicketConstants.StandardTicketStatusEnum.END.getStatus().equals(ticket.getStatus())) - .collect(Collectors.toList()).size(); + int ticketInfoCompleteNum = operateTicketReportStatistic.stream().filter(ticket -> TicketConstants.StandardTicketStatusEnum.END.getStatus().equals(ticket.getStatus())).collect(Collectors.toList()).size(); //合格数量 int ticketInfoQualifiedNum = operateTicketReportStatistic.stream().filter(ticket -> Func.isNotEmpty(ticket.getEvaluation()) && 1 == ticket.getEvaluation().intValue()).collect(Collectors.toList()).size(); //计算合格率 - double ticketInfoProportion = new BigDecimal(ticketInfoQualifiedNum / (double) operateTicketReportStatistic.size() * 100) - .setScale(2, RoundingMode.HALF_DOWN).doubleValue(); - result = TicketInfoStatisticVO.builder() - .ticketInfoType("操作票") - .ticketInfoNumber(operateTicketReportStatistic.size()) - .ticketInfoCompleteNum(ticketInfoCompleteNum) - .ticketInfoQualifiedNum(ticketInfoQualifiedNum) - .ticketInfoStartNum(operateTicketReportStatistic.size() - ticketInfoCompleteNum) - .ticketInfoProportion(ticketInfoProportion) - .build(); + double ticketInfoProportion = new BigDecimal(ticketInfoQualifiedNum / (double) operateTicketReportStatistic.size() * 100).setScale(2, RoundingMode.HALF_DOWN).doubleValue(); + result = TicketInfoStatisticVO.builder().ticketInfoType("操作票").ticketInfoNumber(operateTicketReportStatistic.size()).ticketInfoCompleteNum(ticketInfoCompleteNum).ticketInfoQualifiedNum(ticketInfoQualifiedNum).ticketInfoStartNum(operateTicketReportStatistic.size() - ticketInfoCompleteNum).ticketInfoProportion(ticketInfoProportion).build(); } return result; } @@ -712,7 +694,7 @@ public class StandardTicketInfoServiceImpl extends BaseServiceImpl selectStandardTicketByDeptIdWithTicketType(List createDept, String ticketType, String dateTime) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(StandardTicketInfoEntity::getTicketType, ticketType); - if (CollectionUtils.isNotEmpty(createDept)){ + if (CollectionUtils.isNotEmpty(createDept)) { queryWrapper.lambda().in(StandardTicketInfoEntity::getCreateDept, createDept); } queryWrapper.apply("date_format(CREATE_TIME,'%Y-%m') = {0}", dateTime); From 7b7089ad1575a3f5634444534811c7c9b38f0d89 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Thu, 13 Jul 2023 14:55:47 +0800 Subject: [PATCH 14/21] =?UTF-8?q?#=E9=A3=8E=E7=94=B5=E9=A9=BE=E9=A9=B6?= =?UTF-8?q?=E8=88=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/equipment/vo/EminfoAndEmParamVo.java | 8 + .../hzims/operational/main/vo/WindDeviceVo.java | 36 ++++ .../operational/main/vo/WindGenerationVo.java | 33 +++ .../hzims/operational/main/vo/WindScoreVo.java | 2 +- .../hzims/operational/main/vo/WindStationVo.java | 71 ++++++ .../operational/main/vo/WindTargetCurveVo.java | 33 +++ .../hnac/hzims/equipment/mapper/EmInfoMapper.xml | 2 +- .../main/controller/WindHomeController.java | 29 ++- .../operational/main/service/WindHomeService.java | 11 + .../main/service/impl/WindHomeServiceImpl.java | 240 ++++++++++++++++++++- 10 files changed, 457 insertions(+), 8 deletions(-) create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindDeviceVo.java create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindGenerationVo.java create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindStationVo.java create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindTargetCurveVo.java diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/vo/EminfoAndEmParamVo.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/vo/EminfoAndEmParamVo.java index 8bcdfca..c7c4fe5 100644 --- a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/vo/EminfoAndEmParamVo.java +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/vo/EminfoAndEmParamVo.java @@ -26,6 +26,14 @@ public class EminfoAndEmParamVo extends EmInfoExtendVo { @JsonSerialize(nullsUsing = NullSerializer.class) private int rideCount; + @ApiModelProperty(value = "经度") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double lgtd; + + @ApiModelProperty(value = "纬度") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double lttd; + @ApiModelProperty(value = "机组运行状态") private String runStatus; diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindDeviceVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindDeviceVo.java new file mode 100644 index 0000000..96e9a9b --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindDeviceVo.java @@ -0,0 +1,36 @@ +package com.hnac.hzims.operational.main.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.NullSerializer; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +/** + * @author ysj + */ +@Data +@ApiModel(value = "风电设备对象") +public class WindDeviceVo { + + @ApiModelProperty(value = "归属机构") + private Long deptId; + + @ApiModelProperty(value = "编码") + private String code; + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "经度") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double lgtd; + + @ApiModelProperty(value = "纬度") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double lttd; + + @ApiModelProperty(value = "排序") + private Integer ord; +} diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindGenerationVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindGenerationVo.java new file mode 100644 index 0000000..d9463f1 --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindGenerationVo.java @@ -0,0 +1,33 @@ +package com.hnac.hzims.operational.main.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.NullSerializer; +import com.hnac.hzims.hzimsweather.response.weather.Daily; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +import java.util.List; + +/** + * @author ysj + */ +@Data +@ApiModel(value = "风电站点对象") +public class WindGenerationVo { + + @ApiModelProperty(value = "年份") + private Integer year; + + @ApiModelProperty(value = "月份") + private String mon; + + @ApiModelProperty(value = "计划发电量") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double plan; + + @ApiModelProperty(value = "发电量") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double generation; +} diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindScoreVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindScoreVo.java index a0a83c2..d245f36 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindScoreVo.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindScoreVo.java @@ -12,7 +12,7 @@ import java.util.List; * @author ysj */ @Data -@ApiModel(value = "水电站分计对象") +@ApiModel(value = "风电集团/区域指标对象") public class WindScoreVo { @ApiModelProperty(value = "机构Id") diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindStationVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindStationVo.java new file mode 100644 index 0000000..cab0cfc --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindStationVo.java @@ -0,0 +1,71 @@ +package com.hnac.hzims.operational.main.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.NullSerializer; +import com.hnac.hzims.hzimsweather.response.weather.Daily; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author ysj + */ +@Data +@ApiModel(value = "风电站点对象") +public class WindStationVo { + + @ApiModelProperty(value = "机构Id") + private Long departId; + + @ApiModelProperty(value = "机构名称") + private String departName; + + @ApiModelProperty(value = "城市行政区域编码") + private String areaCode; + + @ApiModelProperty(value = "运行天数") + private Long runDay; + + @ApiModelProperty(value = "装机容量") + private Double capacity; + + @ApiModelProperty(value = "年计划发电量") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double planYear; + + @ApiModelProperty(value = "月计划发电量") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double planMon; + + @ApiModelProperty(value = "已发电量") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double generation; + + @ApiModelProperty(value = "日上网电量") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double generationDay; + + @ApiModelProperty(value = "日平均风速") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double speed; + + @ApiModelProperty(value = "日峰值功率") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double peak; + + @ApiModelProperty(value = "日综合厂用电量") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double comprehensivePower; + + @ApiModelProperty(value = "日可用时长") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double available; + + @ApiModelProperty(value = "风电设备") + private List devices; + + @ApiModelProperty(value = "天气") + private List weather; +} diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindTargetCurveVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindTargetCurveVo.java new file mode 100644 index 0000000..1adde22 --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindTargetCurveVo.java @@ -0,0 +1,33 @@ +package com.hnac.hzims.operational.main.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.NullSerializer; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author ysj + */ +@Data +@ApiModel(value = "风电站点对象") +public class WindTargetCurveVo { + + @ApiModelProperty(value = "月份") + private String mon; + + @ApiModelProperty(value = "日期") + private Integer day; + + @ApiModelProperty(value = "日上网电量") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double generationDay; + + @ApiModelProperty(value = "日平均风速") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double speed; + + @ApiModelProperty(value = "日峰值功率") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double peak; +} diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/mapper/EmInfoMapper.xml b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/mapper/EmInfoMapper.xml index e9bfa04..252566c 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/mapper/EmInfoMapper.xml +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/mapper/EmInfoMapper.xml @@ -91,7 +91,7 @@ SELECT * FROM `hzims_em_info` WHERE IS_DELETED = 0 AND HOME_PAGE_DISPLAY = 1 and `NUMBER` = #{emCode} diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/WindHomeController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/WindHomeController.java index cdebc22..27410cf 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/WindHomeController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/WindHomeController.java @@ -2,8 +2,7 @@ package com.hnac.hzims.operational.main.controller; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.hnac.hzims.operational.main.service.WindHomeService; -import com.hnac.hzims.operational.main.vo.HydropowerScoreVo; -import com.hnac.hzims.operational.main.vo.WindScoreVo; +import com.hnac.hzims.operational.main.vo.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -15,6 +14,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * @author ysj */ @@ -34,4 +35,28 @@ public class WindHomeController extends BladeController { return R.data(service.KPIs(deptId)); } + @ApiLog + @ApiOperation("风电站点指标数据") + @GetMapping("/station") + @ApiOperationSupport(order = 2) + public R station(@ApiParam(value = "站点机构ID") Long deptId) { + return R.data(service.station(deptId)); + } + + @ApiLog + @ApiOperation("风电站点发电量") + @GetMapping("/generation") + @ApiOperationSupport(order = 3) + public R> generation(@ApiParam(value = "站点机构ID") Long deptId) { + return R.data(service.generation(deptId)); + } + + @ApiLog + @ApiOperation("风电站点月份曲线数据") + @GetMapping("/target_curve") + @ApiOperationSupport(order = 3) + public R> target_curve(@ApiParam(value = "站点机构ID") Long deptId) { + return R.data(service.target_curve(deptId)); + } + } \ No newline at end of file diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/WindHomeService.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/WindHomeService.java index 9643554..1c53ea3 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/WindHomeService.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/WindHomeService.java @@ -1,6 +1,11 @@ package com.hnac.hzims.operational.main.service; +import com.hnac.hzims.operational.main.vo.WindGenerationVo; import com.hnac.hzims.operational.main.vo.WindScoreVo; +import com.hnac.hzims.operational.main.vo.WindStationVo; +import com.hnac.hzims.operational.main.vo.WindTargetCurveVo; + +import java.util.List; /** * @author ysj @@ -9,4 +14,10 @@ public interface WindHomeService { WindScoreVo KPIs(Long deptId); + + WindStationVo station(Long deptId); + + List generation(Long deptId); + + List target_curve(Long deptId); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java index 7664127..90c0786 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java @@ -1,22 +1,36 @@ package com.hnac.hzims.operational.main.service.impl; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; +import com.hnac.hzims.hzimsweather.response.weather.Daily; +import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherDailyResponse; import com.hnac.hzims.operational.fill.entity.WindEntity; import com.hnac.hzims.operational.fill.service.WindService; import com.hnac.hzims.operational.main.constant.HomePageConstant; +import com.hnac.hzims.operational.main.service.IWeatherService; import com.hnac.hzims.operational.main.service.WindHomeService; -import com.hnac.hzims.operational.main.vo.WindScoreVo; +import com.hnac.hzims.operational.main.vo.*; import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.operational.station.service.IStationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.MapUtils; import org.springblade.core.tool.utils.CollectionUtil; import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.ObjectUtil; +import org.springblade.server.domain.Sys; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.util.Date; -import java.util.List; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.stream.Collectors; /** @@ -27,10 +41,21 @@ import java.util.stream.Collectors; @Slf4j public class WindHomeServiceImpl implements WindHomeService { + private final WindService windService; + + private final IWeatherService weatherService; + private final IStationService stationService; - private final WindService windService; + private final RedisTemplate redisTemplate; + public final static String device_cache_final = "hzims:equipment:emInfo:deviceCode.emInfoList"; + + /** + * 集团/区域指标数据 + * @param deptId + * @return + */ @Override public WindScoreVo KPIs(Long deptId) { // 查询风电站 @@ -64,6 +89,159 @@ public class WindHomeServiceImpl implements WindHomeService { return score; } + + /** + * 站点指标数据 + * @param deptId + * @return + */ + @Override + public WindStationVo station(Long deptId) { + StationEntity station = stationService.getOne(Wrappers.lambdaQuery() + .eq(StationEntity::getRefDept,deptId) + ); + if(ObjectUtil.isEmpty(station)){ + return new WindStationVo(); + } + WindStationVo wind = new WindStationVo(); + // 机构编码 + wind.setDepartId(station.getRefDept()); + // 机构名称 + wind.setDepartName(station.getName()); + // 站点行政区域编码 + wind.setAreaCode(station.getAreaCode()); + // 站点七天天气 + Map weekWeather = weatherService.getWeekWeather(Collections.singletonList(station.getCode())); + wind.setWeather(this.getDailyList(weekWeather,station.getCode())); + // 安全运行天数 + if (ObjectUtil.isNotEmpty(station.getCommissionTime())) { + wind.setRunDay(Duration.between(station.getCommissionTime(), LocalDateTime.now()).toDays()); + } + // 设备 + List devices = JSONObject.parseObject(redisTemplate.opsForValue().get(device_cache_final).toString(), new TypeReference>() {}); + if(CollectionUtil.isNotEmpty(devices)){ + // 装机容量 + wind.setCapacity(devices.stream().filter(device->device.getCreateDept().equals(station.getRefDept())).mapToDouble(EminfoAndEmParamVo::getInstalledCapacity).sum()); + // 设备列表 + wind.setDevices(devices.stream().filter(device->device.getCreateDept().equals(station.getRefDept())).map(item->{ + WindDeviceVo windDevice = new WindDeviceVo(); + windDevice.setDeptId(item.getCreateDept()); + windDevice.setCode(item.getEmCode()); + windDevice.setName(item.getName()); + windDevice.setOrd(item.getOrd()); + windDevice.setLgtd(item.getLgtd()); + windDevice.setLttd(item.getLttd()); + return windDevice; + }).collect(Collectors.toList())); + } + // 查询站点填报数据 - 全部 + List all = windService.list(Wrappers.lambdaQuery() + .eq(WindEntity::getStationCode,station.getCode()) + ); + if(CollectionUtil.isNotEmpty(all)){ + // 年计划发电量 + wind.setPlanYear(all.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy"))).mapToDouble(WindEntity::getPlan).sum()); + // 月计划发电量 + wind.setPlanMon(all.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(WindEntity::getPlan).sum()); + // 总发电量 + wind.setGeneration(all.stream().mapToDouble(WindEntity::getPower).sum()); + // 日上网电量 + wind.setGenerationDay(all.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),DateUtil.PATTERN_DATE))).mapToDouble(WindEntity::getSurfPower).sum()); + // 日平均风速 + wind.setSpeed(all.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),DateUtil.PATTERN_DATE))).mapToDouble(WindEntity::getSpeed).sum()); + // 日峰值功率 + wind.setPeak(all.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),DateUtil.PATTERN_DATE))).mapToDouble(WindEntity::getPeakPower).sum()); + // 日综合厂用电量 + wind.setComprehensivePower(all.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),DateUtil.PATTERN_DATE))).mapToDouble(WindEntity::getComprehensivePower).sum()); + // 日可用时长 + wind.setAvailable(all.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),DateUtil.PATTERN_DATE))).mapToDouble(WindEntity::getAvailable).sum()); + } + return wind; + } + + /** + * 风电站点发电量柱状数据 + * @param deptId + * @return + */ + @Override + public List generation(Long deptId) { + StationEntity station = stationService.getOne(Wrappers.lambdaQuery() + .eq(StationEntity::getRefDept,deptId) + ); + if(ObjectUtil.isEmpty(station)){ + return new ArrayList<>(); + } + // 查询风电填报数据 + List winds = windService.list(Wrappers.lambdaQuery() + .eq(WindEntity::getStationCode,station.getCode()) + ); + if(CollectionUtil.isEmpty(winds)){ + return new ArrayList<>(); + } + List monList = this.mons(1,12,false); + return monList.stream().map(mon->{ + LocalDate localDate = LocalDate.parse(DateUtil.format(new Date(), mon), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATE)); + WindGenerationVo generation = new WindGenerationVo(); + generation.setYear(localDate.getYear()); + generation.setMon(localDate.getMonthValue() > 9 ? String.valueOf(localDate.getMonthValue()) : "0" + localDate.getMonthValue()); + generation.setPlan(winds.stream().filter(o->o.getFillDate().contains(generation.getYear() + "-" + generation.getMon())).mapToDouble(WindEntity::getPlan).sum()); + generation.setGeneration(winds.stream().filter(o->o.getFillDate().contains(generation.getYear() + "-" + generation.getMon())).mapToDouble(WindEntity::getPower).sum()); + return generation; + }).collect(Collectors.toList()); + } + + /** + * 风电站点月份曲线数据 + * @param deptId + * @return + */ + @Override + public List target_curve(Long deptId) { + StationEntity station = stationService.getOne(Wrappers.lambdaQuery() + .eq(StationEntity::getRefDept,deptId) + ); + if(ObjectUtil.isEmpty(station)){ + return new ArrayList<>(); + } + // 查询风电填报数据 + List winds = windService.list(Wrappers.lambdaQuery() + .eq(WindEntity::getStationCode,station.getCode()) + .like(WindEntity::getFillDate,DateUtil.format(new Date(),"yyyy-MM")) + ); + if(CollectionUtil.isEmpty(winds)){ + return new ArrayList<>(); + } + List days = this.getCurrentDayList(); + return days.stream().map(day->{ + LocalDate localDate = LocalDate.parse(DateUtil.format(new Date(), day), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATE)); + WindTargetCurveVo curve = new WindTargetCurveVo(); + curve.setMon(localDate.getMonthValue() > 9 ? String.valueOf(localDate.getMonthValue()) : "0" + localDate.getMonthValue()); + curve.setDay(localDate.getDayOfMonth()); + curve.setPeak(winds.stream().filter(o->o.getFillDate().contains(day)).mapToDouble(WindEntity::getPeakPower).sum()); + curve.setGenerationDay(winds.stream().filter(o->o.getFillDate().contains(day)).mapToDouble(WindEntity::getSurfPower).sum()); + curve.setSpeed(winds.stream().filter(o->o.getFillDate().contains(day)).mapToDouble(WindEntity::getSpeed).sum()); + return curve; + }).collect(Collectors.toList()); + } + + /** + * 获取七天天气 + * @param weekWeather + * @param code + * @return + */ + private List getDailyList(Map weekWeather, String code) { + if(MapUtils.isEmpty(weekWeather)){ + return null; + } + HeWeatherWeatherDailyResponse week = weekWeather.get(code); + if(ObjectUtil.isEmpty(week)){ + return null; + } + return week.getDaily(); + } + /** * 风电数据 - 年 * @param years @@ -108,4 +286,58 @@ public class WindHomeServiceImpl implements WindHomeService { // 日发电量 score.setGenerateDay(days.stream().mapToDouble(WindEntity::getPower).sum()); } + + /** + * 获取近年月份集合 + * @param year + * @return + */ + public List mons(int year, int endMoth, boolean nextMon) { + List list = new ArrayList<>(); + // 开始日期 + Calendar endCal = Calendar.getInstance(); + endCal.setTime(new Date()); + endCal.add(Calendar.MONTH, -endCal.get(Calendar.MONTH) + endMoth); + endCal.add(Calendar.DATE, -endCal.get(Calendar.DATE) + 1); + + // 结束日期 + Calendar startCal = Calendar.getInstance(); + startCal.setTime(new Date()); + startCal.set(Calendar.YEAR, startCal.get(Calendar.YEAR) - year); + startCal.add(Calendar.MONTH, -startCal.get(Calendar.MONTH)); + startCal.add(Calendar.DATE, -startCal.get(Calendar.DATE) + 1); + // 获取日期之间的月份 + while (endCal.after(startCal)) { + list.add(DateUtil.format(startCal.getTime(),DateUtil.PATTERN_DATE)); + startCal.add(Calendar.MONTH, 1); + } + if(nextMon){ + list.add(DateUtil.format(endCal.getTime(),DateUtil.PATTERN_DATE)); + } + return list; + } + + /** + * 获取当月日期List + * @return + */ + private List getCurrentDayList() { + List list = new ArrayList<>(); + // 开始日期 + Calendar startCal = Calendar.getInstance(); + startCal.setTime(new Date()); + startCal.add(Calendar.DATE, -startCal.get(Calendar.DATE) + 1); + + // 结束日期 + Calendar endCal = Calendar.getInstance(); + endCal.setTime(new Date()); + endCal.add(Calendar.DATE, -endCal.get(Calendar.DATE) + 1); + endCal.add(Calendar.MONTH, 1); + // 获取日期之间日期 + while (endCal.after(startCal)) { + list.add(DateUtil.format(startCal.getTime(),DateUtil.PATTERN_DATE)); + startCal.add(Calendar.DATE, 1); + } + return list; + } } \ No newline at end of file From ab0333e40706817375e9f240eced65de52875f13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Thu, 13 Jul 2023 16:23:22 +0800 Subject: [PATCH 15/21] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E7=A5=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TicketProcessServiceImpl.java | 415 +++++++++++---------- 1 file changed, 210 insertions(+), 205 deletions(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java index cb82cba..3511d30 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java @@ -249,234 +249,239 @@ public class TicketProcessServiceImpl implements TicketProcessService { @Override @Transactional(rollbackFor = Exception.class) public void findPending(ProcessWorkFlowResponse response) { - log.info("获取待处理的数据 {}", response); - log.info("获取businessKey: {}", response.getBusinessKey()); - log.info("获取taskId: {}", response.getTaskId()); - log.info("获取下一个审批人是: {}", response.getNextStepOperator()); - log.info("获取下一个用户Id是: {}", response.getUserId()); - log.info("获取当前任务名称是: {}", response.getTaskName()); - log.info("获取根据handleType区分是用户还是候选组角色: {}", response.getHandleType()); - //json转换表单 - String formData = JSON.toJSONString(response.getVariables()); - log.info("获取表单的数据:{}", formData); - FristWorkTicketVo fristWorkFlowResponse = null; + try { - fristWorkFlowResponse = JSONObject.parseObject(formData, FristWorkTicketVo.class); - } catch (Exception e) { - log.error("获取表单出现异常了~~~~"); - throw new IllegalArgumentException(e.getMessage()); - } - //获取表单数据 - WorkTicketVo workTicketVo = fristWorkFlowResponse.getWorkTicketVo(); - WorkTicketInfoEntity workTicket = workTicketVo.getWorkTicket(); - //2.流程处理 - String businessKey = response.getBusinessKey(); - WorkTicketInfoEntity workTicketInfo = ticketInfoService.getById(businessKey); - if (ObjectUtils.isEmpty(workTicketInfo)) { - log.error("获取工作票的数据为不存在"); - return; - } - //更新工作票 - workTicket.setId(workTicketInfo.getId()); - //保存流程描述 - workTicket.setCreateDept(workTicketInfo.getCreateDept()); - workTicket.setCreateUser(workTicketInfo.getCreateUser()); - workTicket.setTenantId(workTicketInfo.getTenantId()); - saveWorkTicket(workTicket, response); - //工作流ID - workTicket.setProcessInstanceId(response.getProcessInstanceId()); - workTicketInfoService.updateById(workTicket); - //更新安全措施 - List safetyMeasuresList = workTicketVo.getSafetyMeasuresList(); - if (CollectionUtils.isNotEmpty(safetyMeasuresList)) { - log.info("获取安全措施的数据:{}", safetyMeasuresList); - for (WorkTicketSafetyMeasureEntity item : safetyMeasuresList) { - if (ObjectUtils.isNotEmpty(item.getId())) { - workTicketSafetyMeasureService.updateById(item); - } else { - item.setTicketId(workTicketInfo.getId()); - workTicketSafetyMeasureService.save(item); + log.info("获取待处理的数据 {}", response); + log.info("获取businessKey: {}", response.getBusinessKey()); + log.info("获取taskId: {}", response.getTaskId()); + log.info("获取下一个审批人是: {}", response.getNextStepOperator()); + log.info("获取下一个用户Id是: {}", response.getUserId()); + log.info("获取当前任务名称是: {}", response.getTaskName()); + log.info("获取根据handleType区分是用户还是候选组角色: {}", response.getHandleType()); + //json转换表单 + String formData = JSON.toJSONString(response.getVariables()); + log.info("获取表单的数据:{}", formData); + FristWorkTicketVo fristWorkFlowResponse = null; + try { + fristWorkFlowResponse = JSONObject.parseObject(formData, FristWorkTicketVo.class); + } catch (Exception e) { + log.error("获取表单出现异常了~~~~"); + throw new IllegalArgumentException(e.getMessage()); + } + //获取表单数据 + WorkTicketVo workTicketVo = fristWorkFlowResponse.getWorkTicketVo(); + WorkTicketInfoEntity workTicket = workTicketVo.getWorkTicket(); + //2.流程处理 + String businessKey = response.getBusinessKey(); + WorkTicketInfoEntity workTicketInfo = ticketInfoService.getById(businessKey); + if (ObjectUtils.isEmpty(workTicketInfo)) { + log.error("获取工作票的数据为不存在"); + return; + } + //更新工作票 + workTicket.setId(workTicketInfo.getId()); + //保存流程描述 + workTicket.setCreateDept(workTicketInfo.getCreateDept()); + workTicket.setCreateUser(workTicketInfo.getCreateUser()); + workTicket.setTenantId(workTicketInfo.getTenantId()); + saveWorkTicket(workTicket, response); + //工作流ID + workTicket.setProcessInstanceId(response.getProcessInstanceId()); + workTicketInfoService.updateById(workTicket); + //更新安全措施 + List safetyMeasuresList = workTicketVo.getSafetyMeasuresList(); + if (CollectionUtils.isNotEmpty(safetyMeasuresList)) { + log.info("获取安全措施的数据:{}", safetyMeasuresList); + for (WorkTicketSafetyMeasureEntity item : safetyMeasuresList) { + if (ObjectUtils.isNotEmpty(item.getId())) { + workTicketSafetyMeasureService.updateById(item); + } else { + item.setTicketId(workTicketInfo.getId()); + workTicketSafetyMeasureService.save(item); + } } } - } - // 第二种 工作票工作任务组 - List workTicketContentDtoList = workTicketVo.getWorkTicketContentDtoList(); - if (CollectionUtils.isNotEmpty(workTicketContentDtoList)) { - log.info("获取工作票工作任务组:{}", workTicketContentDtoList); - workTicketContentDtoList.forEach(item -> { - if (ObjectUtils.isEmpty(item.getId())) { - contentService.save(item); + // 第二种 工作票工作任务组 + List workTicketContentDtoList = workTicketVo.getWorkTicketContentDtoList(); + if (CollectionUtils.isNotEmpty(workTicketContentDtoList)) { + log.info("获取工作票工作任务组:{}", workTicketContentDtoList); + workTicketContentDtoList.forEach(item -> { + if (ObjectUtils.isEmpty(item.getId())) { + contentService.save(item); + } else { + contentService.updateById(item); + } + }); + } + + // 工作票延期 + WorkTicketDelayEntity workTicketDelay = workTicketVo.getWorkTicketDelay(); + if (ObjectUtils.isNotEmpty(workTicketDelay) && "延期".equals(workTicket.getInput())) { + + WorkTicketDelayEntity workTicketDelayEntity = workTicketDelayService.selectByTicketId(workTicketInfo.getId()); + log.info("获取工作票延期:{}", workTicketDelay); + workTicketDelay.setCreateDept(workTicketInfo.getCreateDept()); + workTicketDelay.setTicketId(workTicketInfo.getId()); + workTicketDelay.setTenantId(workTicketInfo.getTenantId()); + if (ObjectUtils.isEmpty(workTicketDelayEntity)) { + log.info("正在保存工作票延期"); + workTicketDelayService.save(workTicketDelay); } else { - contentService.updateById(item); + log.info("正在更新工作票延期"); + workTicketDelayService.updateByTicketId(workTicketDelay); } - }); - } - - // 工作票延期 - WorkTicketDelayEntity workTicketDelay = workTicketVo.getWorkTicketDelay(); - if (ObjectUtils.isNotEmpty(workTicketDelay) && "延期".equals(workTicket.getInput())) { - - WorkTicketDelayEntity workTicketDelayEntity = workTicketDelayService.selectByTicketId(workTicketInfo.getId()); - log.info("获取工作票延期:{}", workTicketDelay); - workTicketDelay.setCreateDept(workTicketInfo.getCreateDept()); - workTicketDelay.setTicketId(workTicketInfo.getId()); - workTicketDelay.setTenantId(workTicketInfo.getTenantId()); - if (ObjectUtils.isEmpty(workTicketDelayEntity)) { - log.info("正在保存工作票延期"); - workTicketDelayService.save(workTicketDelay); - } else { - log.info("正在更新工作票延期"); - workTicketDelayService.updateByTicketId(workTicketDelay); } - } - //工作结束 - WorkTicketFinish workTicketFinish = workTicketVo.getWorkTicketFinish(); - log.info("工作结束==============>" + (workTicket.getFlowStatus().intValue())); - if (ObjectUtils.isNotEmpty(workTicketFinish)) { - WorkTicketFinish ticketFinish = workTicketFinishService.selectByTicketId(workTicketInfo.getId()); - log.info("获取工作结束:{}", workTicketFinish); - if (ObjectUtils.isEmpty(workTicketFinish.getId()) || ObjectUtils.isEmpty(ticketFinish)) { - log.info("获取工作结束保存成功"); - workTicketFinish.setTicketId(workTicketInfo.getId()); - workTicketFinishService.save(workTicketFinish); - } else { - log.info("获取工作结束更新成功"); - workTicketDelay.setInitialTime(LocalDateTime.now()); - workTicketFinishService.updateByTicketId(workTicketFinish); + //工作结束 + WorkTicketFinish workTicketFinish = workTicketVo.getWorkTicketFinish(); + log.info("工作结束==============>" + (workTicket.getFlowStatus().intValue())); + if (ObjectUtils.isNotEmpty(workTicketFinish)) { + WorkTicketFinish ticketFinish = workTicketFinishService.selectByTicketId(workTicketInfo.getId()); + log.info("获取工作结束:{}", workTicketFinish); + if (ObjectUtils.isEmpty(workTicketFinish.getId()) || ObjectUtils.isEmpty(ticketFinish)) { + log.info("获取工作结束保存成功"); + workTicketFinish.setTicketId(workTicketInfo.getId()); + workTicketFinishService.save(workTicketFinish); + } else { + log.info("获取工作结束更新成功"); + workTicketDelay.setInitialTime(LocalDateTime.now()); + workTicketFinishService.updateByTicketId(workTicketFinish); + } } - } - // 工作开始时间和结束时间 - // List workTicketOperateTimeEntities = workTicketVo.getWorkTicketOperateTimeEntities(); - // if (CollectionUtils.isNotEmpty(workTicketOperateTimeEntities)) { - // log.info("工作开始时间和结束时间:{}", workTicketFinish); - // workTicketOperateTimeService.saveBatch(workTicketOperateTimeEntities); - // } - //工作票负责人变更 - WorkTicketPrincipalChangeEntity workTicketPrincipalChange = workTicketVo.getWorkTicketPrincipalChange(); - if (ObjectUtils.isNotEmpty(workTicketPrincipalChange) && "转移".equals(workTicket.getInput())) { - log.info("工作票负责人变更: {}", workTicketPrincipalChange); - //原来的负责人 - User user = UserCache.getUser(workTicketPrincipalChange.getInitialPrincipal()); - //新的负责人 - User newUser = UserCache.getUser(workTicketPrincipalChange.getChangePrincipal()); - workTicketPrincipalChange.setCreateDept(workTicketInfo.getCreateDept()); - workTicketPrincipalChange.setTicketId(workTicketInfo.getId()); - workTicketPrincipalChange.setTenantId(workTicketInfo.getTenantId()); - if (workTicketPrincipalChange.getFlowCode() == null) { - workTicketPrincipalChange.setFlowCode(IdWorker.getIdStr()); - } + // 工作开始时间和结束时间 + // List workTicketOperateTimeEntities = workTicketVo.getWorkTicketOperateTimeEntities(); + // if (CollectionUtils.isNotEmpty(workTicketOperateTimeEntities)) { + // log.info("工作开始时间和结束时间:{}", workTicketFinish); + // workTicketOperateTimeService.saveBatch(workTicketOperateTimeEntities); + // } + //工作票负责人变更 + WorkTicketPrincipalChangeEntity workTicketPrincipalChange = workTicketVo.getWorkTicketPrincipalChange(); + if (ObjectUtils.isNotEmpty(workTicketPrincipalChange) && "转移".equals(workTicket.getInput())) { + log.info("工作票负责人变更: {}", workTicketPrincipalChange); + //原来的负责人 + User user = UserCache.getUser(workTicketPrincipalChange.getInitialPrincipal()); + //新的负责人 + User newUser = UserCache.getUser(workTicketPrincipalChange.getChangePrincipal()); + workTicketPrincipalChange.setCreateDept(workTicketInfo.getCreateDept()); + workTicketPrincipalChange.setTicketId(workTicketInfo.getId()); + workTicketPrincipalChange.setTenantId(workTicketInfo.getTenantId()); + if (workTicketPrincipalChange.getFlowCode() == null) { + workTicketPrincipalChange.setFlowCode(IdWorker.getIdStr()); + } - WorkTicketPrincipalChangeEntity workTicketPrincipalChangeEntity = workTicketPrincipalChangeService.selectByTicketId(workTicket.getId()); + WorkTicketPrincipalChangeEntity workTicketPrincipalChangeEntity = workTicketPrincipalChangeService.selectByTicketId(workTicket.getId()); - if (ObjectUtils.isEmpty(workTicketPrincipalChangeEntity)) { - log.info("工作票负责人保存变更"); - workTicketPrincipalChangeService.save(workTicketPrincipalChange); - } else { - log.info("工作票负责人更新变更"); - workTicketPrincipalChangeService.updateByTicketId(workTicketPrincipalChange); + if (ObjectUtils.isEmpty(workTicketPrincipalChangeEntity)) { + log.info("工作票负责人保存变更"); + workTicketPrincipalChangeService.save(workTicketPrincipalChange); + } else { + log.info("工作票负责人更新变更"); + workTicketPrincipalChangeService.updateByTicketId(workTicketPrincipalChange); + } + log.info("工作负责人变更 原来的负责人 {},变更为 {}", user.getName(), newUser.getName()); + workTicket.setPrincipal(workTicketPrincipalChange.getChangePrincipal()); + workTicket.setPrincipalName(newUser.getName()); + //更新工作票 + workTicketInfoService.updateById(workTicket); } - log.info("工作负责人变更 原来的负责人 {},变更为 {}", user.getName(), newUser.getName()); - workTicket.setPrincipal(workTicketPrincipalChange.getChangePrincipal()); - workTicket.setPrincipalName(newUser.getName()); - //更新工作票 - workTicketInfoService.updateById(workTicket); - } - //工作票危险点分析及控制措施票 - if (workTicket.getIsHazard()) { - List ticketInfoDangers = workTicketVo.getTicketInfoDangers(); - if (CollectionUtils.isNotEmpty(ticketInfoDangers)) { - List collect = ticketInfoDangers.stream().map(item -> { - item.setTicketId(workTicketInfo.getId()); - return item; - }).collect(Collectors.toList()); + //工作票危险点分析及控制措施票 + if (workTicket.getIsHazard()) { + List ticketInfoDangers = workTicketVo.getTicketInfoDangers(); + if (CollectionUtils.isNotEmpty(ticketInfoDangers)) { + List collect = ticketInfoDangers.stream().map(item -> { + item.setTicketId(workTicketInfo.getId()); + return item; + }).collect(Collectors.toList()); - System.out.println("工作票危险点分析及控制措施票 : " + collect); + System.out.println("工作票危险点分析及控制措施票 : " + collect); - ticketInfoDangerService.saveBatch(collect); + ticketInfoDangerService.saveBatch(collect); + } } - } - if (response.getTaskId() != null || response.getUserId() != null) { - //推送消息 - // try { - // MessagePushRecordDto message = new MessagePushRecordDto(); - // message.setBusinessClassify("business"); - // message.setBusinessKey(MessageConstants.BusinessClassifyEnum.TICKETMESSAGE.getKey()); - // message.setSubject(MessageConstants.BusinessClassifyEnum.TICKETMESSAGE.getDescription()); - // message.setTaskId(workTicketInfo.getId()); - // message.setTenantId("200000"); - // message.setTypes(Arrays.asList(MessageConstants.APP_PUSH, MessageConstants.WS_PUSH)); - // message.setPushType(MessageConstants.IMMEDIATELY); - // //您有一张工作票待审批,工作内容:*****,审批环节:*****; - // String countent = - // "您有一张工作票待审批,工作内容: ".concat(workTicketInfo.getWorkContent()) - // .concat(",审批环节: ") - // .concat(response.getTaskName()); - // message.setContent(countent); - // message.setDeptId(workTicketInfo.getCreateDept()); - // message.setCreateDept(workTicketInfo.getCreateDept()); - // R deptName = sysClient.getDeptName(workTicketInfo.getCreateDept()); - // if (deptName.isSuccess()) { - // message.setDeptName(deptName.getData()); - // } - // String userIds = response.getUserId(); - // if (StringUtils.isBlank(userIds)) { - // log.error("推送的消息不能为空哦,{}", userIds); - // return; - // } - // String[] split = userIds.split(","); - // for (String userId : split) { - // message.setPusher(userId); - // User user = UserCache.getUser(NumberUtils.toLong(userId)); - // if (ObjectUtils.isNotEmpty(user)) { - // message.setPusherName(user.getName()); - // } - // message.setAccount(userId); - // message.setCreateUser(NumberUtils.toLong(userId)); - // messageClient.sendMessage(message); - // log.info("推送消息成功,用户名称{},消息{}", user.getName(), message); - // } - // } catch (Exception e) { - // e.printStackTrace(); - // } - - - BusinessMessageDTO businessMessageDTO = new BusinessMessageDTO(); - businessMessageDTO.setBusinessClassify("business"); - businessMessageDTO.setBusinessKey(MessageConstants.BusinessClassifyEnum.TICKETMESSAGE.getKey()); - businessMessageDTO.setSubject(MessageConstants.BusinessClassifyEnum.TICKETMESSAGE.getDescription()); - businessMessageDTO.setTaskId(workTicketInfo.getId()); - businessMessageDTO.setTenantId("200000"); - //您有一张工作票待审批,工作内容:*****,审批环节:*****; - String countent = - "您有一张工作票待审批,工作内容: ".concat(workTicketInfo.getWorkContent()) - .concat(",审批环节: ") - .concat(response.getTaskName()); - businessMessageDTO.setContent(countent); - businessMessageDTO.setDeptId(workTicketInfo.getCreateDept()); - R deptName = sysClient.getDeptName(workTicketInfo.getCreateDept()); - if (deptName.isSuccess()) { - businessMessageDTO.setDeptName(deptName.getData()); - } - String userIds = response.getUserId(); - businessMessageDTO.setUserIds(userIds); - businessMessageDTO.setCreateUser(workTicketInfo.getCreateUser()); - System.out.println("======================================================"); - System.out.println("businessMessageDTO = " + businessMessageDTO); - System.out.println("======================================================"); - R booleanR = messageClient.sendAppAndWsMsgByUsers(businessMessageDTO); - if (!booleanR.isSuccess()) { - throw new ServiceException("消息推送失败"); + if (response.getTaskId() != null || response.getUserId() != null) { + //推送消息 + // try { + // MessagePushRecordDto message = new MessagePushRecordDto(); + // message.setBusinessClassify("business"); + // message.setBusinessKey(MessageConstants.BusinessClassifyEnum.TICKETMESSAGE.getKey()); + // message.setSubject(MessageConstants.BusinessClassifyEnum.TICKETMESSAGE.getDescription()); + // message.setTaskId(workTicketInfo.getId()); + // message.setTenantId("200000"); + // message.setTypes(Arrays.asList(MessageConstants.APP_PUSH, MessageConstants.WS_PUSH)); + // message.setPushType(MessageConstants.IMMEDIATELY); + // //您有一张工作票待审批,工作内容:*****,审批环节:*****; + // String countent = + // "您有一张工作票待审批,工作内容: ".concat(workTicketInfo.getWorkContent()) + // .concat(",审批环节: ") + // .concat(response.getTaskName()); + // message.setContent(countent); + // message.setDeptId(workTicketInfo.getCreateDept()); + // message.setCreateDept(workTicketInfo.getCreateDept()); + // R deptName = sysClient.getDeptName(workTicketInfo.getCreateDept()); + // if (deptName.isSuccess()) { + // message.setDeptName(deptName.getData()); + // } + // String userIds = response.getUserId(); + // if (StringUtils.isBlank(userIds)) { + // log.error("推送的消息不能为空哦,{}", userIds); + // return; + // } + // String[] split = userIds.split(","); + // for (String userId : split) { + // message.setPusher(userId); + // User user = UserCache.getUser(NumberUtils.toLong(userId)); + // if (ObjectUtils.isNotEmpty(user)) { + // message.setPusherName(user.getName()); + // } + // message.setAccount(userId); + // message.setCreateUser(NumberUtils.toLong(userId)); + // messageClient.sendMessage(message); + // log.info("推送消息成功,用户名称{},消息{}", user.getName(), message); + // } + // } catch (Exception e) { + // e.printStackTrace(); + // } + + + BusinessMessageDTO businessMessageDTO = new BusinessMessageDTO(); + businessMessageDTO.setBusinessClassify("business"); + businessMessageDTO.setBusinessKey(MessageConstants.BusinessClassifyEnum.TICKETMESSAGE.getKey()); + businessMessageDTO.setSubject(MessageConstants.BusinessClassifyEnum.TICKETMESSAGE.getDescription()); + businessMessageDTO.setTaskId(workTicketInfo.getId()); + businessMessageDTO.setTenantId("200000"); + //您有一张工作票待审批,工作内容:*****,审批环节:*****; + String countent = + "您有一张工作票待审批,工作内容: ".concat(workTicketInfo.getWorkContent()) + .concat(",审批环节: ") + .concat(response.getTaskName()); + businessMessageDTO.setContent(countent); + businessMessageDTO.setDeptId(workTicketInfo.getCreateDept()); + R deptName = sysClient.getDeptName(workTicketInfo.getCreateDept()); + if (deptName.isSuccess()) { + businessMessageDTO.setDeptName(deptName.getData()); + } + String userIds = response.getUserId(); + businessMessageDTO.setUserIds(userIds); + businessMessageDTO.setCreateUser(workTicketInfo.getCreateUser()); + System.out.println("======================================================"); + System.out.println("businessMessageDTO = " + businessMessageDTO); + System.out.println("======================================================"); + R booleanR = messageClient.sendAppAndWsMsgByUsers(businessMessageDTO); + if (!booleanR.isSuccess()) { + throw new ServiceException("消息推送失败"); + } + log.info("推送成功~"); } - log.info("推送成功~"); + } catch (Exception e) { + e.getMessage(); } } From 969bde22d832139efc0f83b13fbff5afd4362f78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Thu, 13 Jul 2023 16:23:50 +0800 Subject: [PATCH 16/21] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E7=A5=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java index 3511d30..3a5b6a4 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java @@ -481,7 +481,7 @@ public class TicketProcessServiceImpl implements TicketProcessService { log.info("推送成功~"); } } catch (Exception e) { - e.getMessage(); + e.printStackTrace(); } } From 9506869bcfca0a367230b8a9173c29d77abd8b29 Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Thu, 13 Jul 2023 19:39:45 +0800 Subject: [PATCH 17/21] =?UTF-8?q?#=20=E6=97=A5=E5=B8=B8=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E8=8E=B7=E5=8F=96=E5=BD=93=E6=9C=88=E6=9C=80?= =?UTF-8?q?=E5=90=8E=E4=B8=80=E5=A4=A9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../maintenance/service/impl/OperMaintenanceMonitorServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceMonitorServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceMonitorServiceImpl.java index b1a8a03..6c21a91 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceMonitorServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceMonitorServiceImpl.java @@ -21,6 +21,8 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.YearMonth; +import java.time.temporal.TemporalAdjusters; import java.util.*; import java.util.stream.Collectors; @@ -46,7 +48,7 @@ public class OperMaintenanceMonitorServiceImpl implements IOperMaintenanceMonito // Date startTime = DateUtil.parse(DateUtil.format(DateUtil.now(), "yyyy-MM") + "-01", DateUtil.PATTERN_DATE); eq(OperMaintenancePlanEntity::getIsDeleted, 0L); ge(OperMaintenancePlanEntity::getDisposeTime, startDate); - lt(OperMaintenancePlanEntity::getDisposeTime, startDate.withDayOfMonth(startDate.getMonth().maxLength())); + lt(OperMaintenancePlanEntity::getDisposeTime, startDate.with(TemporalAdjusters.lastDayOfMonth())); }}); //获取列表班次ID集合 From 57730c09522410ef9360bcf85667631a5b743a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Fri, 14 Jul 2023 11:08:07 +0800 Subject: [PATCH 18/21] =?UTF-8?q?=E6=97=A5=E5=B8=B8=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=94=B9=E6=88=90=E5=BC=82=E6=AD=A5=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/operational/config/ThreadConfig.java | 36 +++ .../service/impl/MaintenanceServiceImpl.java | 313 ++++++++++++--------- .../propperties/ThreadPoolConfigProperties.java | 32 +++ 3 files changed, 241 insertions(+), 140 deletions(-) create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ThreadConfig.java create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/propperties/ThreadPoolConfigProperties.java diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ThreadConfig.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ThreadConfig.java new file mode 100644 index 0000000..a9877fe --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ThreadConfig.java @@ -0,0 +1,36 @@ +package com.hnac.hzims.operational.config; + +import com.hnac.hzims.operational.propperties.ThreadPoolConfigProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @Author WL + * @Version v1.0 + * @Serial 1.0 + * @Date 2023/5/10 12:49 + */ +@Configuration +public class ThreadConfig { + + @Autowired + private ThreadPoolConfigProperties threadPoolConfigProperties; + + @Bean + public ThreadPoolExecutor threadPoolExecutor() { + return new ThreadPoolExecutor(threadPoolConfigProperties.getCorePoolSize(), + threadPoolConfigProperties.getMaxSize(), + threadPoolConfigProperties.getKeepAliveTime(), + TimeUnit.SECONDS, + new LinkedBlockingDeque<>(threadPoolConfigProperties.getCapacity()), + Executors.defaultThreadFactory(), + new ThreadPoolExecutor.AbortPolicy()); + } + +} diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java index ffcd825..12f48bb 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java @@ -37,8 +37,12 @@ import org.springblade.system.feign.ISysClient; import org.springblade.system.user.cache.UserCache; import org.springblade.system.user.entity.User; import org.springframework.beans.BeanUtils; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.stereotype.Service; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.DefaultTransactionDefinition; import java.time.Instant; import java.time.LocalDate; @@ -46,6 +50,9 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -71,41 +78,43 @@ public class MaintenanceServiceImpl implements MaintenanceService { private final IFlowClient flowClient; private final ISysClient sysClient; + private final ThreadPoolExecutor executor; + + + private final DataSourceTransactionManager dataSourceTransactionManager; + /** * 日常维护生成任务 * * @param ids */ @Override - @Transactional(rollbackFor = Exception.class) public void createTask(List ids) { - //获取日常维护计划 - LambdaQueryWrapper planEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); - planEntityLambdaQueryWrapper.in(BaseEntity::getId, ids); - List planEntities = maintenancePlanService - .list(planEntityLambdaQueryWrapper); - //筛选当月没生成任务的计划 - List finalPlanEntities = planEntities.stream().filter(planEntity -> - ObjectUtil.isEmpty(planEntity.getCreateTaskTime()) - || !DateUtil.judgeSameDay( - DateUtil.DateToLocalDateTime(planEntity.getCreateTaskTime()), LocalDate.now()) - ).collect(Collectors.toList()); - if (CollectionUtil.isEmpty(finalPlanEntities)) { - throw new ServiceException("所选计划当天已生成任务"); - } - for (OperMaintenancePlanEntity finalPlanEntity : finalPlanEntities) { - // 通过计划生成任务 - this.createTaskByPlan(finalPlanEntity); - //更新任务派发时间 - LambdaUpdateWrapper planEntityLambdaUpdateWrapper = - new LambdaUpdateWrapper<>(); - planEntityLambdaUpdateWrapper.set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()); - planEntityLambdaUpdateWrapper.eq(OperMaintenancePlanEntity::getId, finalPlanEntity.getId()); - boolean update = maintenancePlanService.update(planEntityLambdaUpdateWrapper); - if (!update) { - log.error("maintenance:generateTask 更新任务派发失败"); - throw new ServiceException("更新任务派发失败"); + try { + //获取日常维护计划 + LambdaQueryWrapper planEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + planEntityLambdaQueryWrapper.in(BaseEntity::getId, ids); + List planEntities = maintenancePlanService.list(planEntityLambdaQueryWrapper); + //筛选当月没生成任务的计划 + List finalPlanEntities = planEntities.stream().filter(planEntity -> ObjectUtil.isEmpty(planEntity.getCreateTaskTime()) || !DateUtil.judgeSameDay(DateUtil.DateToLocalDateTime(planEntity.getCreateTaskTime()), LocalDate.now())).collect(Collectors.toList()); + if (CollectionUtil.isEmpty(finalPlanEntities)) { + throw new ServiceException("所选计划当天已生成任务"); + } + for (OperMaintenancePlanEntity finalPlanEntity : finalPlanEntities) { + // 通过计划生成任务 + this.createTaskByPlan(finalPlanEntity); + //更新任务派发时间 + LambdaUpdateWrapper planEntityLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + planEntityLambdaUpdateWrapper.set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()); + planEntityLambdaUpdateWrapper.eq(OperMaintenancePlanEntity::getId, finalPlanEntity.getId()); + boolean update = maintenancePlanService.update(planEntityLambdaUpdateWrapper); + if (!update) { + log.error("maintenance:generateTask 更新任务派发失败"); + throw new ServiceException("更新任务派发失败"); + } } + } catch (Exception e) { + e.printStackTrace(); } } @@ -117,107 +126,108 @@ public class MaintenanceServiceImpl implements MaintenanceService { @Override @Transactional(rollbackFor = RuntimeException.class) public void findPending(ProcessWorkFlowResponse response) { - log.info("获取businessKey: {}", response.getBusinessKey()); - log.info("获取taskId: {} ", response.getTaskId()); - log.info("获取下一个审批人是: {} ", response.getNextStepOperator()); - log.info("获取下一个用户Id是: {} ", response.getUserId()); - log.info("获取当前任务名称是: {} ", response.getTaskName()); - log.info("获取根据handleType区分是用户还是候选组角色: {}", response.getHandleType()); - //json转换表单 - String formData = JSON.toJSONString(response.getVariables()); - log.info("获取表单的数据:{}", formData); - OperMaintenanceTaskEntityVo standardTicketInfoVo = null; try { - JSONObject jsonObject = JSONObject.parseObject(formData); - standardTicketInfoVo = JSONObject.parseObject(jsonObject.getString("operMaintenanceTaskEntityVo"), - new TypeReference(){}); - // standardTicketInfoVo = (OperMaintenanceTaskEntityVo) jsonObject.get("operMaintenanceTaskEntityVo"); - // standardTicketInfoVo = JSONObject.toJavaObject(jsonObject, OperMaintenanceTaskEntityVo.class); - } catch (Exception e) { - log.error("获取表单出现异常了~~~~"); - throw new IllegalArgumentException(e.getMessage()); - } - //1.查询日常维护信息 - Long id = NumberUtils.toLong(response.getBusinessKey()); - OperMaintenanceTaskEntity dbOperMaintenanceTaskEntity = taskService.getById(id); - if (ObjectUtils.isEmpty(dbOperMaintenanceTaskEntity)) { - log.error("获取日常维护数据不存在"); - return; - } - OperMaintenanceTaskEntity entity = new OperMaintenanceTaskEntity(); - BeanUtils.copyProperties(standardTicketInfoVo, entity); - entity.setId(id); - //填充日常维护信息 - saveOperMaintenanceTaskEntity(entity, response); - entity.setProcessInstanceId(response.getProcessInstanceId()); - taskService.updateById(entity); - - //推送消息 - if (response.getTaskId() != null) { - // MessagePushRecordDto message = new MessagePushRecordDto(); - // message.setBusinessClassify("business"); - // message.setBusinessKey(MessageConstants.BusinessClassifyEnum.OPERATIONTICKETMESSAGE.getKey()); - // message.setSubject(MessageConstants.BusinessClassifyEnum.OPERATIONTICKETMESSAGE.getDescription()); - // message.setTaskId(entity.getId()); - // message.setTenantId("200000"); - // message.setTypes(Arrays.asList(MessageConstants.APP_PUSH, MessageConstants.WS_PUSH)); - // message.setPushType(MessageConstants.IMMEDIATELY); - // //您有一张工作票待审批,工作内容:*****,审批环节:*****; - // String countent = - // "您有一条日常维护任务待审批,工作内容:".concat(entity.getTitle()) - // .concat(",审批环节:") - // .concat(response.getTaskName()); - // message.setContent(countent); - // message.setDeptId(entity.getCreateDept()); - // R deptName = sysClient.getDeptName(entity.getCreateDept()); - // if (deptName.isSuccess()) { - // message.setDeptName(deptName.getData()); - // } - // String userIds = response.getUserId(); - // if (com.hnac.hzims.common.logs.utils.StringUtils.isBlank(userIds)) { - // log.error("推送的消息不能为空哦,{}", userIds); - // return; - // } - // String[] split = userIds.split(","); - // for (String userId : split) { - // message.setPusher(userId); - // User user = UserCache.getUser(NumberUtils.toLong(userId)); - // if (ObjectUtils.isNotEmpty(user)) { - // message.setPusherName(user.getName()); - // } - // message.setAccount(userId); - // message.setCreateUser(NumberUtils.toLong(userId)); - // messageClient.sendMessage(message); - // } - BusinessMessageDTO businessMessageDTO = new BusinessMessageDTO(); - businessMessageDTO.setBusinessClassify("business"); - businessMessageDTO.setBusinessKey(MessageConstants.BusinessClassifyEnum.ROUTINEMAINTENANCE.getKey()); - businessMessageDTO.setSubject(MessageConstants.BusinessClassifyEnum.ROUTINEMAINTENANCE.getDescription()); - businessMessageDTO.setTaskId(dbOperMaintenanceTaskEntity.getId()); - businessMessageDTO.setTenantId("200000"); - //您有一张工作票待审批,工作内容:*****,审批环节:*****; - String countent = - "您有一条日常维护任务待审批,工作内容:".concat(dbOperMaintenanceTaskEntity.getTitle()) - .concat(",审批环节:") - .concat(response.getTaskName()); - businessMessageDTO.setContent(countent); - businessMessageDTO.setDeptId(dbOperMaintenanceTaskEntity.getCreateDept()); - R deptName = sysClient.getDeptName(dbOperMaintenanceTaskEntity.getCreateDept()); - if (deptName.isSuccess()) { - businessMessageDTO.setDeptName(deptName.getData()); + log.info("获取businessKey: {}", response.getBusinessKey()); + log.info("获取taskId: {} ", response.getTaskId()); + log.info("获取下一个审批人是: {} ", response.getNextStepOperator()); + log.info("获取下一个用户Id是: {} ", response.getUserId()); + log.info("获取当前任务名称是: {} ", response.getTaskName()); + log.info("获取根据handleType区分是用户还是候选组角色: {}", response.getHandleType()); + //json转换表单 + String formData = JSON.toJSONString(response.getVariables()); + log.info("获取表单的数据:{}", formData); + OperMaintenanceTaskEntityVo standardTicketInfoVo = null; + try { + JSONObject jsonObject = JSONObject.parseObject(formData); + standardTicketInfoVo = JSONObject.parseObject(jsonObject.getString("operMaintenanceTaskEntityVo"), new TypeReference() { + }); + // standardTicketInfoVo = (OperMaintenanceTaskEntityVo) jsonObject.get("operMaintenanceTaskEntityVo"); + // standardTicketInfoVo = JSONObject.toJavaObject(jsonObject, OperMaintenanceTaskEntityVo.class); + } catch (Exception e) { + log.error("获取表单出现异常了~~~~"); + throw new IllegalArgumentException(e.getMessage()); + } + //1.查询日常维护信息 + Long id = NumberUtils.toLong(response.getBusinessKey()); + OperMaintenanceTaskEntity dbOperMaintenanceTaskEntity = taskService.getById(id); + if (ObjectUtils.isEmpty(dbOperMaintenanceTaskEntity)) { + log.error("获取日常维护数据不存在"); + return; } - String userIds = response.getUserId(); - businessMessageDTO.setUserIds(userIds); - businessMessageDTO.setCreateUser(dbOperMaintenanceTaskEntity.getCreateUser()); - - log.info("================================================"); - log.info("businessMessageDTO = " + businessMessageDTO); - log.info("================================================"); - R booleanR = messageClient.sendAppAndWsMsgByUsers(businessMessageDTO); - if (!booleanR.isSuccess()) { - throw new ServiceException("消息推送失败"); + OperMaintenanceTaskEntity entity = new OperMaintenanceTaskEntity(); + BeanUtils.copyProperties(standardTicketInfoVo, entity); + entity.setId(id); + //填充日常维护信息 + saveOperMaintenanceTaskEntity(entity, response); + entity.setProcessInstanceId(response.getProcessInstanceId()); + taskService.updateById(entity); + + //推送消息 + if (response.getTaskId() != null) { + // MessagePushRecordDto message = new MessagePushRecordDto(); + // message.setBusinessClassify("business"); + // message.setBusinessKey(MessageConstants.BusinessClassifyEnum.OPERATIONTICKETMESSAGE.getKey()); + // message.setSubject(MessageConstants.BusinessClassifyEnum.OPERATIONTICKETMESSAGE.getDescription()); + // message.setTaskId(entity.getId()); + // message.setTenantId("200000"); + // message.setTypes(Arrays.asList(MessageConstants.APP_PUSH, MessageConstants.WS_PUSH)); + // message.setPushType(MessageConstants.IMMEDIATELY); + // //您有一张工作票待审批,工作内容:*****,审批环节:*****; + // String countent = + // "您有一条日常维护任务待审批,工作内容:".concat(entity.getTitle()) + // .concat(",审批环节:") + // .concat(response.getTaskName()); + // message.setContent(countent); + // message.setDeptId(entity.getCreateDept()); + // R deptName = sysClient.getDeptName(entity.getCreateDept()); + // if (deptName.isSuccess()) { + // message.setDeptName(deptName.getData()); + // } + // String userIds = response.getUserId(); + // if (com.hnac.hzims.common.logs.utils.StringUtils.isBlank(userIds)) { + // log.error("推送的消息不能为空哦,{}", userIds); + // return; + // } + // String[] split = userIds.split(","); + // for (String userId : split) { + // message.setPusher(userId); + // User user = UserCache.getUser(NumberUtils.toLong(userId)); + // if (ObjectUtils.isNotEmpty(user)) { + // message.setPusherName(user.getName()); + // } + // message.setAccount(userId); + // message.setCreateUser(NumberUtils.toLong(userId)); + // messageClient.sendMessage(message); + // } + BusinessMessageDTO businessMessageDTO = new BusinessMessageDTO(); + businessMessageDTO.setBusinessClassify("business"); + businessMessageDTO.setBusinessKey(MessageConstants.BusinessClassifyEnum.ROUTINEMAINTENANCE.getKey()); + businessMessageDTO.setSubject(MessageConstants.BusinessClassifyEnum.ROUTINEMAINTENANCE.getDescription()); + businessMessageDTO.setTaskId(dbOperMaintenanceTaskEntity.getId()); + businessMessageDTO.setTenantId("200000"); + //您有一张工作票待审批,工作内容:*****,审批环节:*****; + String countent = "您有一条日常维护任务待审批,工作内容:".concat(dbOperMaintenanceTaskEntity.getTitle()).concat(",审批环节:").concat(response.getTaskName()); + businessMessageDTO.setContent(countent); + businessMessageDTO.setDeptId(dbOperMaintenanceTaskEntity.getCreateDept()); + R deptName = sysClient.getDeptName(dbOperMaintenanceTaskEntity.getCreateDept()); + if (deptName.isSuccess()) { + businessMessageDTO.setDeptName(deptName.getData()); + } + String userIds = response.getUserId(); + businessMessageDTO.setUserIds(userIds); + businessMessageDTO.setCreateUser(dbOperMaintenanceTaskEntity.getCreateUser()); + + log.info("================================================"); + log.info("businessMessageDTO = " + businessMessageDTO); + log.info("================================================"); + R booleanR = messageClient.sendAppAndWsMsgByUsers(businessMessageDTO); + if (!booleanR.isSuccess()) { + throw new ServiceException("消息推送失败"); + } + log.info("推送成功~"); } - log.info("推送成功~"); + } catch (Exception e) { + e.printStackTrace(); } } @@ -281,6 +291,9 @@ public class MaintenanceServiceImpl implements MaintenanceService { * @param finalPlanEntity */ private void fillTask(OperMaintenanceTaskEntity taskEntity, OperMaintenancePlanEntity finalPlanEntity) { + DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition(); + defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); + TransactionStatus transaction = dataSourceTransactionManager.getTransaction(defaultTransactionDefinition); taskEntity.setId(null); taskEntity.setCreateTime(new Date()); taskEntity.setUpdateTime(new Date()); @@ -299,8 +312,7 @@ public class MaintenanceServiceImpl implements MaintenanceService { if (ObjectUtil.isNotEmpty(finalPlanEntity.getMaintenanceModel()) && finalPlanEntity.getMaintenanceModel() == 2) { //查询值班信息 LambdaQueryWrapper entityLambdaQueryWrapper = new LambdaQueryWrapper<>(); - entityLambdaQueryWrapper.eq(ImsDutyMainEntity::getDutyDate, - DateTimeFormatter.ofPattern(PATTERN_DATE).format(disposeTime)); + entityLambdaQueryWrapper.eq(ImsDutyMainEntity::getDutyDate, DateTimeFormatter.ofPattern(PATTERN_DATE).format(disposeTime)); entityLambdaQueryWrapper.eq(ImsDutyMainEntity::getClassId, finalPlanEntity.getImsDutyClassId()); ImsDutyMainEntity entity = mainService.getOne(entityLambdaQueryWrapper); if (ObjectUtil.isNotEmpty(entity) && StringUtils.isNotEmpty(entity.getDutyPersonIds())) { @@ -312,16 +324,40 @@ public class MaintenanceServiceImpl implements MaintenanceService { } } taskService.save(taskEntity); - //生成工作流实例 - String processInstanceId = this.startProcess(finalPlanEntity.getProcDefId(), taskEntity); - taskEntity.setProcessInstanceId(processInstanceId); - taskService.updateById(taskEntity); - finalPlanEntity.setCreateTaskTime(new Date()); - maintenancePlanService.updateById(finalPlanEntity); + dataSourceTransactionManager.commit(transaction); + + OperMaintenanceTaskEntity[] finalTaskEntity = {taskEntity}; + + CompletableFuture processInstanceIdCompletableFuture = CompletableFuture.supplyAsync(() -> { + //生成工作流实例 + String processInstanceId = this.startProcess(finalPlanEntity.getProcDefId(), finalTaskEntity[0]); + return processInstanceId; + }, executor); + + //启动流程 + CompletableFuture operMaintenanceTaskEntityCompletableFuture = processInstanceIdCompletableFuture.thenApplyAsync((processInstanceId) -> { + finalTaskEntity[0].setProcessInstanceId(processInstanceId); + taskService.updateById(finalTaskEntity[0]); + finalPlanEntity.setCreateTaskTime(new Date()); + maintenancePlanService.updateById(finalPlanEntity); + finalTaskEntity[0] = taskService.getById(finalTaskEntity[0].getId()); + return finalTaskEntity[0]; + }, executor); - taskEntity = taskService.getById(taskEntity.getId()); - //推送消息 - this.pushTaskMessage(taskEntity); + + CompletableFuture thennedAcceptAsync = operMaintenanceTaskEntityCompletableFuture.thenAcceptAsync((task) -> { + //推送消息 + this.pushTaskMessage(task); + }, executor); + + + //启动队列 + try { + CompletableFuture.allOf(processInstanceIdCompletableFuture, operMaintenanceTaskEntityCompletableFuture, + thennedAcceptAsync).get(); + } catch (Exception e) { + e.printStackTrace(); + } } @@ -343,10 +379,7 @@ public class MaintenanceServiceImpl implements MaintenanceService { params.put("initUserIds", taskUsers); params.put("operMaintenanceTaskEntityVo", operMaintenanceTaskEntityVo); - return flowClient.startProcessInstanceContainNameByKey(processDefinitionKey, - String.valueOf(taskEntity.getId()), taskEntity.getTitle(), params) - .getData() - .getProcessInstanceId(); + return flowClient.startProcessInstanceContainNameByKey(processDefinitionKey, String.valueOf(taskEntity.getId()), taskEntity.getTitle(), params).getData().getProcessInstanceId(); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/propperties/ThreadPoolConfigProperties.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/propperties/ThreadPoolConfigProperties.java new file mode 100644 index 0000000..7a949bc --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/propperties/ThreadPoolConfigProperties.java @@ -0,0 +1,32 @@ +package com.hnac.hzims.operational.propperties; + +import lombok.Data; +import org.springframework.context.annotation.Configuration; + +/** + * + * @Author WL + * @Version v1.0 + * @Serial 1.0 + * @Date 2023/5/10 12:51 + */ +@Configuration +@Data +public class ThreadPoolConfigProperties { + /** + * 核心数 + */ + private Integer corePoolSize = 20; + /** + * 最大数 + */ + private Integer maxSize = 200; + /** + * 存活时间 + */ + private Integer keepAliveTime = 20; + /** + * 容量 + */ + private Integer capacity = 10000; +} \ No newline at end of file From 52a47479748053a0488526dc790d57adb18cc66c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Fri, 14 Jul 2023 11:37:17 +0800 Subject: [PATCH 19/21] =?UTF-8?q?=E6=97=A5=E5=B8=B8=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=94=B9=E6=88=90=E5=BC=82=E6=AD=A5=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=89=A7=E8=A1=8C=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/MaintenanceServiceImpl.java | 41 ++++++++-------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java index 12f48bb..2031df8 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java @@ -89,6 +89,7 @@ public class MaintenanceServiceImpl implements MaintenanceService { * @param ids */ @Override + @Transactional(rollbackFor = Exception.class) public void createTask(List ids) { try { //获取日常维护计划 @@ -325,36 +326,22 @@ public class MaintenanceServiceImpl implements MaintenanceService { } taskService.save(taskEntity); dataSourceTransactionManager.commit(transaction); - - OperMaintenanceTaskEntity[] finalTaskEntity = {taskEntity}; - - CompletableFuture processInstanceIdCompletableFuture = CompletableFuture.supplyAsync(() -> { - //生成工作流实例 - String processInstanceId = this.startProcess(finalPlanEntity.getProcDefId(), finalTaskEntity[0]); - return processInstanceId; - }, executor); - //启动流程 - CompletableFuture operMaintenanceTaskEntityCompletableFuture = processInstanceIdCompletableFuture.thenApplyAsync((processInstanceId) -> { - finalTaskEntity[0].setProcessInstanceId(processInstanceId); - taskService.updateById(finalTaskEntity[0]); - finalPlanEntity.setCreateTaskTime(new Date()); - maintenancePlanService.updateById(finalPlanEntity); - finalTaskEntity[0] = taskService.getById(finalTaskEntity[0].getId()); - return finalTaskEntity[0]; - }, executor); - - - CompletableFuture thennedAcceptAsync = operMaintenanceTaskEntityCompletableFuture.thenAcceptAsync((task) -> { - //推送消息 - this.pushTaskMessage(task); - }, executor); - - + String processInstanceId = this.startProcess(finalPlanEntity.getProcDefId(), taskEntity); + //推送消息 + CompletableFuture operMaintenanceTaskEntityCompletableFuture = + CompletableFuture.runAsync(() -> { + taskEntity.setProcessInstanceId(processInstanceId); + taskService.updateById(taskEntity); + finalPlanEntity.setCreateTaskTime(new Date()); + maintenancePlanService.updateById(finalPlanEntity); + OperMaintenanceTaskEntity maintenanceTask = taskService.getById(taskEntity.getId()); + //推送消息 + this.pushTaskMessage(maintenanceTask); + }, executor); //启动队列 try { - CompletableFuture.allOf(processInstanceIdCompletableFuture, operMaintenanceTaskEntityCompletableFuture, - thennedAcceptAsync).get(); + CompletableFuture.allOf(operMaintenanceTaskEntityCompletableFuture).get(); } catch (Exception e) { e.printStackTrace(); } From 121c5f7d54ecea1e5a36c3582b9739ebd78792a3 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Fri, 14 Jul 2023 15:20:28 +0800 Subject: [PATCH 20/21] =?UTF-8?q?#=E9=A3=8E=E7=94=B5=E9=A9=BE=E9=A9=B6?= =?UTF-8?q?=E8=88=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/operational/main/vo/WindScoreVo.java | 6 - .../operational/main/vo/WindSubordinateVo.java | 45 ++++ .../main/controller/WindHomeController.java | 12 +- .../operational/main/service/WindHomeService.java | 7 +- .../main/service/impl/WindHomeServiceImpl.java | 242 +++++++++++++++------ 5 files changed, 236 insertions(+), 76 deletions(-) create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindSubordinateVo.java diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindScoreVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindScoreVo.java index d245f36..8493839 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindScoreVo.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindScoreVo.java @@ -15,12 +15,6 @@ import java.util.List; @ApiModel(value = "风电集团/区域指标对象") public class WindScoreVo { - @ApiModelProperty(value = "机构Id") - private Long departId; - - @ApiModelProperty(value = "机构名称") - private String departName; - @ApiModelProperty(value = "站点数量") private Integer stationCount; diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindSubordinateVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindSubordinateVo.java new file mode 100644 index 0000000..f8aad18 --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindSubordinateVo.java @@ -0,0 +1,45 @@ +package com.hnac.hzims.operational.main.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.NullSerializer; +import com.hnac.hzims.hzimsweather.response.weather.Daily; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author ysj + */ +@Data +@ApiModel(value = "风电集团/区域占比") +public class WindSubordinateVo { + + @ApiModelProperty(value = "机构Id") + private Long departId; + + @ApiModelProperty(value = "机构名称") + private String departName; + + @ApiModelProperty(value = "温度") + private String temp; + + @ApiModelProperty(value = "天气") + private List weather; + + @ApiModelProperty(value = "发电量") + private Double generation; + + @ApiModelProperty(value = "集团/区域发电占比") + private Double generationRate; + + @ApiModelProperty(value = "发电完成率") + private Double generationComplete; + + @ApiModelProperty(value = "风机利用率") + private Double fanUse; + + @ApiModelProperty(value = "厂用电率") + private Double factoryUse; +} diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/WindHomeController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/WindHomeController.java index 27410cf..afaee0e 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/WindHomeController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/WindHomeController.java @@ -35,10 +35,18 @@ public class WindHomeController extends BladeController { return R.data(service.KPIs(deptId)); } + @ApiLog + @ApiOperation("风电站集团/区域占比") + @GetMapping("/subordinate") + @ApiOperationSupport(order = 2) + public R> subordinate(@ApiParam(value = "站点机构ID") Long deptId) { + return R.data(service.subordinate(deptId)); + } + @ApiLog @ApiOperation("风电站点指标数据") @GetMapping("/station") - @ApiOperationSupport(order = 2) + @ApiOperationSupport(order = 3) public R station(@ApiParam(value = "站点机构ID") Long deptId) { return R.data(service.station(deptId)); } @@ -46,7 +54,7 @@ public class WindHomeController extends BladeController { @ApiLog @ApiOperation("风电站点发电量") @GetMapping("/generation") - @ApiOperationSupport(order = 3) + @ApiOperationSupport(order = 4) public R> generation(@ApiParam(value = "站点机构ID") Long deptId) { return R.data(service.generation(deptId)); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/WindHomeService.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/WindHomeService.java index 1c53ea3..cc73703 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/WindHomeService.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/WindHomeService.java @@ -1,9 +1,6 @@ package com.hnac.hzims.operational.main.service; -import com.hnac.hzims.operational.main.vo.WindGenerationVo; -import com.hnac.hzims.operational.main.vo.WindScoreVo; -import com.hnac.hzims.operational.main.vo.WindStationVo; -import com.hnac.hzims.operational.main.vo.WindTargetCurveVo; +import com.hnac.hzims.operational.main.vo.*; import java.util.List; @@ -20,4 +17,6 @@ public interface WindHomeService { List generation(Long deptId); List target_curve(Long deptId); + + List subordinate(Long deptId); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java index 90c0786..b40bc9a 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java @@ -7,9 +7,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; import com.hnac.hzims.hzimsweather.response.weather.Daily; import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherDailyResponse; +import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherNowResponse; import com.hnac.hzims.operational.fill.entity.WindEntity; import com.hnac.hzims.operational.fill.service.WindService; import com.hnac.hzims.operational.main.constant.HomePageConstant; +import com.hnac.hzims.operational.main.service.AreaService; import com.hnac.hzims.operational.main.service.IWeatherService; import com.hnac.hzims.operational.main.service.WindHomeService; import com.hnac.hzims.operational.main.vo.*; @@ -21,7 +23,8 @@ import org.apache.commons.collections4.MapUtils; import org.springblade.core.tool.utils.CollectionUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.ObjectUtil; -import org.springblade.server.domain.Sys; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.system.entity.Dept; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -43,6 +46,8 @@ public class WindHomeServiceImpl implements WindHomeService { private final WindService windService; + private final AreaService areaService; + private final IWeatherService weatherService; private final IStationService stationService; @@ -63,32 +68,183 @@ public class WindHomeServiceImpl implements WindHomeService { eq(StationEntity::getServeType, HomePageConstant.HYDROPOWER_SERVETYPE); eq(StationEntity::getType,HomePageConstant.WIND_POWER); }}); - if(CollectionUtil.isNotEmpty(stations)){ + if(CollectionUtil.isEmpty(stations)){ return new WindScoreVo(); } - // 查询站点年填报数据 - List years = windService.list(new LambdaQueryWrapper() {{ - like(WindEntity::getFillDate, DateUtil.format(new Date(),"yyyy")); - in(WindEntity::getStationCode,stations.stream().map(StationEntity::getCode).collect(Collectors.toList())); - }}); - // 查询站点月填报数据 - List mons = windService.list(new LambdaQueryWrapper() {{ - like(WindEntity::getFillDate, DateUtil.format(new Date(),"yyyy-MM")); - in(WindEntity::getStationCode,stations.stream().map(StationEntity::getCode).collect(Collectors.toList())); - }}); - // 查询站点日填报数据 - List days = windService.list(new LambdaQueryWrapper() {{ - like(WindEntity::getFillDate, DateUtil.format(new Date(), DateUtil.format(new Date(),DateUtil.PATTERN_DATE))); + // 查询站点填报数据 + List winds = windService.list(new LambdaQueryWrapper() {{ in(WindEntity::getStationCode,stations.stream().map(StationEntity::getCode).collect(Collectors.toList())); }}); WindScoreVo score = new WindScoreVo(); + // 站点数量 score.setStationCount(stations.size()); - this.year(years,score); - this.mon(mons,score); - this.days(days,score); + if(CollectionUtil.isEmpty(winds)){ + return score; + } + // 装机容量 + List devices = JSONObject.parseObject(redisTemplate.opsForValue().get(device_cache_final).toString(), new TypeReference>() {}); + if(CollectionUtil.isNotEmpty(devices)){ + score.setInstalledCapacity(devices.stream().filter(o->stations.stream().map(StationEntity::getRefDept).collect(Collectors.toList()).contains(o.getCreateDept())).mapToDouble(EminfoAndEmParamVo::getInstalledCapacity).sum()); + } + // 年发电量 + score.setGenerateYear(winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy"))).mapToDouble(WindEntity::getPower).sum()); + // 年计划发电量 + score.setPlanYear(winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy"))).mapToDouble(WindEntity::getPlan).sum()); + // 年发电完成率 + if(Math.abs(score.getGenerateYear()) > 0 && Math.abs(score.getPlanYear()) > 0){ + score.setCompleteRate(BigDecimal.valueOf(score.getGenerateYear() / score.getPlanYear() * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); + } + // 月发电量 + score.setGenerateMon(winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(WindEntity::getPower).sum()); + // 月平均风速 + score.setSpeedRate(winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(WindEntity::getSpeed).average().getAsDouble()); + // 月短期准确率 + score.setAccuracy(winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(WindEntity::getAccuracy).average().getAsDouble()); + // 月超短期准确率 + score.setUltraShortAccuracyRate(winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(WindEntity::getUltraShortAccuracy).average().getAsDouble()); + // 日发电量 + score.setGenerateDay(winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),DateUtil.PATTERN_DATE))).mapToDouble(WindEntity::getPower).sum()); + // 近年发电量 + score.setPowerYearVoList(this.threeGenerateYear(winds)); + // 计划发电完成率 + score.setPowerMonthVoList(this.currentGenerateCurve(winds)); return score; } + /** + * 近3年发电量 + * @param winds + * @return + */ + private List threeGenerateYear(List winds) { + List mons = this.mons(2,12,false); + // 月份发电量赋值 + List list = mons.stream().map(mon->{ + PowerMonthVo power = new PowerMonthVo(); + LocalDate localDate = LocalDate.parse(DateUtil.format(new Date(), mon), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATE)); + power.setYear(localDate.getYear()); + power.setStrMonth(localDate.getMonthValue() > 9 ? String.valueOf(localDate.getMonthValue()) : "0" + localDate.getMonthValue()); + power.setPower((float) winds.stream().filter(o->o.getFillDate().contains(localDate.getYear() + "-" + power.getStrMonth())).mapToDouble(WindEntity::getPower).sum()); + return power; + }).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(list)){ + return new ArrayList<>(); + } + // 转换年份分组 + return list.stream().collect(Collectors.groupingBy(PowerMonthVo::getYear)).entrySet().stream().map(entry->{ + PowerYearVo year = new PowerYearVo(); + year.setYear(entry.getKey()); + year.setPowerMonthVoList(entry.getValue()); + return year; + }).collect(Collectors.toList()); + } + + /** + * 年发电量趋势 + * @param winds + * @return + */ + private List currentGenerateCurve(List winds) { + List mons = this.mons(0,12,false); + return mons.stream().map(mon->{ + PowerMonthVo power = new PowerMonthVo(); + LocalDate localDate = LocalDate.parse(DateUtil.format(new Date(), mon), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATE)); + power.setYear(localDate.getYear()); + power.setStrMonth(localDate.getMonthValue() > 9 ? String.valueOf(localDate.getMonthValue()) : "0" + localDate.getMonthValue()); + power.setPlanPower((float) winds.stream().filter(o->o.getFillDate().contains(localDate.getYear() + "-" + power.getStrMonth())).mapToDouble(WindEntity::getPlan).sum()); + power.setPower((float) winds.stream().filter(o->o.getFillDate().contains(localDate.getYear() + "-" + power.getStrMonth())).mapToDouble(WindEntity::getPower).sum()); + return power; + }).collect(Collectors.toList()); + } + + /** + * 风电站集团/区域占比 + * @param deptId + * @return + */ + @Override + public List subordinate(Long deptId) { + Map> areas = areaService.areaOrStaion(deptId, Collections.singletonList(HomePageConstant.WIND_POWER)); + if (MapUtils.isEmpty(areas)) { + return new ArrayList<>(); + } + // 风电站填报数据查询 + List codes = new ArrayList<>(); + areas.forEach((key,value)-> codes.addAll(value.stream().map(StationEntity::getCode).collect(Collectors.toList()))); + List winds = windService.list(new LambdaQueryWrapper() {{ + in(WindEntity::getStationCode,codes) + .like(WindEntity::getFillDate,DateUtil.format(new Date(),"yyyy")); + }}); + // 获取站点编码集合 + List stations = areas.values().stream().map(values -> values.get(0).getCode()).collect(Collectors.toList()); + // 获取站点实时天气 + Map nowWeather = this.weatherService.getNowWeather(stations); + // 获取站点7日天气 + Map weekWeather = this.weatherService.getWeekWeather(stations); + return areas.entrySet().stream().map(entry -> { + WindSubordinateVo subordinate = new WindSubordinateVo(); + // 机构Id + subordinate.setDepartId(entry.getKey().getId()); + // 机构名称 + subordinate.setDepartName(entry.getKey().getDeptName()); + // 天气 + this.getAreaWearther(subordinate, nowWeather, weekWeather, entry.getValue().get(0).getCode()); + if(CollectionUtil.isNotEmpty(winds)){ + List piece = winds.stream().filter(o->entry.getValue().stream().map(StationEntity::getCode).collect(Collectors.toList()).contains(o.getStationCode())).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(piece)){ + return subordinate; + } + // 发电量 + subordinate.setGeneration(piece.stream().mapToDouble(WindEntity::getPower).sum()); + // 集团发电占比 + if(Math.abs(subordinate.getGeneration()) > 0 && Math.abs(winds.stream().mapToDouble(WindEntity::getPower).sum()) > 0){ + subordinate.setGenerationRate(BigDecimal.valueOf(subordinate.getGeneration() / winds.stream().mapToDouble(WindEntity::getPower).sum() * 100).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); + } + // 发电完成率 + double plan = piece.stream().mapToDouble(WindEntity::getPlan).sum(); + if(Math.abs(subordinate.getGeneration()) > 0 && Math.abs(plan) > 0){ + subordinate.setGenerationComplete(BigDecimal.valueOf(subordinate.getGeneration() / plan * 100).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); + } + // 风机利用率 : (总时间 - 故障时间) / 总时间 + double fault = piece.stream().mapToDouble(WindEntity::getFaultHours).sum(); + if(Math.abs(fault) > 0 ){ + subordinate.setFanUse(BigDecimal.valueOf(fault / (30 * 24) * 100).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); + } + // 厂用电率 : (发电量-上网电量+下网电量)/发电量 + double surf = piece.stream().mapToDouble(WindEntity::getSurfPower).sum(); + double below = piece.stream().mapToDouble(WindEntity::getBelowPower).sum(); + if(Math.abs(subordinate.getGeneration()) > 0 && Math.abs(surf + below) > 0){ + subordinate.setFactoryUse(BigDecimal.valueOf(subordinate.getGeneration() - surf + below / subordinate.getGeneration() * 100).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); + } + } + return subordinate; + }).sorted(Comparator.comparing(WindSubordinateVo::getGeneration).reversed()).collect(Collectors.toList()); + } + + /** + * 区域天气 + * @param scale + * @param nowWeather + * @param weekWeather + * @param code + */ + private void getAreaWearther(WindSubordinateVo scale,Map nowWeather, Map weekWeather, String code) { + // 实时天气 + if(MapUtils.isNotEmpty(nowWeather) && nowWeather.containsKey(code)){ + HeWeatherWeatherNowResponse nowData = nowWeather.get(code); + if(ObjectUtil.isNotEmpty(nowData.getNow())){ + scale.setTemp(nowData.getNow().getTemp()); + } + } + // 站点七日内天气 + if(MapUtils.isNotEmpty(weekWeather) && weekWeather.containsKey(code)){ + HeWeatherWeatherDailyResponse weekData = weekWeather.get(code); + List dailyList = weekData.getDaily(); + if (CollectionUtil.isNotEmpty(dailyList)) { + scale.setWeather(dailyList); + } + } + } /** * 站点指标数据 @@ -109,7 +265,10 @@ public class WindHomeServiceImpl implements WindHomeService { // 机构名称 wind.setDepartName(station.getName()); // 站点行政区域编码 - wind.setAreaCode(station.getAreaCode()); + if(!StringUtil.isEmpty(station.getAreaCode())){ + String[] code = station.getAreaCode().split(","); + wind.setAreaCode(code[code.length - 1]); + } // 站点七天天气 Map weekWeather = weatherService.getWeekWeather(Collections.singletonList(station.getCode())); wind.setWeather(this.getDailyList(weekWeather,station.getCode())); @@ -243,51 +402,6 @@ public class WindHomeServiceImpl implements WindHomeService { } /** - * 风电数据 - 年 - * @param years - * @param score - */ - private void year(List years, WindScoreVo score) { - if(CollectionUtil.isNotEmpty(years)){ - return; - } - // 年发电量 - score.setGenerateYear(years.stream().mapToDouble(WindEntity::getPower).sum()); - // 年计划发电量 - score.setPlanYear(years.stream().mapToDouble(WindEntity::getPlan).sum()); - // 年发电完成率 - if(Math.abs(score.getGenerateYear()) > 0 && Math.abs(score.getPlanYear()) > 0){ - score.setSpeedRate(BigDecimal.valueOf(score.getGenerateYear() / score.getPlanYear() * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); - } - } - - /** - * 风电数据 - 月 - * @param mons - * @param score - */ - private void mon(List mons, WindScoreVo score) { - // 月发电量 - score.setGenerateMon(mons.stream().mapToDouble(WindEntity::getPower).sum()); - // 月平均风速 - score.setSpeedRate(mons.stream().mapToDouble(WindEntity::getSpeed).average().getAsDouble()); - // 月短期准确率 - score.setAccuracy(mons.stream().mapToDouble(WindEntity::getAccuracy).average().getAsDouble()); - // 月超短期准确率 - score.setUltraShortAccuracyRate(mons.stream().mapToDouble(WindEntity::getUltraShortAccuracy).average().getAsDouble()); - } - - /** - * 风电数据 - 日 - * @param days - * @param score - */ - private void days(List days, WindScoreVo score) { - // 日发电量 - score.setGenerateDay(days.stream().mapToDouble(WindEntity::getPower).sum()); - } - - /** * 获取近年月份集合 * @param year * @return From f435b4832764c5fab2e4765ab8d796d85f787794 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Fri, 14 Jul 2023 17:00:13 +0800 Subject: [PATCH 21/21] =?UTF-8?q?#=E9=A3=8E=E7=94=B5=E9=A9=BE=E9=A9=B6?= =?UTF-8?q?=E8=88=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operational/main/vo/WindSubordinateVo.java | 14 ++++++++++++++ .../main/service/impl/WindHomeServiceImpl.java | 22 +++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindSubordinateVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindSubordinateVo.java index f8aad18..55c8142 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindSubordinateVo.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/WindSubordinateVo.java @@ -22,6 +22,20 @@ public class WindSubordinateVo { @ApiModelProperty(value = "机构名称") private String departName; + @ApiModelProperty(value = "地市编码") + private String areaCode; + + @ApiModelProperty(value = "地市名称") + private String areaName; + + @ApiModelProperty("经度(东经)") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Float lgtd; + + @ApiModelProperty("纬度(北纬)") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Float lttd; + @ApiModelProperty(value = "温度") private String temp; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java index b40bc9a..f98e394 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java @@ -20,11 +20,14 @@ import com.hnac.hzims.operational.station.service.IStationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; +import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.CollectionUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.core.tool.utils.StringUtil; import org.springblade.system.entity.Dept; +import org.springblade.system.entity.Region; +import org.springblade.system.feign.ISysClient; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -54,6 +57,8 @@ public class WindHomeServiceImpl implements WindHomeService { private final RedisTemplate redisTemplate; + private final ISysClient sysClient; + public final static String device_cache_final = "hzims:equipment:emInfo:deviceCode.emInfoList"; /** @@ -183,6 +188,20 @@ public class WindHomeServiceImpl implements WindHomeService { Map weekWeather = this.weatherService.getWeekWeather(stations); return areas.entrySet().stream().map(entry -> { WindSubordinateVo subordinate = new WindSubordinateVo(); + // 获取第一个站点经纬度、行政编码信息 + StationEntity station = entry.getValue().get(0); + subordinate.setLttd(station.getLttd()); + subordinate.setLgtd(station.getLgtd()); + // 省市编码 + String areaCode = station.getAreaCode(); + subordinate.setAreaCode(areaCode); + if (!StringUtil.isEmpty(areaCode)) { + String[] arrCode = areaCode.split(","); + R R = sysClient.getRegion(arrCode[1]); + if (R.isSuccess() && ObjectUtil.isNotEmpty(R.getData())) { + subordinate.setAreaName(R.getData().getName()); + } + } // 机构Id subordinate.setDepartId(entry.getKey().getId()); // 机构名称 @@ -218,7 +237,8 @@ public class WindHomeServiceImpl implements WindHomeService { } } return subordinate; - }).sorted(Comparator.comparing(WindSubordinateVo::getGeneration).reversed()).collect(Collectors.toList()); + }).filter(o-> Math.abs(o.getGeneration()) > 0 || Math.abs(o.getGenerationRate()) > 0 || Math.abs(o.getGenerationComplete()) > 0 + || Math.abs(o.getFactoryUse()) > 0 || Math.abs(o.getFanUse()) > 0 ).sorted(Comparator.comparing(WindSubordinateVo::getGeneration).reversed()).collect(Collectors.toList()); } /**