Browse Source

Merge remote-tracking branch 'remotes/origin/dev_fegin_concurrent' into pingyin_master

# Conflicts:
#	epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java
#	epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
#	epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java
master
jianjun 3 years ago
parent
commit
e23c7b6a91
  1. 8
      epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.23__party_publish_Time.sql
  2. 8
      epmet-auth/src/main/resources/bootstrap.yml
  3. 103
      epmet-cloud-generator/src/main/resources/template/index.vue.vm
  4. 17
      epmet-commons/epmet-commons-feignclient/src/main/java/com/epmet/commons/feignclient/dtos/result/JiMuReportBriefResultDTO.java
  5. 8
      epmet-commons/epmet-commons-feignclient/src/main/java/com/epmet/commons/feignclient/feigns/JiMuReportOpenFeignClient.java
  6. 7
      epmet-commons/epmet-commons-feignclient/src/main/java/com/epmet/commons/feignclient/feigns/fallback/JiMuReportOpenFeignClientFallback.java
  7. 10
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/ConsomerGroupConstants.java
  8. 7
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/TopicConstants.java
  9. 23
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/PartyMeetingMessageMQMsg.java
  10. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java
  11. 4
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/CoveragePlaceTypeEnum.java
  12. 6
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/EventEnum.java
  13. 27
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/IdCardTypeEnum.java
  14. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  15. 55
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java
  16. 15
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  17. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/user/LoginUserUtil.java
  18. 7
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java
  19. 155
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/IdCardRegexUtils.java
  20. 51
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/converter/EasyExcelDateConverter.java
  21. 17
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/IcPointNucleicMonitoringDao.java
  22. 17
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/IcPointVaccinesInoculationDao.java
  23. 77
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/epmetuser/IcPointNucleicMonitoringEntity.java
  24. 102
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/epmetuser/IcPointVaccinesInoculationEntity.java
  25. 10
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java
  26. 48
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java
  27. 22
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java
  28. 4
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/UserBaseInfoDao.xml
  29. 2
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml
  30. 11
      epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java
  31. 39
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/IcSocietyOrgDTO.java
  32. 81
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/WorkdiaryServiceTypeDTO.java
  33. 19
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/AddSocietyOrgFormDTO.java
  34. 17
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/EditSocietyOrgFormDTO.java
  35. 2
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiVolunteerAuthenticateFormDTO.java
  36. 38
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/workdiaryservice/WorkdiaryServiceQueryFormDTO.java
  37. 8
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/GetListSocietyOrgResultDTO.java
  38. 8
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/SocietyOrgListResultDTO.java
  39. 143
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/WorkdiaryServiceRecordDTO.java
  40. 9
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java
  41. 7
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java
  42. 171
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java
  43. 19
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcUserDemandRecController.java
  44. 8
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java
  45. 317
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkdiaryServiceController.java
  46. 4
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/IcSocietyOrgDao.java
  47. 16
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/WorkdiaryServiceRecordDao.java
  48. 23
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/WorkdiaryServiceTypeDao.java
  49. 9
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/IcSocietyOrgEntity.java
  50. 98
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/WorkdiaryServiceRecordEntity.java
  51. 44
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/WorkdiaryServiceTypeEntity.java
  52. 51
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/WorkdiaryServiceTypeExcel.java
  53. 27
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExcel.java
  54. 42
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExportExcel.java
  55. 74
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgImportExcelDTO.java
  56. 78
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/WorkdiaryServiceRecordExcel.java
  57. 59
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/converter/WorkDiaryServiceEasyExcelDateConverter.java
  58. 157
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/handler/IcSocietyOrgExcelImportListener.java
  59. 54
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/listener/WorkdiaryServiceImportListener.java
  60. 30
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/redis/WorkdiaryServiceRecordRedis.java
  61. 30
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/redis/WorkdiaryServiceTypeRedis.java
  62. 10
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcSocietyOrgService.java
  63. 11
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcUserDemandRecService.java
  64. 96
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/WorkdiaryServiceRecordService.java
  65. 81
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/WorkdiaryServiceTypeService.java
  66. 244
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcSocietyOrgServiceImpl.java
  67. 31
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcUserDemandRecServiceImpl.java
  68. 569
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkdiaryServiceRecordServiceImpl.java
  69. 156
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkdiaryServiceTypeServiceImpl.java
  70. 47
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/db/migration/V0.0.28__workdiary_service.sql
  71. 13
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/IcSocietyOrgDao.xml
  72. 31
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/WorkdiaryServiceRecordDao.xml
  73. 27
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/WorkdiaryServiceTypeDao.xml
  74. BIN
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/societyorg_import_template.xlsx
  75. BIN
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/workdiary_service_import.xlsx
  76. 5
      epmet-module/epmet-job/epmet-job-server/pom.xml
  77. 17
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/PliPowerService.java
  78. 31
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/PliPowerServiceImpl.java
  79. 36
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/AutoPublishIcPartyActTask.java
  80. 31
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/EnterprisePatrolRemindTask.java
  81. 37
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/NoticePartyActAutoPublishTask.java
  82. 41
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/PliVisitorLogoutTask.java
  83. 35
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/ic/IcUpdateYlfnTask.java
  84. 7
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SmsTemplateConstant.java
  85. 12
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SystemMessageType.java
  86. 104
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/IcMessageDTO.java
  87. 66
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/IcMessageFormDTO.java
  88. 19
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/IcMessageListFormDTO.java
  89. 18
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/ReadIcMessageFormDTO.java
  90. 12
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/feign/EpmetMessageOpenFeignClient.java
  91. 11
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/feign/fallback/EpmetMessageOpenFeignClientFallback.java
  92. 105
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/controller/IcMessageController.java
  93. 27
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/dao/IcMessageDao.java
  94. 74
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/IcMessageEntity.java
  95. 78
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/IcMessageService.java
  96. 116
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/IcMessageServiceImpl.java
  97. 11
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SystemMessageServiceImpl.java
  98. 20
      epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.19__create_ic_message.sql
  99. 2
      epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.20__alter_ic_message.sql
  100. 40
      epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/IcMessageDao.xml

8
epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.23__party_publish_Time.sql

@ -0,0 +1,8 @@
INSERT INTO `epmet_admin`.`sys_dict_type` (`id`, `dict_type`, `dict_name`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1560458000894500866', 'icpartyact_auto_publish_time', '党组织活动自动发布时间', '党组织活动自动发布时间', 35, 0, 0, '1', '2022-08-19 10:45:54', '1', '2022-08-19 10:46:11');
INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1560458233091170305', 1560458000894500866, '活动开始前1天', '1', '0', '活动开始前1天', 1, 0, 0, '1', '2022-08-19 10:46:49', '1', '2022-08-19 10:46:49');
INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1560458276439302146', 1560458000894500866, '活动开始前3天', '3', '0', '活动开始前3天', 2, 0, 0, '1', '2022-08-19 10:47:00', '1', '2022-08-19 10:47:00');
INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1560458332076744705', 1560458000894500866, '活动开始前5天', '5', '0', '活动开始前5天', 3, 0, 0, '1', '2022-08-19 10:47:13', '1', '2022-08-19 10:47:13');
INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1560458388007788545', 1560458000894500866, '活动开始前7天', '7', '0', '活动开始前7天', 4, 0, 0, '1', '2022-08-19 10:47:26', '1', '2022-08-19 10:47:26');
INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1561627442626142210', 1560458000894500866, '现在发布', '0', '0', '', 5, 0, 0, '1', '2022-08-22 16:12:51', '1', '2022-08-22 16:12:51');

8
epmet-auth/src/main/resources/bootstrap.yml

@ -91,6 +91,12 @@ hystrix:
isolation:
thread:
timeoutInMilliseconds: 60000 #缺省为1000
threadpool:
default:
coreSize: 20
maximumSize: 50
maxQueueSize: 500
queueSizeRejectionThreshold: 200
ribbon:
ReadTimeout: 300000
@ -178,4 +184,4 @@ thread:
queueCapacity: @thread.threadPool.queue-capacity@
keepAliveSeconds: @thread.threadPool.keep-alive-seconds@
threadNamePrefix: @thread.threadPool.thread-name-prefix@
rejectedExecutionHandler: @thread.threadPool.rejected-execution-handler@
rejectedExecutionHandler: @thread.threadPool.rejected-execution-handler@

103
epmet-cloud-generator/src/main/resources/template/index.vue.vm

@ -1,52 +1,52 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-${moduleName}__${pathName}}">
<div class="mod-${moduleName}__${pathName}} resi-container">
<el-card ref="searchCard" class="search-card">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.${pk.attrname}" placeholder="${pk.attrname}" clearable></el-input>
<el-input size="small" v-model="dataForm.${pk.attrname}" placeholder="${pk.attrname}" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('${moduleName}:${pathName}:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('${moduleName}:${pathName}:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button>
<el-button type="primary" size="small" @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
</el-card>
<el-card class="resi-card-table">
<div class="resi-row-btn">
<el-button class="diy-button--add" type="primary" size="small" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
<el-button class="diy-button--add" type="danger" size="small" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button>
</div>
<el-table v-loading="dataListLoading" class="resi-table" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%" :height="tableHeight">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
#foreach($column in $columns)
<el-table-column prop="${column.attrname}" label="${column.comments}" header-align="center" align="center"></el-table-column>
#end
#foreach($column in $columns)
<el-table-column prop="${column.attrname}" label="${column.comments}" header-align="center" align="center"></el-table-column>
#end
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button v-if="$hasPermission('${moduleName}:${pathName}:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission('${moduleName}:${pathName}:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div>
</el-card>
</el-card>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './'
export default {
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './${pathName}-add-or-update'
import { mapGetters } from 'vuex'
export default {
mixins: [mixinViewModule],
data () {
return {
@ -56,13 +56,52 @@
deleteURL: '/${moduleName}/${pathName}',
deleteIsBatch: true
},
dataForm: {;
dataForm: {
${pk.attrname}: ''
}
}
},
components: {
AddOrUpdate
},
computed: {
...mapGetters(["clientHeight", "iframeHeight"]),
tableHeight() {
const h = this.clientHeight - 360 + this.iframeHeight;
const _h = this.clientHeight - 360;
return this.$store.state.inIframe ? h : _h;
},
}
}
</script>
<style lang="scss" scoped>
@import "@/assets/scss/buttonstyle.scss";
.resi-container .resi-card-table {
::v-deep .el-table th {
color: #fff;
background-color: rgba(33, 149, 254, 1);
}
}
.resi-table {
::v-deep .el-button--text {
text-decoration: underline;
}
}
.search-card {
.el-card__body {
padding: 20px 20px 0 20px;
}
}
.resi-row-btn {
margin-bottom: 13px;
.upload-btn {
display: inline-block;
margin: 0 10px;
}
}
</style>

17
epmet-commons/epmet-commons-feignclient/src/main/java/com/epmet/commons/feignclient/dtos/result/JiMuReportBriefResultDTO.java

@ -0,0 +1,17 @@
package com.epmet.commons.feignclient.dtos.result;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 报表简要信息result dto
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class JiMuReportBriefResultDTO {
private String id;
private String code;
private String name;
}

8
epmet-commons/epmet-commons-feignclient/src/main/java/com/epmet/commons/feignclient/feigns/JiMuReportOpenFeignClient.java

@ -3,6 +3,7 @@ package com.epmet.commons.feignclient.feigns;
import com.epmet.commons.feignclient.dtos.JiMuPage;
import com.epmet.commons.feignclient.dtos.JiMuResult;
import com.epmet.commons.feignclient.dtos.form.JimuReportExportRequestDTO;
import com.epmet.commons.feignclient.dtos.result.JiMuReportBriefResultDTO;
import com.epmet.commons.feignclient.dtos.result.JiMuReportDetailResultDTO;
import com.epmet.commons.feignclient.dtos.result.JimuReportDbDataResultDTO;
import com.epmet.commons.feignclient.dtos.result.JimuReportFieldTreeResultDTO;
@ -44,4 +45,11 @@ public interface JiMuReportOpenFeignClient {
@PostMapping("jmreport/exportAllExcelStream")
Response exportAllExcelStream(JimuReportExportRequestDTO param);
/**
* 报表简要信息
* @return
*/
@GetMapping("jmreport/get/{report-id}")
JiMuResult<JiMuReportBriefResultDTO> getReportBrief(@PathVariable("report-id") String reportId);
}

7
epmet-commons/epmet-commons-feignclient/src/main/java/com/epmet/commons/feignclient/feigns/fallback/JiMuReportOpenFeignClientFallback.java

@ -3,6 +3,7 @@ package com.epmet.commons.feignclient.feigns.fallback;
import com.epmet.commons.feignclient.dtos.JiMuPage;
import com.epmet.commons.feignclient.dtos.JiMuResult;
import com.epmet.commons.feignclient.dtos.form.JimuReportExportRequestDTO;
import com.epmet.commons.feignclient.dtos.result.JiMuReportBriefResultDTO;
import com.epmet.commons.feignclient.dtos.result.JiMuReportDetailResultDTO;
import com.epmet.commons.feignclient.dtos.result.JimuReportDbDataResultDTO;
import com.epmet.commons.feignclient.dtos.result.JimuReportFieldTreeResultDTO;
@ -48,4 +49,10 @@ public class JiMuReportOpenFeignClientFallback implements JiMuReportOpenFeignCli
JiMuResult rst = new JiMuResult<>(false, "请求失败", 200, null,null);
return rst;
}
@Override
public JiMuResult<JiMuReportBriefResultDTO> getReportBrief(String reportID) {
JiMuResult rst = new JiMuResult<>(false, "请求失败", 200, null,null);
return rst;
}
}

10
epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/ConsomerGroupConstants.java

@ -98,4 +98,14 @@ public interface ConsomerGroupConstants {
* 创建党员居民信息消费者组将user库的党员信息同步到partymember库的党员表
*/
String CREATE_RESI_PARTYMEMBER_SYNC_GROUP = "create_resi_sync_group";
/**
* 党建小助手监听器分组
*/
String PARTY_MEETING_MESSAGE = "party_meeting_message";
/**
* 党建积分操作消费组
*/
String PARTY_BUILDING_GROUP = "party_building_group";
}

7
epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/TopicConstants.java

@ -84,4 +84,11 @@ public interface TopicConstants {
* 居民的党员信息
*/
String PARTYMEMBER_RESI = "partymember_resi";
/**
* 消息-党建小助手
*/
String IC_MESSAGE = "ic_message";
String PARTY_BUILDING = "party_building";
}

23
epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/PartyMeetingMessageMQMsg.java

@ -0,0 +1,23 @@
package com.epmet.commons.rocketmq.messages;
import com.epmet.commons.tools.dto.form.mq.MqBaseFormDTO;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 党建小助手发布活动活动到期提醒活动发布提醒推送MQ
* @author sun
*/
@Data
public class PartyMeetingMessageMQMsg extends MqBaseFormDTO implements Serializable {
//客户Id
private String customerId;
//活动/日程Id
private String icPartyActId;
//动作类型 发布活动:publish 提前提醒:remind 日程通知:notify
private String type;
}

1
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java

@ -15,6 +15,7 @@ public @interface MaskResponse {
*/
String MASK_TYPE_ID_CARD = "ID_CARD";
String MASK_TYPE_MOBILE = "MOBILE";
String MASK_TYPE_CHINESE_NAME = "CHINESE_NAME";
///**
// * 默认的一些字段,如果没有手动指定,就会使用默认的。如果手动指定了,就不再使用默认的

4
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/CoveragePlaceTypeEnum.java

@ -18,7 +18,9 @@ public enum CoveragePlaceTypeEnum {
VOLUNTEER("volunteer", "志愿者"),
GROUP_RENT("group_rent", "群租房"),
EVENT("event", "城市管理事件"),
ZHZL_RQ("zhzl_rq", "综合治理人群");
ZHZL_RQ("zhzl_rq", "综合治理人群"),
NUCLEIC_POINT("nucleic_point", "核酸检测点"),
VACCINE_POINT("vaccine_point", "疫苗接种点");
private final String code;
private final String name;

6
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/EventEnum.java

@ -19,6 +19,12 @@ public enum EventEnum {
TOPIC_SHIFTED_TO_PROJECT("topic_to_project","resi_group","话题被转为项目"),
LEADER_RESOLVE_TOPIC("leader_resolve_topic","resi_group","组长解决组内话题"),
FINISH_USER_DEMAND("finish_user_demand","community_service","服务完成"),
ZBWYH("参加支部委员会","part_member", "支部委员会活动签到"),
ZBDYDH("参加支部党员大会","part_member", "支部党员大会活动签到"),
DXZH("参加党小组会","part_member", "党小组会活动签到"),
DANGKE ("参加党课","part_member", "党课活动签到"),
ZTDR("参加主题党日","part_member", "主题党日活动签到"),
WMFWHD("参加为民服务活动","part_member", "为民服务活动活动签到"),
;
private String eventClass;

27
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/IdCardTypeEnum.java

@ -0,0 +1,27 @@
package com.epmet.commons.tools.enums;
/**
* 唯一整件类型
*/
public enum IdCardTypeEnum {
OTHERS("0", "其他"),
SFZH("1", "身份证号"),
PASSPORT("2", "护照");
private String type;
private String name;
IdCardTypeEnum(String type, String name) {
this.type = type;
this.name = name;
}
public String getType() {
return type;
}
public String getName() {
return name;
}
}

1
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java

@ -86,6 +86,7 @@ public enum EpmetErrorCode {
BUILDING_NAME_EXITED(8215,"楼栋名称已存在"),
DOOR_NAME_EXITED(8216,"门牌号已存在"),
NEIGHBOOR_NAME_EXITED(8217,"小区名称已存在"),
BUILDING_NAME_EXITED_IN_GRID(8218,"小区下该楼栋已存在于其他网格"),
REQUIRE_PERMISSION(8301, "您没有足够的操作权限"),
THIRD_PLAT_REQUEST_ERROR(8302, "请求第三方平台错误"),

55
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java

@ -2,8 +2,10 @@ package com.epmet.commons.tools.processor;
import cn.hutool.core.util.StrUtil;
import com.epmet.commons.tools.annotation.MaskResponse;
import com.epmet.commons.tools.enums.IdCardTypeEnum;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.IdCardRegexUtils;
import com.epmet.commons.tools.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -13,6 +15,7 @@ import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
/**
* desc:脱敏处理器
@ -130,27 +133,67 @@ public class MaskProcessor {
return maskIdCard(originString);
} else if (MaskResponse.MASK_TYPE_MOBILE.equals(maskType)) {
return maskMobile(originString);
} else if (MaskResponse.MASK_TYPE_CHINESE_NAME.equals(maskType)) {
return maskChineseName(originString);
} else {
return originString;
}
}
/**
* 对中文人名进行打码
* @param originString
* @return
*/
private String maskChineseName(String originString) {
if (StringUtils.isBlank(originString)) {
// 空串,或者只有一个字的,不打码,直接返回
return originString;
}
int length = originString.length();
// 2个字以上的,首位字母明文,中间*
// 中文不能用\\w,要用[\u4e00-\u9fa5]
if (length == 2) {
return originString.replaceAll("^([\\u4e00-\\u9fa5]).*$", "$1*");
} else {
String maskStr = StrUtil.repeat("*", length - 2);
return originString.replaceAll("^([\\u4e00-\\u9fa5]).*([\\u4e00-\\u9fa5])$", "$1" + maskStr + "$2");
}
}
/**
* 唯一整件号打码可能是身份证号或者是护照号
* 将明文字符串打码变为掩码保留前6后面打码
* @param originString
* @return
*/
private String maskIdCard(String originString) {
int clearTextLength = 12;
// 仅将6位之后的全都打码
int length = originString.length();
if (length <= clearTextLength) {
IdCardRegexUtils regexUtil = IdCardRegexUtils.parse(originString);
if (regexUtil == null) {
// 不匹配任何类型,不码
return originString;
}
String maskStr = StrUtil.repeatByLength("*", length - clearTextLength);
if (regexUtil.getTypeEnum() == IdCardTypeEnum.SFZH) {
// 身份证号
// 仅将6位之后的全都打码
int maskedTextLength = 12;
int length = originString.length();
String maskStr = StrUtil.repeatByLength("*", length - maskedTextLength);
return originString.replaceAll("^(\\d{10})\\d+([a-zA-Z0-9]{2})$", new StringBuilder("$1").append(maskStr).append("$2").toString());
} else if (regexUtil.getTypeEnum() == IdCardTypeEnum.PASSPORT) {
// 护照,前两位,后两位为明文,其他*
int clearLength = 4;
int maskedLength = 0;
if ((maskedLength = originString.length() - clearLength) > 0) {
String maskStr = StrUtil.repeatByLength("*", maskedLength);
return originString.replaceAll("^([a-zA-Z0-9]{2})[a-zA-Z0-9]+([a-zA-Z0-9]{2})$", new StringBuilder("$1").append(maskStr).append("$2").toString());
}
}
return originString.replaceAll("^(\\d{10})\\d+([a-zA-Z0-9]{2})$", new StringBuilder("$1").append(maskStr).append("$2").toString());
return originString;
}
/**

15
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java

@ -856,4 +856,19 @@ public class RedisKeys {
}
return rootPrefix.concat("staffbaseinfo:")+userId;
}
/**
* 大华publicKey
*/
public static String getDhPublicKey() {
return rootPrefix.concat("dh:public");
}
/**
* 大华token
*/
public static String getDhToken() {
return rootPrefix.concat("dh:token");
}
}

1
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/user/LoginUserUtil.java

@ -2,6 +2,7 @@ package com.epmet.commons.tools.security.user;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.utils.EpmetRequestHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;

7
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java

@ -55,6 +55,7 @@ public class DateUtils {
public final static String DATE_TIME_PATTERN_END_WITH_MINUTE = "yyyy-MM-dd HH:mm";
public static final String DATE_PATTERN_YYYYMMDD = "yyyyMMdd";
public static final String DATE_PATTERN_YYYYMMDDHHMM = "yyyyMMddHHmm";
public static final String DATE_NAME_PATTERN = "yyyy年MM月dd日";
public static final String MONTH_NAME_PATTERN = "yyyy年MM月";
public static final String DATE_PATTERN_YYYY = "yyyy";
@ -1070,4 +1071,10 @@ public class DateUtils {
return cal.getTime();
}
public static Date calDateBaseDay(Date date, int day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, day);
return calendar.getTime();
}
}

155
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/IdCardRegexUtils.java

@ -0,0 +1,155 @@
package com.epmet.commons.tools.utils;
import com.epmet.commons.tools.enums.IdCardTypeEnum;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.Period;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 唯一整件正则工具
*/
public class IdCardRegexUtils {
/**
* 15位身份证号的正则表达式
*/
private static final Pattern PATTERN_15_ID = Pattern.compile("^\\d{6}(?<year>\\d{2})(?<month>0[1-9]|1[0-2])(?<day>[0-2][0-9]|3[0-1])\\d{2}(?<sex>\\d)$");
/**
* 18位身份证号的正则表达式
*/
private static final Pattern PATTERN_18_ID = Pattern.compile("^\\d{6}(?<year>\\d{4})(?<month>0[1-9]|1[0-2])(?<day>[0-2][0-9]|3[0-1])\\d{2}(?<sex>\\d)[0-9a-xA-X]$");
/**
* 9位护照
*/
private static final Pattern PATTERN_9_PASSPORT = Pattern.compile("^[a-zA-Z0-9]{8,9}$");
private String inputText;
private Matcher matcher;
private IdCardTypeEnum idCardType;
private IdCardRegexUtils(IdCardTypeEnum idCardType, Matcher matcher, String inputText) {
this.idCardType = idCardType;
this.matcher = matcher;
this.inputText = inputText;
}
/**
* 正则解析结果
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class ParsedContent {
private String birthdayYear;
private String birthdayMonth;
private String birthdayDay;
private String sex;
private Integer age;
}
/**
* desc:校验输入的证件号是否合法
* @param input
* @return
*/
public static boolean validateIdCard(String input){
IdCardRegexUtils parse = IdCardRegexUtils.parse(input);
return parse != null;
}
/**
* 解析正则
* @param input
* @return
*/
public static IdCardRegexUtils parse(String input) {
if (input == null || input.trim().length() == 0) {
return null;
}
if (input.length() == 15) {
Matcher matcher = PATTERN_15_ID.matcher(input);
if (matcher.matches()) {
return new IdCardRegexUtils(IdCardTypeEnum.SFZH, matcher, input);
}
}
if (input.length() == 18) {
Matcher matcher = PATTERN_18_ID.matcher(input);
if (matcher.matches()) {
return new IdCardRegexUtils(IdCardTypeEnum.SFZH, matcher, input);
}
}
if (input.length() == 9 || input.length() == 8) {
Matcher matcher = PATTERN_9_PASSPORT.matcher(input);
if (matcher.matches()) {
return new IdCardRegexUtils(IdCardTypeEnum.PASSPORT, matcher, input);
}
}
return null;
}
/**
* 获取解析结果
* @return
*/
public ParsedContent getParsedResult() {
if (matcher == null || idCardType == null) {
return null;
}
if (IdCardTypeEnum.SFZH == idCardType) {
//是身份证号,可以解析
String year;
if (inputText.length() == 15) {
// 15位身份证号,years前需要拼上19
year = "19".concat(matcher.group("year"));
} else {
year = matcher.group("year");
}
String month = matcher.group("month");
String day = matcher.group("day");
String sex = matcher.group("sex");
// ------- 年龄Start----------
Integer age;
try {
LocalDate birthday = LocalDate.of(Integer.parseInt(year), Integer.parseInt(month), Integer.parseInt(day));
age = Period.between(birthday, LocalDate.now()).getYears();
} catch (DateTimeException e) {
throw new EpmetException("身份证号解析年龄失败:" + ExceptionUtils.getErrorStackTrace(e));
}
// ------- 年龄End----------
return new ParsedContent(year, month, day, sex, age);
}
// 其他类型暂时不可解析
return null;
}
/**
* 获取类型枚举
* @return
*/
public IdCardTypeEnum getTypeEnum() {
return idCardType;
}
public static void main(String[] args) {
IdCardRegexUtils parse = IdCardRegexUtils.parse("370282198801303017");
ParsedContent parsedResult = parse.getParsedResult();
System.out.println(parsedResult);
}
}

51
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/converter/EasyExcelDateConverter.java

@ -0,0 +1,51 @@
package com.epmet.commons.tools.utils.poi.excel.converter;
/**
* desc:
*
* @author: LiuJanJun
* @date: 2022/8/26 4:59 下午
* @version: 1.0
*/
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author: liujianjun
* @Date: 2022/7/19
* @Description: yyyy-MM-dd easyExcel 日期转换
*/
public class EasyExcelDateConverter implements Converter<Date> {
private static final String PATTERN_YYYY_MM_DD = "yyyy-MM-dd";
@Override
public Class<?> supportJavaTypeKey() {
return Converter.super.supportJavaTypeKey();
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return Converter.super.supportExcelTypeKey();
}
@Override
public WriteCellData<?> convertToExcelData(Date value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_YYYY_MM_DD);
String dateValue = sdf.format(value);
return new WriteCellData<>(dateValue);
}
//@Override
//public Date convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
// SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_YYYY_MM_DD);
// return sdf.parse(cellData.getStringValue());
//}
}

17
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/IcPointNucleicMonitoringDao.java

@ -0,0 +1,17 @@
package com.epmet.dataaggre.dao.epmetuser;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dataaggre.entity.epmetuser.IcPointNucleicMonitoringEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 核酸监测点
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-06-20
*/
@Mapper
public interface IcPointNucleicMonitoringDao extends BaseDao<IcPointNucleicMonitoringEntity> {
}

17
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/IcPointVaccinesInoculationDao.java

@ -0,0 +1,17 @@
package com.epmet.dataaggre.dao.epmetuser;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dataaggre.entity.epmetuser.IcPointVaccinesInoculationEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 疫苗接种点
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-06-20
*/
@Mapper
public interface IcPointVaccinesInoculationDao extends BaseDao<IcPointVaccinesInoculationEntity> {
}

77
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/epmetuser/IcPointNucleicMonitoringEntity.java

@ -0,0 +1,77 @@
package com.epmet.dataaggre.entity.epmetuser;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 核酸监测点
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-06-20
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("ic_point_nucleic_monitoring")
public class IcPointNucleicMonitoringEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户ID
*/
private String customerId;
/**
* 所属组织ID
*/
private String orgId;
/**
* 所属组织名称
*/
private String orgName;
/**
* 组织ID上级
*/
private String pid;
/**
* 组织ID所有上级
*/
private String pids;
/**
* 核酸监测点名称
*/
private String name;
/**
* 服务时间
*/
private String serveTime;
/**
* 咨询电话
*/
private String mobile;
/**
* 监测点地址
*/
private String address;
/**
* 经度
*/
private String longitude;
/**
* 纬度
*/
private String latitude;
}

102
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/epmetuser/IcPointVaccinesInoculationEntity.java

@ -0,0 +1,102 @@
package com.epmet.dataaggre.entity.epmetuser;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 疫苗接种点
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-06-20
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("ic_point_vaccines_inoculation")
public class IcPointVaccinesInoculationEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户ID
*/
private String customerId;
/**
* 所属组织ID
*/
private String orgId;
/**
* 所属组织名称
*/
private String orgName;
/**
* 组织ID上级
*/
private String pid;
/**
* 组织ID所有上级
*/
private String pids;
/**
* 疫苗接种点名称
*/
private String name;
/**
* 接种日期
*/
private String inoculationDate;
/**
* 接种上午开始时间
*/
private String moStartTime;
/**
* 接种上午结束时间
*/
private String moEndTime;
/**
* 接种下午开始时间
*/
private String afStartTime;
/**
* 接种下午结束时间
*/
private String afEndTime;
/**
* 暂无疫苗12
*/
private String noAvailableVaccines;
/**
* 咨询电话
*/
private String mobile;
/**
* 接种点地址
*/
private String address;
/**
* 经度
*/
private String longitude;
/**
* 纬度
*/
private String latitude;
}

10
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java

@ -15,6 +15,8 @@ import com.epmet.dataaggre.dto.govorg.result.GridStaffResultDTO;
import com.epmet.dataaggre.dto.govorg.result.MemberProjectInfoResultDTO;
import com.epmet.dataaggre.dto.govproject.result.ProjectAnalysisResultDTO;
import com.epmet.dataaggre.entity.epmetuser.CustomerStaffEntity;
import com.epmet.dataaggre.entity.epmetuser.IcPointNucleicMonitoringEntity;
import com.epmet.dataaggre.entity.epmetuser.IcPointVaccinesInoculationEntity;
import com.epmet.dataaggre.entity.epmetuser.IcResiUserEntity;
import com.epmet.dto.IcResiUserDTO;
import com.epmet.dto.UserBaseInfoDTO;
@ -240,4 +242,12 @@ public interface EpmetUserService {
List<IcResiUserEntity> listVolunteers(String customerId, String agencyId, String staffOrgIds, String search, String resiCategory);
List<NowStatsDataResultDTO> getNowResiUser(NowStatsDataFormDTO formDTO);
Integer countVaccinePoint(String customerId, String agencyId, String staffOrgIds, String search);
Integer countNucleicPoint(String customerId, String agencyId, String staffOrgIds, String search);
List<IcPointVaccinesInoculationEntity> listVaccinePoints(String customerId, String agencyId, String staffOrgIds, String search);
List<IcPointNucleicMonitoringEntity> listNucleicPoints(String customerId, String agencyId,String staffOrgIds, String search);
}

48
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java

@ -94,6 +94,10 @@ public class EpmetUserServiceImpl implements EpmetUserService {
private CustomerFootBarService customerFootBarService;
@Resource
private RegisterRelationDao registerRelationDao;
@Resource
private IcPointVaccinesInoculationDao pointVaccinesInoculationDao;
@Resource
private IcPointNucleicMonitoringDao pointNucleicMonitoringDao;
/**
* @Description 根据UserIds查询
@ -923,4 +927,48 @@ public class EpmetUserServiceImpl implements EpmetUserService {
List<NowStatsDataResultDTO> list = registerRelationDao.selectNowResiUser(formDTO);
return list;
}
@Override
public Integer countVaccinePoint(String customerId, String agencyId, String staffOrgIds, String search) {
LambdaQueryWrapper<IcPointVaccinesInoculationEntity> query = new LambdaQueryWrapper<>();
query.eq(IcPointVaccinesInoculationEntity::getCustomerId, customerId);
//query.and(w -> w.likeRight(IcPointVaccinesInoculationEntity::getPids, staffOrgIds)
// .or()
// .eq(IcPointVaccinesInoculationEntity::getOrgId, agencyId));
query.like(StringUtils.isNotBlank(search), IcPointVaccinesInoculationEntity::getName, search);
return pointVaccinesInoculationDao.selectCount(query);
}
@Override
public Integer countNucleicPoint(String customerId, String agencyId, String staffOrgIds, String search) {
LambdaQueryWrapper<IcPointNucleicMonitoringEntity> query = new LambdaQueryWrapper<>();
query.eq(IcPointNucleicMonitoringEntity::getCustomerId, customerId);
query.and(w -> w.likeRight(IcPointNucleicMonitoringEntity::getPids, staffOrgIds)
.or()
.eq(IcPointNucleicMonitoringEntity::getOrgId, agencyId));
query.like(StringUtils.isNotBlank(search), IcPointNucleicMonitoringEntity::getName, search);
return pointNucleicMonitoringDao.selectCount(query);
}
@Override
public List<IcPointVaccinesInoculationEntity> listVaccinePoints(String customerId, String agencyId, String staffOrgIds, String search) {
LambdaQueryWrapper<IcPointVaccinesInoculationEntity> query = new LambdaQueryWrapper<>();
query.eq(IcPointVaccinesInoculationEntity::getCustomerId, customerId);
//query.and(w -> w.likeRight(IcPointVaccinesInoculationEntity::getPids, staffOrgIds)
// .or()
// .eq(IcPointVaccinesInoculationEntity::getOrgId, agencyId));
query.like(StringUtils.isNotBlank(search), IcPointVaccinesInoculationEntity::getName, search);
return pointVaccinesInoculationDao.selectList(query);
}
@Override
public List<IcPointNucleicMonitoringEntity> listNucleicPoints(String customerId, String agencyId, String staffOrgIds, String search) {
LambdaQueryWrapper<IcPointNucleicMonitoringEntity> query = new LambdaQueryWrapper<>();
query.eq(IcPointNucleicMonitoringEntity::getCustomerId, customerId);
query.and(w -> w.likeRight(IcPointNucleicMonitoringEntity::getPids, staffOrgIds)
.or()
.eq(IcPointNucleicMonitoringEntity::getOrgId, agencyId));
query.like(StringUtils.isNotBlank(search), IcPointNucleicMonitoringEntity::getName, search);
return pointNucleicMonitoringDao.selectList(query);
}
}

22
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java

@ -30,6 +30,8 @@ import com.epmet.dataaggre.dto.govorg.form.DataListLeftSubTotalFormDTO;
import com.epmet.dataaggre.dto.govorg.form.SearchDetailFormDTO;
import com.epmet.dataaggre.dto.govorg.result.*;
import com.epmet.dataaggre.dto.resigroup.result.OrgInfoCommonDTO;
import com.epmet.dataaggre.entity.epmetuser.IcPointNucleicMonitoringEntity;
import com.epmet.dataaggre.entity.epmetuser.IcPointVaccinesInoculationEntity;
import com.epmet.dataaggre.entity.epmetuser.IcResiUserEntity;
import com.epmet.dataaggre.entity.govorg.*;
import com.epmet.dataaggre.entity.govproject.IcEventEntity;
@ -628,6 +630,12 @@ public class CoverageServiceImpl implements CoverageService {
// 志愿者
String[] parts = categoryKey.split("_");
return epmetUserService.countVolunteers(customerId, agencyId, staffOrgIds, search, parts[1]);
} else if (CoveragePlaceTypeEnum.VACCINE_POINT.getCode().equals(placeType)) {
// 疫苗接种点
return epmetUserService.countVaccinePoint(customerId, agencyId, staffOrgIds, search);
} else if (CoveragePlaceTypeEnum.NUCLEIC_POINT.getCode().equals(placeType)) {
// 核酸检测点
return epmetUserService.countNucleicPoint(customerId, agencyId, staffOrgIds, search);
}
return 0;
@ -805,6 +813,20 @@ public class CoverageServiceImpl implements CoverageService {
coordinates[1], coordinates[0]);
}).collect(Collectors.toList());
} else if (CoveragePlaceTypeEnum.VACCINE_POINT.getCode().equals(placeType)) {
// 疫苗接种点
List<IcPointVaccinesInoculationEntity> vps = epmetUserService.listVaccinePoints(customerId, agencyId, staffOrgIds, search);
return vps.stream()
.map(vp -> new CoverageAnalisisDataListResultDTO(vp.getId(), categoryKey, isPage ? categoryDict.getCategoryName() : null,
placeType, vp.getName(), vp.getLatitude(), vp.getLongitude()))
.collect(Collectors.toList());
} else if (CoveragePlaceTypeEnum.NUCLEIC_POINT.getCode().equals(placeType)) {
// 核酸检测点
List<IcPointNucleicMonitoringEntity> nps = epmetUserService.listNucleicPoints(customerId, agencyId, staffOrgIds, search);
return nps.stream()
.map(np -> new CoverageAnalisisDataListResultDTO(np.getId(), categoryKey, isPage ? categoryDict.getCategoryName() : null,
placeType, np.getName(), np.getLatitude(), np.getLongitude()))
.collect(Collectors.toList());
}
return new ArrayList<>();
}

4
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/UserBaseInfoDao.xml

@ -7,13 +7,13 @@
<select id="selectUserInfosByUserIds" resultType="com.epmet.dataaggre.dto.epmetuser.result.UserInfosResultDTO">
SELECT
user_id,
CONCAT(STREET,'-',SURNAME,
CONCAT(SURNAME,
CASE WHEN GENDER = '1' THEN '先生'
WHEN GENDER = '2' THEN '女士'
ELSE '先生/女士' END
) AS userShowName,
HEAD_IMG_URL AS headPhoto,
CONCAT(STREET,'-',REAL_NAME) AS realName
CONCAT(REAL_NAME) AS realName
FROM user_base_info
WHERE DEL_FLAG = 0
AND

2
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml

@ -521,7 +521,7 @@
<select id="selectScreenProjectData" resultType="com.epmet.dto.screen.ScreenProjectDataDTO">
SELECT
CONCAT( STREET, '-', SURNAME, CASE WHEN GENDER = '1' THEN '先生' WHEN GENDER = '2' THEN '女士' ELSE '先生/女士' END ) AS linkName,
CONCAT( SURNAME, CASE WHEN GENDER = '1' THEN '先生' WHEN GENDER = '2' THEN '女士' ELSE '先生/女士' END ) AS linkName,
MOBILE AS linkMobile,
USER_ID as topicId
FROM

11
epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java

@ -23,6 +23,12 @@ public interface ImportTaskConstants {
String BIZ_TYPE_IC_ENTERPRISE="ic_enterprise";
String IC_POINT_NUCLEIC_MONITORING = "ic_point_nucleic_monitoring";
String IC_POINT_VACCINES_INOCULATION = "ic_point_vaccines_inoculation";
// 新冠病毒疫苗接种人员信息台账
String IC_VACCINE_PRARMETER = "ic_vaccine_prarmeter";
/**
* 工作日志导入
*/
String BIZ_TYPE_WORK_DIARY_IMPORT = "work_diary_import";
/**
* 核酸检测
*/
@ -62,4 +68,9 @@ public interface ImportTaskConstants {
* 城市管理
*/
String IC_CITY_MANAGEMENT = "ic_city_management";
/**
* 社会组织
*/
String IC_SOCIETY_ORG="ic_society_org";
}

39
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/IcSocietyOrgDTO.java

@ -39,6 +39,11 @@ public class IcSocietyOrgDTO implements Serializable {
*/
private String id;
/**
* 图片地址
*/
private String imgUrl;
/**
* 客户Id
*/
@ -74,6 +79,11 @@ public class IcSocietyOrgDTO implements Serializable {
*/
private String mobile;
/**
* 服务时间
*/
private String serviceTimeStr;
/**
* 起始服务时间
*/
@ -109,34 +119,5 @@ public class IcSocietyOrgDTO implements Serializable {
*/
private String remarks;
/**
* 删除标识0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

81
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/WorkdiaryServiceTypeDTO.java

@ -0,0 +1,81 @@
package com.epmet.dto;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import com.epmet.dto.result.WorkdiaryServiceRecordDTO;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.Date;
/**
* 工作日志(服务)-服务类型
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Data
public class WorkdiaryServiceTypeDTO implements Serializable {
private static final long serialVersionUID = 1L;
public interface Save extends CustomerClientShowGroup {}
public interface Update extends CustomerClientShowGroup {}
/**
* 主键
*/
@NotBlank(message = "未选中任何数据", groups = { Update.class })
private String id;
/**
* 客户id
*/
private String customerId;
/**
* 服务类型
*/
private Short serviceType;
/**
* 服务类型名称
*/
private String serviceTypeName;
/**
* 是否启用0禁用1启用
*/
private Short enabled;
/**
* 删除标识 0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

19
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/AddSocietyOrgFormDTO.java

@ -23,7 +23,7 @@ import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.util.Date;
@ -48,6 +48,11 @@ public class AddSocietyOrgFormDTO implements Serializable {
* agency_id的所有上级
*/
private String pids;
/**
* 社会组织头像
*/
@NotEmpty(message = "组织头像不能为空", groups = { AddSocietyOrgFormDTO.Add.class})
private String[] imageList;
/**
* 社会组织名称
*/
@ -63,7 +68,7 @@ public class AddSocietyOrgFormDTO implements Serializable {
/**
* 负责人
*/
@NotBlank(message = "负责人名称不能为空", groups = { AddSocietyOrgFormDTO.Add.class })
//@NotBlank(message = "负责人名称不能为空", groups = { AddSocietyOrgFormDTO.Add.class })
@Length(max = 20, message = "负责人名称不能超过20个字符",groups = {Add.class})
private String personInCharge;
/**
@ -72,22 +77,24 @@ public class AddSocietyOrgFormDTO implements Serializable {
@NotBlank(message = "负责人电话不能为空", groups = { AddSocietyOrgFormDTO.Add.class })
@Length(max = 11, message = "负责人电话不能超过11个字符",groups = {Add.class})
private String mobile;
/**
* 服务时间
*/
@NotBlank(message = "服务时间不能为空", groups = { AddSocietyOrgFormDTO.Add.class })
private String serviceTimeStr;
/**
* 起始服务时间
*/
@NotNull(message = "起始服务时间不能为空", groups = { AddSocietyOrgFormDTO.Add.class })
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date serviceStartTime;
/**
* 终止服务时间
*/
@NotNull(message = "终止服务时间不能为空", groups = { AddSocietyOrgFormDTO.Add.class })
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date serviceEndTime;
/**
* 绑定管理员[组织下录入的工作人员]
*/
@NotBlank(message = "绑定管理员名称不能为空", groups = { AddSocietyOrgFormDTO.Add.class })
private String adminStaffId;
/**
* 地址
@ -106,4 +113,4 @@ public class AddSocietyOrgFormDTO implements Serializable {
public interface Add extends CustomerClientShowGroup {}
}
}

17
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/EditSocietyOrgFormDTO.java

@ -22,6 +22,7 @@ import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.util.Date;
@ -40,6 +41,12 @@ public class EditSocietyOrgFormDTO implements Serializable {
*/
@NotBlank(message = "社会组织Id不能为空", groups = { Edit.class, Del.class })
private String societyId;
/**
* 社会组织头像
*/
@NotEmpty(message = "组织头像不能为空", groups = { Edit.class})
private String[] imageList;
/**
* 社会组织名称
*/
@ -53,13 +60,19 @@ public class EditSocietyOrgFormDTO implements Serializable {
/**
* 负责人
*/
@Length(max = 20, message = "负责人名称不能超过20个字符",groups = {Edit.class})
//@Length(max = 20, message = "负责人名称不能超过20个字符",groups = {Edit.class})
private String personInCharge;
/**
* 负责人电话
*/
@Length(max = 11, message = "负责人电话不能超过11个字符",groups = {Edit.class})
private String mobile;
/**
* 服务时间
*/
@NotBlank(message = "服务时间不能为空",groups = {Edit.class})
private String serviceTimeStr;
/**
* 起始服务时间
*/
@ -92,4 +105,4 @@ public class EditSocietyOrgFormDTO implements Serializable {
public interface Edit {}
public interface Del {}
}
}

2
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiVolunteerAuthenticateFormDTO.java

@ -59,7 +59,7 @@ public class ResiVolunteerAuthenticateFormDTO implements Serializable {
/**
* 身份证号码
*/
@NotBlank(message = "身份证号码不能为空", groups = {AddUserShowGroup.class })
@NotBlank(message = "证号能为空", groups = {AddUserShowGroup.class })
private String idNum;
/**

38
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/workdiaryservice/WorkdiaryServiceQueryFormDTO.java

@ -0,0 +1,38 @@
package com.epmet.dto.form.workdiaryservice;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 工作日志-服务
*/
@Data
public class WorkdiaryServiceQueryFormDTO extends PageFormDTO {
private String id;
private Short serviceType;
private String gridId;
private String applicantName;
private String applicantAddress;
private String serviceContent;
private String applicantMobile;
private String principalName;
//@DateTimeFormat
//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:sss", timezone = "GMT+8")
//private Date serviceTime;
private String remark;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date serviceTimeStart;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date serviceTimeEnd;
}

8
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/GetListSocietyOrgResultDTO.java

@ -44,6 +44,10 @@ public class GetListSocietyOrgResultDTO implements Serializable {
private String agencyId;
//社会组织Id
private String societyId;
/**
* 社会组织头像
*/
private String imgUrl;
//社会组织名称
private String societyName;
//服务事项
@ -52,6 +56,10 @@ public class GetListSocietyOrgResultDTO implements Serializable {
private String personInCharge;
//负责人电话
private String mobile;
/**
* 服务时间
*/
private String serviceTimeStr;
//起始服务时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date serviceStartTime;

8
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/SocietyOrgListResultDTO.java

@ -35,6 +35,10 @@ public class SocietyOrgListResultDTO implements Serializable {
private String agencyName;
//社会组织Id
private String societyId;
/**
* 图像
*/
private String imgUrl;
//社会组织名称
private String societyName;
//服务事项
@ -43,6 +47,10 @@ public class SocietyOrgListResultDTO implements Serializable {
private String personInCharge;
//负责人电话
private String mobile;
/**
* 服务时间
*/
private String serviceTimeStr;
//起始服务时间
//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
//private Date serviceStartTime;

143
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/WorkdiaryServiceRecordDTO.java

@ -0,0 +1,143 @@
package com.epmet.dto.result;
import java.io.Serializable;
import java.util.Date;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 工作日志(服务)-记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Data
public class WorkdiaryServiceRecordDTO implements Serializable {
private static final long serialVersionUID = 1L;
public interface Save extends CustomerClientShowGroup {}
public interface Update extends CustomerClientShowGroup {}
/**
* 主键
*/
@NotBlank(message = "未选中任何数据", groups = { Update.class })
private String id;
/**
* 客户id
*/
private String customerId;
/**
* 服务类型
*/
@NotNull(message = "服务类型为必填项", groups = { Save.class })
private Short serviceType;
private String serviceTypeName;
/**
* 单位ID
*/
private String agencyId;
/**
* 网格ID
*/
@NotBlank(message = "网格为必填项", groups = { Save.class })
private String gridId;
private String gridName;
/**
* 组织ID path
*/
private String orgIdPath;
/**
* 申请人ID
*/
@NotBlank(message = "申请人为必填项", groups = { Save.class })
private String applicantId;
private String applicantIdCard;
/**
* 申请人姓名
*/
private String applicantName;
/**
* 申请人住址
*/
@NotBlank(message = "住址为必填项", groups = { Save.class })
private String applicantAddress;
/**
* 申请人联系电话
*/
@NotBlank(message = "联系电话为必填项", groups = { Save.class })
private String applicantMobile;
/**
* 服务内容
*/
@NotBlank(message = "服务内容为必填项", groups = { Save.class })
private String serviceContent;
/**
* 服务时间
*/
@NotNull(message = "服务时间为必填项", groups = { Save.class })
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date serviceTime;
/**
* 负责人姓名
*/
private String principalName;
/**
* 备注
*/
private String remark;
/**
* 删除标识 0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

9
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java

@ -171,4 +171,13 @@ public interface EpmetHeartOpenFeignClient {
@PostMapping("/heart/icpartyunit/editpartyorcommunity")
Result editPartyOrCommunity(@RequestBody CheckStaffInfoResultDTO formDTO);
/**
* desc:根据来源id 删除需求 只删主表
* @param originId
* @param origin
* @return
*/
@PostMapping("/heart/userdemand/deleteByOriginId/{originId}/{origin}")
Result<Integer> deleteUserDemandByOriginId(@PathVariable("originId") String originId, @PathVariable("origin")String origin);
}

7
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java

@ -13,7 +13,6 @@ import com.epmet.dto.form.IcDemandFormDTO;
import com.epmet.dto.form.PartyUnitListFormDTO;
import com.epmet.dto.form.demand.DemandRecId;
import com.epmet.dto.form.demand.IcEventCommentToDemandFromDTO;
import com.epmet.dto.form.demand.ServiceItemSelectFormDTO;
import com.epmet.dto.form.demand.UserDemandNameQueryFormDTO;
import com.epmet.dto.form.resi.ResiVolunteerAuthenticateFormDTO;
import com.epmet.dto.form.resi.ResisByPolicyRulesFormDTO;
@ -21,7 +20,6 @@ import com.epmet.dto.form.resi.VolunteerCommonFormDTO;
import com.epmet.dto.result.CheckStaffInfoResultDTO;
import com.epmet.dto.result.PartyUnitListResultDTO;
import com.epmet.dto.result.demand.IcResiDemandDictDTO;
import com.epmet.dto.result.demand.OptionDTO;
import com.epmet.dto.result.resi.PageVolunteerInfoResultDTO;
import com.epmet.feign.EpmetHeartOpenFeignClient;
@ -172,4 +170,9 @@ public class EpmetHeartOpenFeignClientFallback implements EpmetHeartOpenFeignCli
public Result editPartyOrCommunity(CheckStaffInfoResultDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_HEART_SERVER, "editPartyOrCommunity", formDTO);
}
@Override
public Result<Integer> deleteUserDemandByOriginId(String originId, String origin) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_HEART_SERVER, "deleteUserDemandByOriginId", originId,origin);
}
}

171
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java

@ -18,34 +18,55 @@
package com.epmet.controller;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ExcelPoiUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.*;
import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.constants.ImportTaskConstants;
import com.epmet.dto.IcSocietyOrgDTO;
import com.epmet.dto.form.AddSocietyOrgFormDTO;
import com.epmet.dto.form.EditSocietyOrgFormDTO;
import com.epmet.dto.form.GetListSocietyOrgFormDTO;
import com.epmet.dto.form.ImportTaskCommonFormDTO;
import com.epmet.dto.form.demand.ServiceQueryFormDTO;
import com.epmet.dto.result.GetListSocietyOrgResultDTO;
import com.epmet.dto.result.ImportTaskCommonResultDTO;
import com.epmet.dto.result.demand.OptionDTO;
import com.epmet.excel.IcSocietyOrgExcel;
import com.epmet.excel.IcSocietyOrgExportExcel;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.service.IcSocietyOrgService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.nio.file.Path;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@ -58,11 +79,13 @@ import java.util.stream.Collectors;
@Slf4j
@RestController
@RequestMapping("societyorg")
public class IcSocietyOrgController {
public class IcSocietyOrgController implements ResultDataResolver {
private static final String DEFAULT_NO_IMG = "https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/20220826/38eb186191ab48fe8d3920b642b56e64.png";
@Autowired
private IcSocietyOrgService societyOrgService;
@Autowired
private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient;
/**
* @Author sun
* @Description 新增社会组织
@ -87,6 +110,19 @@ public class IcSocietyOrgController {
return new Result();
}
/**
* @Author sun
* @Description 删除社会组织
**/
@RequestMapping("detail/{id}")
public Result detail(@LoginUser TokenDto tokenDto, @PathVariable(value = "id") String id) {
IcSocietyOrgDTO icSocietyOrgDTO = societyOrgService.get(id);
if (StringUtils.isBlank(icSocietyOrgDTO.getImgUrl())){
icSocietyOrgDTO.setImgUrl(DEFAULT_NO_IMG);
}
return new Result().ok(icSocietyOrgDTO);
}
/**
* @Author sun
* @Description 删除社会组织
@ -129,14 +165,50 @@ public class IcSocietyOrgController {
**/
@PostMapping("export")
public void export(@LoginUser TokenDto tokenDto, @RequestBody GetListSocietyOrgFormDTO formDTO, HttpServletResponse response) throws Exception {
//废弃原来的导出
// formDTO.setCustomerId(tokenDto.getCustomerId());
// formDTO.setStaffId(tokenDto.getUserId());
// formDTO.setIsPage(false);
// GetListSocietyOrgResultDTO list = societyOrgService.getList(formDTO);
// ExcelUtils.exportExcelToTarget(response, null, list.getList(), IcSocietyOrgExportExcel.class);
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setStaffId(tokenDto.getUserId());
formDTO.setIsPage(false);
GetListSocietyOrgResultDTO list = societyOrgService.getList(formDTO);
ExcelUtils.exportExcelToTarget(response, null, list.getList(), IcSocietyOrgExcel.class);
ExcelWriter excelWriter = null;
formDTO.setPageNo(NumConstant.ONE);
formDTO.setPageSize(NumConstant.TEN_THOUSAND);
try {
String fileName = "社会组织" + DateUtils.format(new Date()) + ".xlsx";
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), IcSocietyOrgExportExcel.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build();
GetListSocietyOrgResultDTO data = null;
List<IcSocietyOrgExportExcel> list = null;
do {
data = societyOrgService.getList(formDTO);
list = ConvertUtils.sourceToTarget(data.getList(), IcSocietyOrgExportExcel.class);
formDTO.setPageNo(formDTO.getPageNo() + NumConstant.ONE);
excelWriter.write(list, writeSheet);
} while (org.apache.commons.collections4.CollectionUtils.isNotEmpty(list) && list.size() == formDTO.getPageSize());
} catch (EpmetException e) {
response.reset();
response.setCharacterEncoding("UTF-8");
response.setHeader("content-type", "application/json; charset=UTF-8");
PrintWriter printWriter = response.getWriter();
Result<Object> result = new Result<>().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),e.getMsg());
printWriter.write(JSON.toJSONString(result));
printWriter.close();
} catch (Exception e) {
log.error("社会组织export exception", e);
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
}
}
/**
* 废弃此方法用下面的importV2
* @Author sun
* @Description 九小场所下组织列表导入
**/
@ -168,4 +240,83 @@ public class IcSocietyOrgController {
return new Result().ok(str);
}
/**
* 下载社会组织导入模板
* @param response
* @throws IOException
*/
@RequestMapping(value = "import-template-download", method = {RequestMethod.GET, RequestMethod.POST})
public void downloadTemplate(HttpServletResponse response) throws IOException {
response.setCharacterEncoding("UTF-8");
response.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition");
response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("社区组织导入模板", "UTF-8") + ".xlsx");
InputStream is = this.getClass().getClassLoader().getResourceAsStream("templates/societyorg_import_template.xlsx");
try {
ServletOutputStream os = response.getOutputStream();
IOUtils.copy(is, os);
} finally {
if (is != null) {
is.close();
}
}
}
/**
*
* @param tokenDto
* @param file
* @return
*/
@PostMapping("importV2")
public Result importExcelV2(@LoginUser TokenDto tokenDto, @RequestPart("file") MultipartFile file) {
String userId = EpmetRequestHolder.getHeader(AppClientConstant.USER_ID);
// 1.暂存文件
String originalFilename = file.getOriginalFilename();
String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
Path fileSavePath;
try {
Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_society_org", "import");
fileSavePath = importPath.resolve(UUID.randomUUID().toString().concat(extName));
} catch (IOException e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【社会组织】创建临时存储文件失败:{}", errorMsg);
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "社会组织导入文件上传失败", "社会组织导入文件上传失败");
}
InputStream is = null;
FileOutputStream os = null;
try {
is = file.getInputStream();
os = new FileOutputStream(fileSavePath.toString());
IOUtils.copy(is, os);
} catch (Exception e) {
log.error("【社会组织】导入method exception", e);
} finally {
org.apache.poi.util.IOUtils.closeQuietly(is);
org.apache.poi.util.IOUtils.closeQuietly(os);
}
// 2.生成导入任务记录
ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO();
importTaskForm.setOperatorId(userId);
importTaskForm.setBizType(ImportTaskConstants.IC_SOCIETY_ORG);
importTaskForm.setOriginFileName(originalFilename);
ImportTaskCommonResultDTO rstData = getResultDataOrThrowsException(commonServiceOpenFeignClient.createImportTask(importTaskForm),
ServiceConstant.EPMET_COMMON_SERVICE,
EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),
"excel导入社会组织错误",
"社会组织导入失败");
// 3.执行导入
societyOrgService.execAsyncExcelImport(fileSavePath, rstData.getTaskId(),tokenDto.getCustomerId(),tokenDto.getUserId());
return new Result();
}
}

19
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcUserDemandRecController.java

@ -47,10 +47,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
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 javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
@ -399,5 +396,17 @@ public class IcUserDemandRecController implements ResultDataResolver {
return new Result();
}
/**
* desc:根据来源id 删除需求 只删主表
* @param originId
* @param origin
* @return
*/
@PostMapping("deleteByOriginId/{originId}/{origin}")
public Result<Integer> deleteByOriginId(@PathVariable("originId") String originId, @PathVariable("origin")String origin) {
Integer effectRow = icUserDemandRecService.deleteByOriginId(originId,origin);
return new Result().ok(effectRow);
}
}
}

8
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java

@ -22,6 +22,7 @@ import com.epmet.commons.tools.dto.form.mq.MqBaseFormDTO;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.IdCardRegexUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.constant.SystemMessageType;
@ -38,6 +39,7 @@ import com.epmet.dto.result.resi.ResiVolunteerInfoResultDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.send.SendMqMsgUtil;
import com.epmet.service.VolunteerInfoService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -72,6 +74,12 @@ public class ResiVolunteerController {
formDTO.setUserId(tokenDto.getUserId());
formDTO.setCustomerId(tokenDto.getCustomerId());
ValidatorUtils.validateEntity(formDTO, ResiVolunteerAuthenticateFormDTO.AddUserShowGroup.class, ResiVolunteerAuthenticateFormDTO.AddUserInternalGroup.class);
if (StringUtils.isNotBlank(formDTO.getIdNum())){
boolean b = IdCardRegexUtils.validateIdCard(formDTO.getIdNum());
if (!b){
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"请输入正确的证件号","请输入正确的证件号");
}
}
volunteerInfoService.authenticate(formDTO);
//发送志愿者人员消息变动

317
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkdiaryServiceController.java

@ -0,0 +1,317 @@
package com.epmet.controller;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.EpmetRequestHolder;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.FileUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.constants.ImportTaskConstants;
import com.epmet.dto.WorkdiaryServiceTypeDTO;
import com.epmet.dto.form.workdiaryservice.WorkdiaryServiceQueryFormDTO;
import com.epmet.dto.result.ImportTaskCommonResultDTO;
import com.epmet.dto.result.WorkdiaryServiceRecordDTO;
import com.epmet.entity.WorkdiaryServiceTypeExcel;
import com.epmet.service.WorkdiaryServiceRecordService;
import com.epmet.service.WorkdiaryServiceTypeService;
import com.epmet.utils.ImportTaskUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.file.Path;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
/**
* 工作日志(服务)
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Slf4j
@RestController
@RequestMapping("workdiaryService")
public class WorkdiaryServiceController implements ResultDataResolver {
@Autowired
private WorkdiaryServiceRecordService workdiaryServiceRecordService;
@Autowired
private WorkdiaryServiceTypeService workdiaryServiceTypeService;
@Autowired
private ExecutorService executorService;
/**
* 记录-分页
* @return
*/
@RequestMapping("/record/page")
public Result<PageData<WorkdiaryServiceRecordDTO>> recordPage(@RequestBody WorkdiaryServiceQueryFormDTO query){
String gridId = query.getGridId();
Short serviceType = query.getServiceType();
String applicantName = query.getApplicantName();
String applicantAddress = query.getApplicantAddress();
String serviceContent = query.getServiceContent();
String applicantMobile = query.getApplicantMobile();
Integer pageNo = query.getPageNo();
Integer pageSize = query.getPageSize();
Date startTime = query.getServiceTimeStart();
Date endTime = query.getServiceTimeEnd();
PageData<WorkdiaryServiceRecordDTO> page = workdiaryServiceRecordService.page(
gridId, serviceType, applicantName, applicantAddress, serviceContent, applicantMobile, startTime, endTime, pageNo, pageSize);
return new Result<PageData<WorkdiaryServiceRecordDTO>>().ok(page);
}
/**
* 记录-单条
* @param id
* @return
*/
@RequestMapping(value = "/record/{id}/detail",method = {RequestMethod.POST,RequestMethod.GET})
public Result<WorkdiaryServiceRecordDTO> recordGet(@PathVariable("id") String id){
WorkdiaryServiceRecordDTO data = workdiaryServiceRecordService.get(id);
return new Result<WorkdiaryServiceRecordDTO>().ok(data);
}
/**
* 记录-保存
* @return
*/
@NoRepeatSubmit
@PostMapping("/record/save")
public Result recordSave(@RequestBody WorkdiaryServiceRecordDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, WorkdiaryServiceRecordDTO.Save.class);
workdiaryServiceRecordService.save(dto);
return new Result();
}
/**
* 记录-更新
* @param
* @return
*/
@NoRepeatSubmit
@PostMapping("/record/update")
public Result recordUpdate(@RequestBody WorkdiaryServiceRecordDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, WorkdiaryServiceRecordDTO.Update.class);
workdiaryServiceRecordService.update(dto);
return new Result();
}
/**
* 记录-删除
* @return
*/
@PostMapping("/record/delete")
public Result recordDelete(@RequestBody String[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
workdiaryServiceRecordService.delete(ids);
return new Result();
}
/**
* 记录-导出
* @return
*/
@PostMapping("/record/export")
public void recordExport(@RequestBody WorkdiaryServiceQueryFormDTO query, HttpServletResponse response) throws Exception {
String gridId = query.getGridId();
Short serviceType = query.getServiceType();
String applicantName = query.getApplicantName();
String applicantAddress = query.getApplicantAddress();
String serviceContent = query.getServiceContent();
String applicantMobile = query.getApplicantMobile();
Date serviceTimeStart = query.getServiceTimeStart();
Date serviceTimeEnd = query.getServiceTimeEnd();
workdiaryServiceRecordService.export(gridId, serviceType, applicantName, applicantAddress, serviceContent,
applicantMobile, serviceTimeStart, serviceTimeEnd, response);
}
/**
* 下载模板
* @return
*/
@RequestMapping("/record/downloadTemplate")
public void downloadTemplate(HttpServletResponse response) throws UnsupportedEncodingException {
response.setCharacterEncoding("UTF-8");
response.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition");
response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("工作日志导入模板", "UTF-8") + ".xlsx");
try (InputStream is = this.getClass().getClassLoader().getResourceAsStream("templates/workdiary_service_import.xlsx");
ServletOutputStream os = response.getOutputStream()) {
IOUtils.copy(is, os);
} catch (IOException e) {
log.error("【工作日志】下载模板-IO错误:{}", ExceptionUtils.getErrorStackTrace(e));
}
}
/**
* 记录导入
* @param file
*/
@PostMapping("/record/import")
public Result recordImport(MultipartFile file) {
if (file == null) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, "请选择文件");
}
// 格式校验
// 只接受如下两种格式后缀
String originFileName = file.getOriginalFilename();
String suffix = originFileName.substring(originFileName.lastIndexOf("."));
if (StringUtils.isBlank(suffix) || (!".xlsx".equals(suffix) && !".xls".equals(suffix))) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, "只支持.xls和.xlsx两种格式");
}
// 创建保存目录
Path fileSavePath = null;
try {
Path saveDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("workdiary", "import", EpmetRequestHolder.getLoginUserId());
fileSavePath = saveDir.resolve(System.currentTimeMillis() + suffix);
} catch (IOException e) {
e.printStackTrace();
}
// 将文件保存到本地
try (FileOutputStream fos = new FileOutputStream(fileSavePath.toString());
InputStream is = file.getInputStream()) {
IOUtils.copy(is, fos);
} catch (Exception e) {
log.error("【书记日志】上传-保存文件到本地失败:{}", ExceptionUtils.getErrorStackTrace(e));
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode());
}
// 创建导入记录
ImportTaskCommonResultDTO itResult = getResultDataOrThrowsException(ImportTaskUtils.createImportTask(originFileName, ImportTaskConstants.BIZ_TYPE_WORK_DIARY_IMPORT),
ServiceConstant.EPMET_COMMON_SERVICE, EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "有导入操作正在进行", "有导入操作正在进行");
// 执行异步导入
Path finalFileSavePath = fileSavePath;
CompletableFuture.runAsync(() -> {
workdiaryServiceRecordService.createImportTaskAndExecuteImport(finalFileSavePath, originFileName, itResult.getTaskId());
}, executorService);
return new Result();
}
/**
* 服务类型-分页
* @return
*/
@RequestMapping("/serviceType/page")
public Result<PageData<WorkdiaryServiceTypeDTO>> serviceTypePage(@RequestBody PageFormDTO input){
PageData<WorkdiaryServiceTypeDTO> page = workdiaryServiceTypeService.page(null, input.getPageNo(), input.getPageSize());
return new Result<PageData<WorkdiaryServiceTypeDTO>>().ok(page);
}
/**
* 列出启用了的类型列表
* @param input
* @return
*/
@RequestMapping("/serviceType/avaliableList")
public Result<PageData<WorkdiaryServiceTypeDTO>> listAvaliableServiceType(@RequestBody PageFormDTO input){
PageData<WorkdiaryServiceTypeDTO> page = workdiaryServiceTypeService.listAvaliableServiceType(input.getPageNo(), input.getPageSize());
return new Result<PageData<WorkdiaryServiceTypeDTO>>().ok(page);
}
/**
* 服务类型-单条
* @return
*/
@RequestMapping(value = "/serviceType/{id}/detail",method = {RequestMethod.POST,RequestMethod.GET})
public Result<WorkdiaryServiceTypeDTO> serviceTypeGet(@PathVariable("id") String id){
WorkdiaryServiceTypeDTO data = workdiaryServiceTypeService.get(id);
return new Result<WorkdiaryServiceTypeDTO>().ok(data);
}
/**
* 服务类型-保存
* @return
*/
@NoRepeatSubmit
@PostMapping("/serviceType/save")
public Result serviceTypeSave(@RequestBody WorkdiaryServiceTypeDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, WorkdiaryServiceTypeDTO.Save.class);
workdiaryServiceTypeService.save(dto);
return new Result();
}
/**
* 服务类型-更新
* @return
*/
@NoRepeatSubmit
@PostMapping("/serviceType/update")
public Result serviceTypeUpdate(@RequestBody WorkdiaryServiceTypeDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, WorkdiaryServiceTypeDTO.Update.class);
workdiaryServiceTypeService.update(dto);
return new Result();
}
/**
* 服务类型-删除
* @return
*/
@PostMapping("/serviceType/delete")
public Result serviceTypeDelete(@RequestBody String[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
int failCount = workdiaryServiceTypeService.delete(ids);
if (failCount == 0) {
return new Result();
} else {
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "部分条目已经被使用,未完全删除,失败条目:" + failCount);
}
}
/**
* 服务类型-导出
* @return
*/
@GetMapping("/serviceType/export")
public void serviceTypeExport(@RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
List<WorkdiaryServiceTypeDTO> list = workdiaryServiceTypeService.list(params);
ExcelUtils.exportExcelToTarget(response, null, list, WorkdiaryServiceTypeExcel.class);
}
}

4
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/IcSocietyOrgDao.java

@ -59,4 +59,8 @@ public interface IcSocietyOrgDao extends BaseDao<IcSocietyOrgEntity> {
* @Description 查询当前组织下的社会组织数据
**/
List<IcSocietyOrgDTO> getByAgencyId(@Param("agencyId") String agencyId);
List<IcSocietyOrgEntity> selectListForUniqueName(@Param("agencyId") String agencyId,
@Param("societyName") String societyName,
@Param("id") String id);
}

16
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/WorkdiaryServiceRecordDao.java

@ -0,0 +1,16 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.WorkdiaryServiceRecordEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 工作日志(服务)-记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Mapper
public interface WorkdiaryServiceRecordDao extends BaseDao<WorkdiaryServiceRecordEntity> {
}

23
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/WorkdiaryServiceTypeDao.java

@ -0,0 +1,23 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.WorkdiaryServiceTypeEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 工作日志(服务)-服务类型
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Mapper
public interface WorkdiaryServiceTypeDao extends BaseDao<WorkdiaryServiceTypeEntity> {
/**
* 该客户最大的type是啥
* @param customerId
* @return
*/
Short getMaxType(@Param("customerId") String customerId);
}

9
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/IcSocietyOrgEntity.java

@ -73,6 +73,11 @@ public class IcSocietyOrgEntity extends BaseEpmetEntity {
private String mobile;
/**
* 服务时间
*/
private String serviceTimeStr;
/**
* 起始服务时间
*/
private Date serviceStartTime;
@ -87,6 +92,10 @@ public class IcSocietyOrgEntity extends BaseEpmetEntity {
*/
private String adminStaffId;
/**
* 图片地址
*/
private String imgUrl;
/**
* 地址
*/

98
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/WorkdiaryServiceRecordEntity.java

@ -0,0 +1,98 @@
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 工作日志(服务)-记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("workdiary_service_record")
@NoArgsConstructor
@AllArgsConstructor
public class WorkdiaryServiceRecordEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* 服务类型
*/
private Short serviceType;
/**
* 单位ID
*/
private String agencyId;
/**
* 网格ID
*/
private String gridId;
/**
* 组织ID path
*/
private String orgIdPath;
/**
* 申请人ID
*/
private String applicantId;
/**
* 证件号
*/
private String applicantIdCard;
/**
* 申请人姓名
*/
private String applicantName;
/**
* 申请人住址
*/
private String applicantAddress;
/**
* 申请人联系电话
*/
private String applicantMobile;
/**
* 服务内容
*/
private String serviceContent;
/**
* 服务时间
*/
private Date serviceTime;
/**
* 负责人姓名
*/
private String principalName;
/**
* 备注
*/
private String remark;
}

44
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/WorkdiaryServiceTypeEntity.java

@ -0,0 +1,44 @@
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 工作日志(服务)-服务类型
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("workdiary_service_type")
public class WorkdiaryServiceTypeEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* 服务类型
*/
private Short serviceType;
/**
* 服务类型名称
*/
private String serviceTypeName;
/**
* 是否启用0禁用1启用
*/
private Short enabled;
}

51
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/WorkdiaryServiceTypeExcel.java

@ -0,0 +1,51 @@
package com.epmet.entity;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
import java.util.Date;
/**
* 工作日志(服务)-服务类型
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Data
public class WorkdiaryServiceTypeExcel {
@Excel(name = "主键")
private String id;
@Excel(name = "客户id")
private String customerId;
@Excel(name = "服务类型")
private String serviceType;
@Excel(name = "服务类型名称")
private String serviceName;
@Excel(name = "是否启用。0:禁用,1:启用")
private Integer enabled;
@Excel(name = "删除标识 0.未删除 1.已删除")
private Integer delFlag;
@Excel(name = "乐观锁")
private Integer revision;
@Excel(name = "创建人")
private String createdBy;
@Excel(name = "创建时间")
private Date createdTime;
@Excel(name = "更新人")
private String updatedBy;
@Excel(name = "更新时间")
private Date updatedTime;
}

27
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExcel.java

@ -34,37 +34,28 @@ import java.io.Serializable;
@Data
public class IcSocietyOrgExcel extends ExcelVerifyInfo implements Serializable {
@Excel(name = "组织名称")
@Excel(name = "所属组织")
@NotBlank(message = "不能为空")
private String agencyName;
@Excel(name = "社会组织名称")
@Excel(name = "组织名称")
@NotBlank(message = "不能为空")
@Length(max=50,message = "不能超过50个字")
private String societyName;
@Excel(name = "服务事项")
@Excel(name = "服务内容")
@NotBlank(message = "不能为空")
@Length(max=1000,message = "不能超过1000个字")
private String serviceMatters;
@Excel(name = "负责人")
@NotBlank(message = "不能为空")
@Length(max=20,message = "不能超过20个字")
private String personInCharge;
@Excel(name = "负责人电话")
@Excel(name = "服务电话")
@NotBlank(message = "不能为空")
@Length(max=11,message = "不能超过11个字")
private String mobile;
@Excel(name = "起始服务时间")
@Excel(name = "服务时间")
@NotBlank(message = "不能为空")
private String serviceStartTime;
@Excel(name = "终止服务时间")
@NotBlank(message = "不能为空")
private String serviceEndTime;
private String serviceTimeStr;
@Excel(name = "管理员姓名")
private String adminStaffName;
@ -72,10 +63,4 @@ public class IcSocietyOrgExcel extends ExcelVerifyInfo implements Serializable {
@Excel(name = "地址")
private String address;
@Excel(name = "经度")
private String longitude;
@Excel(name = "维度")
private String latitude;
}

42
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExportExcel.java

@ -0,0 +1,42 @@
package com.epmet.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
/**
* @Description
* @Author yzm
* @Date 2022/8/24 8:41
*/
@Data
public class IcSocietyOrgExportExcel {
@ExcelProperty(value = "所属组织")
@ColumnWidth(30)
private String agencyName;
@ExcelProperty(value = "组织名称")
@ColumnWidth(30)
private String societyName;
@ColumnWidth(50)
@ExcelProperty(value = "服务内容")
private String serviceMatters;
@ColumnWidth(20)
@ExcelProperty(value = "服务电话")
private String mobile;
@ColumnWidth(20)
@ExcelProperty(value = "服务时间")
private String serviceTimeStr;
@ColumnWidth(20)
@ExcelProperty(value = "管理员姓名")
private String adminStaffName;
/*@ColumnWidth(30)
@ExcelProperty(value = "地址")
private String address;*/
}

74
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgImportExcelDTO.java

@ -0,0 +1,74 @@
package com.epmet.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
* @Description
* @Author yzm
* @Date 2022/8/24 10:46
*/
@Data
public class IcSocietyOrgImportExcelDTO {
@ExcelProperty(value = "组织名称")
@NotBlank(message = "组织名称不能为空")
@Length(max=50,message = "组织名称不能超过50个字")
private String societyName;
@ExcelProperty(value = "服务内容")
@NotBlank(message = "服务内容不能为空")
@Length(max=1000,message = "服务内容不能超过1000个字")
private String serviceMatters;
@ExcelProperty(value = "服务电话")
@NotBlank(message = "服务电话不能为空")
private String mobile;
@ExcelProperty(value = "服务时间")
@NotBlank(message = "服务时间不能为空")
private String serviceTimeStr;
@ExcelProperty(value = "管理员姓名")
private String adminStaffName;
@ExcelProperty(value = "地址")
private String address;
@Data
public static class ErrorRow {
@ColumnWidth(40)
@ExcelProperty(value = "组织名称")
private String societyName;
@ColumnWidth(50)
@ExcelProperty(value = "服务内容")
private String serviceMatters;
@ColumnWidth(20)
@ExcelProperty(value = "服务电话")
private String mobile;
@ColumnWidth(25)
@ExcelProperty(value = "服务时间")
private String serviceTimeStr;
@ColumnWidth(20)
@ExcelProperty(value = "管理员姓名")
private String adminStaffName;
@ColumnWidth(50)
@ExcelProperty(value = "地址")
private String address;
@ColumnWidth(60)
@ExcelProperty("错误信息")
private String errorInfo;
}
}

78
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/WorkdiaryServiceRecordExcel.java

@ -0,0 +1,78 @@
package com.epmet.excel;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.poi.excel.converter.EasyExcelDateConverter;
import com.epmet.dto.result.WorkdiaryServiceRecordDTO;
import com.epmet.excel.converter.WorkDiaryServiceEasyExcelDateConverter;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* 工作日志(服务)-记录 excel
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Data
@NoArgsConstructor
public class WorkdiaryServiceRecordExcel {
@NotBlank(message = "所属网格必填")
@ColumnWidth(25)
@ExcelProperty(value = "所属网格")
private String gridName;
@NotBlank(message = "服务类型必填")
@ColumnWidth(15)
@ExcelProperty(value = "服务类型")
private String serviceTypeName;
@NotBlank(message = "申请人必填")
@ColumnWidth(10)
@ExcelProperty(value = "申请人")
private String applicantName;
@ColumnWidth(10)
@ExcelProperty(value = "证件号")
private String applicantIdCard;
@ColumnWidth(25)
@ExcelProperty(value = "住址")
private String applicantAddress;
@NotBlank(message = "服务内容必填")
@ColumnWidth(25)
@ExcelProperty(value = "服务内容")
private String serviceContent;
@ColumnWidth(15)
@ExcelProperty(value = "联系电话")
private String applicantMobile;
@ColumnWidth(10)
@ExcelProperty(value = "负责人")
private String principalName;
@NotNull(message = "服务时间必填")
@ColumnWidth(20)
@ExcelProperty(value = "服务时间", converter = WorkDiaryServiceEasyExcelDateConverter.class)
private Date serviceTime;
@ColumnWidth(20)
@ExcelProperty(value = "备注")
private String remark;
public WorkdiaryServiceRecordExcel(WorkdiaryServiceRecordDTO dto) {
BeanUtil.copyProperties(dto, this);
//this.serviceTime = DateUtils.format(dto.getServiceTime());
}
}

59
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/converter/WorkDiaryServiceEasyExcelDateConverter.java

@ -0,0 +1,59 @@
package com.epmet.excel.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.Date;
/**
* 框架easyexcel
* 目的工作日志(服务)对服务时间日期类型的转换
*/
public class WorkDiaryServiceEasyExcelDateConverter implements Converter<Date> {
private static final String PATTERN_YYYY_MM_DD = "yyyy-MM-dd";
/**
* excel内容转化为java时间
* @param cellData
* @param contentProperty
* @param globalConfiguration
* @return
* @throws Exception
*/
public Date convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
if (cellData.getType() == CellDataTypeEnum.NUMBER) {
// 数字类型,是1900-01-03到excel中数据日期的天数差值
LocalDateTime localDate = LocalDateTime.of(1900, 1, 1, 0, 0, 0)
// 不知为何,这个日期差值,多了2天,需要减去
.minus(2L, ChronoUnit.DAYS)
.plus(cellData.getNumberValue().longValue(), ChronoUnit.DAYS);
return Date.from(localDate.atZone(ZoneId.systemDefault()).toInstant());
} else {
// 字符串,正常格式化
Date dateData = new SimpleDateFormat(PATTERN_YYYY_MM_DD).parse(cellData.getStringValue());
return dateData;
}
}
/**
* java日期转为excel内容
* @param value
* @param contentProperty
* @param globalConfiguration
* @return
* @throws Exception
*/
public WriteCellData<?> convertToExcelData(Date value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
String dataStr = new SimpleDateFormat(PATTERN_YYYY_MM_DD).format(value);
return new WriteCellData(dataStr);
}
}

157
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/handler/IcSocietyOrgExcelImportListener.java

@ -0,0 +1,157 @@
package com.epmet.excel.handler;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.ValidateException;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.ObjectUtil;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.entity.IcSocietyOrgEntity;
import com.epmet.excel.IcSocietyOrgImportExcelDTO;
import com.epmet.service.impl.IcSocietyOrgServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description
* @Author yzm
* @Date 2022/8/24 11:42
*/
@Slf4j
public class IcSocietyOrgExcelImportListener implements ReadListener<IcSocietyOrgImportExcelDTO> {
// 最大条数阈值
public static final int MAX_THRESHOLD = 2;
private String currentCustomerId;
/**
* 当前操作用户
*/
private CustomerStaffInfoCacheResult staffInfo;
private IcSocietyOrgServiceImpl icSocietyOrgService;
private List<IcSocietyOrgImportExcelDTO.ErrorRow> errorRows = new ArrayList<>();
/**
* 要插入的数据
*/
private List<IcSocietyOrgEntity> insertDatas = new ArrayList<>();
/**
* 根据组织名称更新的数据
*/
private List<IcSocietyOrgEntity> updateDatas = new ArrayList<>();
private Map<String,String> staffMap=new HashMap<>();
public IcSocietyOrgExcelImportListener(String customerId, CustomerStaffInfoCacheResult staffInfo, IcSocietyOrgServiceImpl icSocietyOrgService, Map<String,String> staffMap) {
this.currentCustomerId = customerId;
this.staffInfo = staffInfo;
this.icSocietyOrgService = icSocietyOrgService;
this.staffMap=staffMap;
}
@Override
public void invoke(IcSocietyOrgImportExcelDTO data, AnalysisContext analysisContext) {
try {
// log.warn("有数据吗?"+JSON.toJSONString(data));
// 不能为空先校验数据
ValidatorUtils.validateEntity(data);
// 去除空格
ObjectUtil.objectToTrim(data);
IcSocietyOrgEntity icSocietyOrgEntity = ConvertUtils.sourceToTarget(data, IcSocietyOrgEntity.class);
icSocietyOrgEntity.setCustomerId(currentCustomerId);
icSocietyOrgEntity.setAgencyId(staffInfo.getAgencyId());
icSocietyOrgEntity.setPids(staffInfo.getAgencyPIds());
if(StringUtils.isNotBlank(data.getAdminStaffName())){
String adminStaffId = null;
for(String key:staffMap.keySet()){
if (data.getAdminStaffName().equals(staffMap.get(key))) {
adminStaffId=key;
break;
}
}
if (StringUtils.isBlank(adminStaffId)) {
String msg = String.format("当前组织下没有【%s】", data.getAdminStaffName());
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), msg, msg);
}
icSocietyOrgEntity.setAdminStaffId(adminStaffId);
}
//网格id+场所名称
List<IcSocietyOrgEntity> originList = icSocietyOrgService.selectForUniqueName(icSocietyOrgEntity.getAgencyId(), icSocietyOrgEntity.getSocietyName(), null);
if(CollectionUtils.isEmpty(originList)){
insertDatas.add(icSocietyOrgEntity);
}else{
IcSocietyOrgEntity origin=originList.get(NumConstant.ZERO);
icSocietyOrgEntity.setId(origin.getId());
updateDatas.add(icSocietyOrgEntity);
}
if (insertDatas.size() == MAX_THRESHOLD) {
execPersist();
}
if (updateDatas.size() == MAX_THRESHOLD) {
execPersist();
}
} catch (Exception e) {
String errorMsg = null;
if (e instanceof ValidateException) {
errorMsg = ((ValidateException) e).getMsg();
}else if(e instanceof EpmetException){
errorMsg = ((EpmetException) e).getMsg();
}else {
errorMsg = "未知错误";
log.error("【社会组织导入】出错:{}", ExceptionUtils.getErrorStackTrace(e));
}
IcSocietyOrgImportExcelDTO.ErrorRow errorRow = new IcSocietyOrgImportExcelDTO.ErrorRow();
errorRow.setSocietyName(data.getSocietyName());
errorRow.setServiceMatters(data.getServiceMatters());
errorRow.setMobile(data.getMobile());
errorRow.setServiceTimeStr(data.getServiceTimeStr());
errorRow.setAdminStaffName(data.getAdminStaffName());
errorRow.setAddress(data.getAddress());
errorRow.setErrorInfo(errorMsg);
errorRows.add(errorRow);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
log.info("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆");
// 最后几条达不到阈值,这里必须再调用一次
execPersist();
}
/**
* 执行持久化
*/
private void execPersist() {
try {
if (CollectionUtils.isNotEmpty(insertDatas)) {
icSocietyOrgService.insertBatch(insertDatas);
}
if (CollectionUtils.isNotEmpty(updateDatas)) {
icSocietyOrgService.updateBatchById(updateDatas);
}
} finally {
insertDatas.clear();
updateDatas.clear();
}
}
/**
* 获取错误行
*
* @return
*/
public List<IcSocietyOrgImportExcelDTO.ErrorRow> getErrorRows() {
return errorRows;
}
}

54
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/listener/WorkdiaryServiceImportListener.java

@ -0,0 +1,54 @@
package com.epmet.excel.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.excel.WorkdiaryServiceRecordExcel;
import com.epmet.service.WorkdiaryServiceRecordService;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
* 工作日志-导入-监听器
*/
@Slf4j
public class WorkdiaryServiceImportListener extends AnalysisEventListener<WorkdiaryServiceRecordExcel> {
/**
* 200 一批执行导入
*/
public static final Integer BATCH_SIZE = 200;
/**
* 数据列表
*/
private List<WorkdiaryServiceRecordExcel> datas = new ArrayList<>();
private WorkdiaryServiceRecordService workdiaryServiceRecordService;
public WorkdiaryServiceImportListener(WorkdiaryServiceRecordService workdiaryServiceRecordService) {
this.workdiaryServiceRecordService = workdiaryServiceRecordService;
}
@Override
public void invoke(WorkdiaryServiceRecordExcel data, AnalysisContext context) {
datas.add(data);
if (datas.size() >= BATCH_SIZE) {
// 达到批量阈值,执行一次导入
try {
workdiaryServiceRecordService.executeBatchImport(datas);
} catch (Exception e) {
log.error("【工作日志】导入-发生未知错误:{}", ExceptionUtils.getErrorStackTrace(e));
} finally {
datas.clear();
}
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
workdiaryServiceRecordService.executeBatchImport(datas);
}
}

30
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/redis/WorkdiaryServiceRecordRedis.java

@ -0,0 +1,30 @@
package com.epmet.redis;
import com.epmet.commons.tools.redis.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 工作日志(服务)-记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Component
public class WorkdiaryServiceRecordRedis {
@Autowired
private RedisUtils redisUtils;
public void delete(Object[] ids) {
}
public void set(){
}
public String get(String id){
return null;
}
}

30
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/redis/WorkdiaryServiceTypeRedis.java

@ -0,0 +1,30 @@
package com.epmet.redis;
import com.epmet.commons.tools.redis.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 工作日志(服务)-服务类型
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Component
public class WorkdiaryServiceTypeRedis {
@Autowired
private RedisUtils redisUtils;
public void delete(Object[] ids) {
}
public void set(){
}
public String get(String id){
return null;
}
}

10
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcSocietyOrgService.java

@ -28,6 +28,7 @@ import com.epmet.dto.result.demand.OptionDTO;
import com.epmet.entity.IcSocietyOrgEntity;
import com.epmet.excel.IcSocietyOrgExcel;
import java.nio.file.Path;
import java.text.ParseException;
import java.util.List;
@ -79,4 +80,13 @@ public interface IcSocietyOrgService extends BaseService<IcSocietyOrgEntity> {
List<IcSocietyOrgEntity> queryListById(List<String> socialOrgIds);
IcSocietyOrgDTO get(String id);
/**
* 导入社会组织之前的废弃了
* @param fileSavePath
* @param taskId
* @param customerId
* @param userId
*/
void execAsyncExcelImport(Path fileSavePath, String taskId, String customerId, String userId);
}

11
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcUserDemandRecService.java

@ -265,4 +265,13 @@ public interface IcUserDemandRecService extends BaseService<IcUserDemandRecEntit
Integer selectCountByServerId(String serverId);
ServerInfoDTO queryServiceName(String serverId, String serviceType);
}
/**
* desc:根据来源id 删除需求 只删主表
* @param originId
* @param origin
* @return
*/
Integer deleteByOriginId(String originId, String origin);
}

96
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/WorkdiaryServiceRecordService.java

@ -0,0 +1,96 @@
package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.form.workdiaryservice.WorkdiaryServiceQueryFormDTO;
import com.epmet.dto.result.WorkdiaryServiceRecordDTO;
import com.epmet.entity.WorkdiaryServiceRecordEntity;
import com.epmet.excel.WorkdiaryServiceRecordExcel;
import javax.servlet.http.HttpServletResponse;
import java.nio.file.Path;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 工作日志(服务)-记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
public interface WorkdiaryServiceRecordService extends BaseService<WorkdiaryServiceRecordEntity> {
/**
* 默认分页
*
* @param params
* @return PageData<WorkdiaryServiceRecordDTO>
* @author generator
* @date 2022-08-23
*/
PageData<WorkdiaryServiceRecordDTO> page(Map<String, Object> params);
PageData<WorkdiaryServiceRecordDTO> page(String gridId, Short serviceType, String applicantName, String applicantAddress,
String serviceContent, String applicantMobile, Date serviceTimeStart, Date serviceTimeEnd,
Integer pageNo, Integer pageSize);
/**
* 默认查询
*
* @param params
* @return java.util.List<WorkdiaryServiceRecordDTO>
* @author generator
* @date 2022-08-23
*/
List<WorkdiaryServiceRecordDTO> list(Map<String, Object> params);
/**
* 单条查询
*
* @param id
* @return WorkdiaryServiceRecordDTO
* @author generator
* @date 2022-08-23
*/
WorkdiaryServiceRecordDTO get(String id);
/**
* 默认保存
*
* @param dto
* @return void
* @author generator
* @date 2022-08-23
*/
void save(WorkdiaryServiceRecordDTO dto);
/**
* 默认更新
*
* @param dto
* @return void
* @author generator
* @date 2022-08-23
*/
void update(WorkdiaryServiceRecordDTO dto);
/**
* 批量删除
*
* @param ids
* @return void
* @author generator
* @date 2022-08-23
*/
void delete(String[] ids);
void export(String gridId, Short serviceType, String applicantName, String applicantAddress,
String serviceContent, String applicantMobile, Date serviceTimeStart, Date serviceTimeEnd, HttpServletResponse response);
Integer selectRecordCountOfType(Short serviceType);
void createImportTaskAndExecuteImport(Path fileSavePath, String originFileName, String taskId);
void executeBatchImport(List<WorkdiaryServiceRecordExcel> datas);
}

81
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/WorkdiaryServiceTypeService.java

@ -0,0 +1,81 @@
package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.WorkdiaryServiceTypeDTO;
import com.epmet.entity.WorkdiaryServiceTypeEntity;
import java.util.List;
import java.util.Map;
/**
* 工作日志(服务)-服务类型
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
public interface WorkdiaryServiceTypeService extends BaseService<WorkdiaryServiceTypeEntity> {
/**
* 默认分页
*
* @return PageData<WorkdiaryServiceTypeDTO>
* @author generator
* @date 2022-08-23
*/
PageData<WorkdiaryServiceTypeDTO> page(Short enabled, Integer pageNo, Integer pageSize);
/**
* 默认查询
*
* @param params
* @return java.util.List<WorkdiaryServiceTypeDTO>
* @author generator
* @date 2022-08-23
*/
List<WorkdiaryServiceTypeDTO> list(Map<String, Object> params);
List<WorkdiaryServiceTypeDTO> list(Short enabled, Integer pageNo, Integer pageSize);
/**
* 单条查询
*
* @param id
* @return WorkdiaryServiceTypeDTO
* @author generator
* @date 2022-08-23
*/
WorkdiaryServiceTypeDTO get(String id);
/**
* 默认保存
*
* @param dto
* @return void
* @author generator
* @date 2022-08-23
*/
void save(WorkdiaryServiceTypeDTO dto);
/**
* 默认更新
*
* @param dto
* @return void
* @author generator
* @date 2022-08-23
*/
void update(WorkdiaryServiceTypeDTO dto);
/**
* 批量删除
*
* @param ids
* @return void
* @author generator
* @date 2022-08-23
*/
int delete(String[] ids);
PageData<WorkdiaryServiceTypeDTO> listAvaliableServiceType(Integer pageNo, Integer pageSize);
}

244
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcSocietyOrgServiceImpl.java

@ -17,42 +17,58 @@
package com.epmet.service.impl;
import com.alibaba.excel.EasyExcel;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.FileUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.UserDemandConstant;
import com.epmet.constants.ImportTaskConstants;
import com.epmet.dao.IcSocietyOrgDao;
import com.epmet.dto.CustomerStaffDTO;
import com.epmet.dto.IcSocietyOrgDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.form.demand.ServiceQueryFormDTO;
import com.epmet.dto.result.GetListSocietyOrgResultDTO;
import com.epmet.dto.result.OrgInfoResultDTO;
import com.epmet.dto.result.SocietyOrgListResultDTO;
import com.epmet.dto.result.StaffSinGridResultDTO;
import com.epmet.dto.result.*;
import com.epmet.dto.result.demand.OptionDTO;
import com.epmet.entity.IcSocietyOrgEntity;
import com.epmet.excel.IcSocietyOrgExcel;
import com.epmet.excel.IcSocietyOrgImportExcelDTO;
import com.epmet.excel.handler.IcSocietyOrgExcelImportListener;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.feign.OssFeignClient;
import com.epmet.service.IcSocietyOrgService;
import com.epmet.service.IcUserDemandRecService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.entity.ContentType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -71,6 +87,10 @@ public class IcSocietyOrgServiceImpl extends BaseServiceImpl<IcSocietyOrgDao, Ic
private IcUserDemandRecService icUserDemandRecService;
@Autowired
private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Autowired
private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient;
@Autowired
private OssFeignClient ossFeignClient;
/**
* @Author sun
@ -80,6 +100,10 @@ public class IcSocietyOrgServiceImpl extends BaseServiceImpl<IcSocietyOrgDao, Ic
@Transactional(rollbackFor = Exception.class)
public void add(AddSocietyOrgFormDTO dto) {
IcSocietyOrgEntity entity = ConvertUtils.sourceToTarget(dto, IcSocietyOrgEntity.class);
//图片必填
if(dto.getImageList() != null&& StringUtils.isNotBlank(dto.getImageList()[0])){
entity.setImgUrl(dto.getImageList()[0]);
}
CustomerStaffInfoCacheResult staffInfoCache = CustomerStaffRedis.getStaffInfo(dto.getCustomerId(), dto.getStaffId());
entity.setAgencyId(staffInfoCache.getAgencyId());
entity.setPids(staffInfoCache.getAgencyPIds());
@ -97,6 +121,10 @@ public class IcSocietyOrgServiceImpl extends BaseServiceImpl<IcSocietyOrgDao, Ic
throw new RenException(String.format("修改社会组织信息失败,社会组织信息不存在,组织Id->%s", formDTO.getSocietyId()));
}
entity = ConvertUtils.sourceToTarget(formDTO, IcSocietyOrgEntity.class);
//图片必填
if(formDTO.getImageList() != null && StringUtils.isNotBlank(formDTO.getImageList()[0])){
entity.setImgUrl(formDTO.getImageList()[0]);
}
entity.setId(formDTO.getSocietyId());
baseDao.updateById(entity);
}
@ -115,14 +143,17 @@ public class IcSocietyOrgServiceImpl extends BaseServiceImpl<IcSocietyOrgDao, Ic
/**
* @Author sun
* @Description 社会组织列表查询
**/
*
* @return*/
@Override
public GetListSocietyOrgResultDTO getList(GetListSocietyOrgFormDTO formDTO) {
GetListSocietyOrgResultDTO resultDTO = new GetListSocietyOrgResultDTO();
CustomerStaffInfoCacheResult staffInfoCache = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
//2022.1.7 应产品要求 当前组织只能看到自己组织添加的社会组织数据,不允许看其他下级的
//formDTO.setPids(staffInfoCache.getAgencyPIds());
formDTO.setAgencyId(staffInfoCache.getAgencyId());
if(StringUtils.isBlank(formDTO.getAgencyId())){
formDTO.setAgencyId(staffInfoCache.getAgencyId());
}
//1.根据查询条件分页查询社会组织数据
PageInfo<SocietyOrgListResultDTO> result =
PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage()).doSelectPageInfo(() -> baseDao.getList(formDTO));
@ -134,14 +165,16 @@ public class IcSocietyOrgServiceImpl extends BaseServiceImpl<IcSocietyOrgDao, Ic
Map<String, Integer> pointMap = icUserDemandRecService.getServicePoint(formDTO.getCustomerId(), UserDemandConstant.SOCIAL_ORG);
//2.查询被绑定管理员信息
UserIdsFormDTO dto = new UserIdsFormDTO();
List<String> staffIdList = result.getList().stream().map(SocietyOrgListResultDTO::getAdminStaffId).collect(Collectors.toList());
staffIdList = staffIdList.stream().distinct().collect(Collectors.toList());
dto.setUserIds(staffIdList);
Result<List<StaffSinGridResultDTO>> listResult = epmetUserOpenFeignClient.getStaffInfoList(dto);
if (!listResult.success()) {
throw new RenException("获取工作人员基本信息失败......");
List<String> staffIdList = result.getList().stream().filter(u->StringUtils.isNotBlank(u.getAdminStaffId())).map(SocietyOrgListResultDTO::getAdminStaffId).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(staffIdList)){
staffIdList = staffIdList.stream().distinct().collect(Collectors.toList());
dto.setUserIds(staffIdList);
Result<List<StaffSinGridResultDTO>> listResult = epmetUserOpenFeignClient.getStaffInfoList(dto);
if (!listResult.success()) {
throw new RenException("获取工作人员基本信息失败......");
}
result.getList().stream().filter(f->StringUtils.isNotBlank(f.getAdminStaffId())).forEach(r -> listResult.getData().stream().filter(u -> r.getAdminStaffId().equals(u.getStaffId())).forEach(u -> r.setAdminStaffName(u.getStaffName())));
}
result.getList().forEach(r -> listResult.getData().stream().filter(u -> r.getAdminStaffId().equals(u.getStaffId())).forEach(u -> r.setAdminStaffName(u.getStaffName())));
//3.查询被绑定管理员信息
OrgInfoFormDTO org = new OrgInfoFormDTO();
@ -221,53 +254,59 @@ public class IcSocietyOrgServiceImpl extends BaseServiceImpl<IcSocietyOrgDao, Ic
if (CollectionUtils.isEmpty(list)) {
return numList;
}
Map<String, String> map=new HashMap<>();
//2.查询绑定的管理员信息
Set<String> staffNames = list.stream().map(item -> item.getAdminStaffName().trim()).collect(Collectors.toSet());
GetByRealNamesFormDTO dto = new GetByRealNamesFormDTO();
dto.setCustomerId(customerId);
dto.setRealNames(staffNames);
Result<List<CustomerStaffDTO>> staffResult = epmetUserOpenFeignClient.getByRealNames(dto);
if (!staffResult.success()) {
throw new RenException("获取工作人员基础信息失败......");
}
if (null == staffResult.getData()) {
Iterator<IcSocietyOrgExcel> iter = list.iterator();
while (iter.hasNext()) {
IcSocietyOrgExcel obj = iter.next();
numList.add(obj.getRowNum());
iterator.remove();
Set<String> staffNames = list.stream().filter(t -> StringUtils.isNotBlank(t.getAdminStaffName())).map(item -> item.getAdminStaffName().trim()).collect(Collectors.toSet());
if(!CollectionUtils.isEmpty(staffNames)){
GetByRealNamesFormDTO dto = new GetByRealNamesFormDTO();
dto.setCustomerId(customerId);
dto.setRealNames(staffNames);
Result<List<CustomerStaffDTO>> staffResult = epmetUserOpenFeignClient.getByRealNames(dto);
if (!staffResult.success()) {
throw new RenException("获取工作人员基础信息失败......");
}
return numList;
if (null == staffResult.getData()) {
Iterator<IcSocietyOrgExcel> iter = list.iterator();
while (iter.hasNext()) {
IcSocietyOrgExcel obj = iter.next();
numList.add(obj.getRowNum());
iterator.remove();
}
return numList;
}
map= staffResult.getData().stream().collect(Collectors.toMap(CustomerStaffDTO::getRealName, CustomerStaffDTO::getUserId));
}
Map<String, String> map = staffResult.getData().stream().collect(Collectors.toMap(CustomerStaffDTO::getRealName, CustomerStaffDTO::getUserId));
//3.遍历封装有效数据
List<IcSocietyOrgEntity> houseEntityList = new ArrayList<>();
Iterator<IcSocietyOrgExcel> iterator1 = list.iterator();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
while (iterator1.hasNext()) {
IcSocietyOrgExcel icHouseExcel = iterator1.next();
IcSocietyOrgExcel icSocietyOrgExcel = iterator1.next();
IcSocietyOrgEntity entity = new IcSocietyOrgEntity();
entity.setCustomerId(customerId);
entity.setAgencyId(staffInfoCache.getAgencyId());
entity.setPids(staffInfoCache.getAgencyPIds());
entity.setSocietyName(icHouseExcel.getSocietyName());
entity.setServiceMatters(icHouseExcel.getServiceMatters());
entity.setPersonInCharge(icHouseExcel.getPersonInCharge());
entity.setMobile(icHouseExcel.getMobile());
entity.setServiceStartTime(sdf.parse(icHouseExcel.getServiceStartTime()));
entity.setServiceEndTime(sdf.parse(icHouseExcel.getServiceEndTime()));
entity.setAdminStaffId(map.containsKey(icHouseExcel.getAdminStaffName().trim()) ? map.get(icHouseExcel.getAdminStaffName().trim()) : "");
if ("".equals(entity.getAdminStaffId())) {
numList.add(icHouseExcel.getRowNum());
log.warn(String.format("绑定的管理员不存在,管理员名称->%s,行号->%s", icHouseExcel.getAdminStaffName(), icHouseExcel.getRowNum()));
entity.setSocietyName(icSocietyOrgExcel.getSocietyName());
entity.setServiceMatters(icSocietyOrgExcel.getServiceMatters());
//负责人去掉
// entity.setPersonInCharge(icSocietyOrgExcel.getPersonInCharge());
entity.setMobile(icSocietyOrgExcel.getMobile());
//服务时间手动输入
entity.setServiceTimeStr(icSocietyOrgExcel.getServiceTimeStr());
// entity.setServiceStartTime(sdf.parse(icHouseExcel.getServiceStartTime()));
// entity.setServiceEndTime(sdf.parse(icHouseExcel.getServiceEndTime()));
entity.setAdminStaffId(MapUtils.isNotEmpty(map)&&map.containsKey(icSocietyOrgExcel.getAdminStaffName().trim()) ? map.get(icSocietyOrgExcel.getAdminStaffName().trim()) : "");
if (StringUtils.isBlank(entity.getAdminStaffId())) {
numList.add(icSocietyOrgExcel.getRowNum());
log.warn(String.format("绑定的管理员不存在,管理员名称->%s,行号->%s", icSocietyOrgExcel.getAdminStaffName(), icSocietyOrgExcel.getRowNum()));
iterator1.remove();
continue;
}
entity.setAddress(icHouseExcel.getAddress());
entity.setLongitude(icHouseExcel.getLongitude());
entity.setLatitude(icHouseExcel.getLatitude());
entity.setAddress(icSocietyOrgExcel.getAddress());
//经纬度不能导入
// entity.setLongitude(icHouseExcel.getLongitude());
// entity.setLatitude(icHouseExcel.getLatitude());
houseEntityList.add(entity);
}
@ -291,4 +330,115 @@ public class IcSocietyOrgServiceImpl extends BaseServiceImpl<IcSocietyOrgDao, Ic
return ConvertUtils.sourceToTarget(entity,IcSocietyOrgDTO.class);
}
}
/**
* 导入社会组织之前的废弃了
*
* @param filePath
* @param importTaskId
* @param customerId
* @param userId
*/
@Override
public void execAsyncExcelImport(Path filePath, String importTaskId,String customerId,String userId) {
try {
//获取当前登录用户所属组织id
CustomerStaffInfoCacheResult staffInfo= queryCurrentStaff(customerId,userId);
//当前组织下的人
AgencyIdFormDTO agencyIdFormDTO=new AgencyIdFormDTO();
agencyIdFormDTO.setAgencyId(staffInfo.getAgencyId());
Result<List<String>> staffIdsRes=govOrgOpenFeignClient.getAgencyStaffs(agencyIdFormDTO);
if (!staffIdsRes.success() || CollectionUtils.isEmpty(staffIdsRes.getData())) {
String msg = "查询当前组织下工作人员列表异常";
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), msg, msg);
}
Result<CustomerStaffListResultDTO> currentAgencyStaffs=epmetUserOpenFeignClient.getCustomerStaffList(staffIdsRes.getData());
if (!currentAgencyStaffs.success() || null == currentAgencyStaffs.getData() || CollectionUtils.isEmpty(currentAgencyStaffs.getData().getStaffList())) {
String msg = "查询当前组织下工作人员信息异常";
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), msg, msg);
}
List<StaffListResultDTO> staffList=currentAgencyStaffs.getData().getStaffList();
Map<String,String> staffMap=staffList.stream().collect(Collectors.toMap(StaffListResultDTO::getStaffId, StaffListResultDTO::getStaffName));
IcSocietyOrgExcelImportListener listener = new IcSocietyOrgExcelImportListener(customerId,staffInfo, this,staffMap);
EasyExcel.read(filePath.toFile(), IcSocietyOrgImportExcelDTO.class, listener).headRowNumber(1).sheet(0).doRead();
Path errorDescFile = null;
String errorDesFileUrl = null;
List<IcSocietyOrgImportExcelDTO.ErrorRow> errorRows = listener.getErrorRows();
boolean failed = errorRows.size() > 0;
if (failed) {
// 生成并上传错误文件
try {
// 文件生成
Path errorDescDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_enterprise", "import", "error_des");
String fileName = UUID.randomUUID().toString().concat(".xlsx");
errorDescFile = errorDescDir.resolve(fileName);
FileItemFactory factory = new DiskFileItemFactory(16, errorDescDir.toFile());
FileItem fileItem = factory.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), true, fileName);
OutputStream os = fileItem.getOutputStream();
EasyExcel.write(os, IcSocietyOrgImportExcelDTO.ErrorRow.class).sheet("导入失败列表").doWrite(errorRows);
// 文件上传oss
Result<UploadImgResultDTO> errorDesFileUploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem));
if (errorDesFileUploadResult.success()) {
errorDesFileUrl = errorDesFileUploadResult.getData().getUrl();
}
} finally {
if (Files.exists(errorDescFile)) {
Files.delete(errorDescFile);
}
}
}
ImportTaskCommonFormDTO importFinishTaskForm = new ImportTaskCommonFormDTO();
importFinishTaskForm.setTaskId(importTaskId);
importFinishTaskForm.setProcessStatus(failed ? ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL : ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS);
importFinishTaskForm.setOperatorId(userId);
importFinishTaskForm.setResultDesc("");
importFinishTaskForm.setResultDescFilePath(errorDesFileUrl);
Result result = commonServiceOpenFeignClient.finishImportTask(importFinishTaskForm);
if (!result.success()) {
log.error("【社会组织】finishImportTask失败");
}
} catch (Exception e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【社会组织】出错:{}", errorMsg);
ImportTaskCommonFormDTO importFinishTaskForm = new ImportTaskCommonFormDTO();
importFinishTaskForm.setTaskId(importTaskId);
importFinishTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
importFinishTaskForm.setOperatorId(userId);
importFinishTaskForm.setResultDesc("导入失败");
Result result = commonServiceOpenFeignClient.finishImportTask(importFinishTaskForm);
if (!result.success()) {
log.error("【社会组织】导入记录状态修改为'完成'失败");
}
} finally {
// 删除临时文件
if (Files.exists(filePath)) {
try {
Files.delete(filePath);
} catch (IOException e) {
log.error("method exception", e);
}
}
}
}
private CustomerStaffInfoCacheResult queryCurrentStaff(String customerId, String userId) {
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(customerId, userId);
if (null == staffInfo) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "查询工作人员缓存信息异常", EpmetErrorCode.SERVER_ERROR.getMsg());
}
return staffInfo;
}
public List<IcSocietyOrgEntity> selectForUniqueName(String agencyId, String societyName, String id) {
return baseDao.selectListForUniqueName(agencyId,societyName,id);
}
}

31
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcUserDemandRecServiceImpl.java

@ -19,6 +19,7 @@ package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.NumConstant;
@ -38,6 +39,7 @@ import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
import com.epmet.commons.tools.scan.param.TextScanParamDTO;
import com.epmet.commons.tools.scan.param.TextTaskDTO;
import com.epmet.commons.tools.scan.result.SyncScanResult;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.Result;
@ -113,6 +115,8 @@ public class IcUserDemandRecServiceImpl extends BaseServiceImpl<IcUserDemandRecD
private String textSyncScanMethod;
@Autowired
private GovProjectOpenFeignClient govProjectOpenFeignClient;
@Autowired
private LoginUserUtil loginUserUtil;
@Override
@ -467,6 +471,7 @@ public class IcUserDemandRecServiceImpl extends BaseServiceImpl<IcUserDemandRecD
* @param serviceType
* @return
*/
@Override
public ServerInfoDTO queryServiceName(String serverId, String serviceType) {
String serviceName="";
String mobile="";
@ -515,6 +520,20 @@ public class IcUserDemandRecServiceImpl extends BaseServiceImpl<IcUserDemandRecD
return serverInfoDTO;
}
@Override
public Integer deleteByOriginId(String originId, String origin) {
if(StringUtils.isBlank(originId) || StringUtils.isBlank(origin)){
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"参数错误","参数错误");
}
LambdaUpdateWrapper<IcUserDemandRecEntity> wrapper = new LambdaUpdateWrapper();
wrapper.eq(IcUserDemandRecEntity::getOriginId, originId)
.eq(IcUserDemandRecEntity::getOrigin,origin)
.set(IcUserDemandRecEntity::getUpdatedTime,new Date())
.set(IcUserDemandRecEntity::getCreatedBy,loginUserUtil.getLoginUserId())
.set(IcUserDemandRecEntity::getDelFlag,NumConstant.ONE_STR);
return baseDao.update(null, wrapper);
}
/**
* 完成并评价
*
@ -1375,8 +1394,8 @@ public class IcUserDemandRecServiceImpl extends BaseServiceImpl<IcUserDemandRecD
break;
case UserDemandConstant.IC_USER_VOLUNTEER:
resDto.setServiceUnitName(StrConstant.EPMETY_STR);
resDto.setServiceUserName(icUerInfoMap.get(resDto.getServerId()).getName());
resDto.setServiceUserMobile(icUerInfoMap.get(resDto.getServerId()).getMobile());
resDto.setServiceUserName(MapUtils.isNotEmpty(icUerInfoMap) && icUerInfoMap.containsKey(resDto.getServerId()) ? icUerInfoMap.get(resDto.getServerId()).getName() : StrConstant.EPMETY_STR);
resDto.setServiceUserMobile(MapUtils.isNotEmpty(icUerInfoMap) && icUerInfoMap.containsKey(resDto.getServerId()) ? icUerInfoMap.get(resDto.getServerId()).getMobile() : StrConstant.EPMETY_STR);
break;
default:
log.warn("serviceType 错误");
@ -1449,7 +1468,9 @@ public class IcUserDemandRecServiceImpl extends BaseServiceImpl<IcUserDemandRecD
if (CollectionUtils.isNotEmpty(icUserIdList)) {
Result<List<IcResiUserDTO>> icUserInfoRes = epmetUserOpenFeignClient.getListIcResiUserDTO(new ArrayList<>(icUserIdList));
if (!icUserInfoRes.success() || CollectionUtils.isEmpty(icUserInfoRes.getData())) {
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), "查询居民信息志愿者信息异常");
// throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), "查询居民信息志愿者信息异常");
log.warn("查询居民信息志愿者信息异常:icUserIdList:"+JSON.toJSONString(icUserIdList));
return icUserInfoMap;
}
icUserInfoMap = icUserInfoRes.getData().stream().collect(Collectors.toMap(IcResiUserDTO::getId, o -> o, (o1, o2) -> o1));
}
@ -1503,8 +1524,8 @@ public class IcUserDemandRecServiceImpl extends BaseServiceImpl<IcUserDemandRecD
case UserDemandConstant.IC_USER_VOLUNTEER:
Map<String, IcResiUserDTO> icUserInfoMap = getIcVolunteerMap(new HashSet<>(Arrays.asList(resDto.getServerId())));
resDto.setServiceUnitName(StrConstant.EPMETY_STR);
resDto.setServiceUserName(icUserInfoMap.get(resDto.getServerId()).getName());
resDto.setServiceUserMobile(icUserInfoMap.get(resDto.getServerId()).getMobile());
resDto.setServiceUserName(MapUtils.isNotEmpty(icUserInfoMap) && icUserInfoMap.containsKey(resDto.getServerId()) ? icUserInfoMap.get(resDto.getServerId()).getName() : StrConstant.EPMETY_STR);
resDto.setServiceUserMobile(MapUtils.isNotEmpty(icUserInfoMap) && icUserInfoMap.containsKey(resDto.getServerId()) ? icUserInfoMap.get(resDto.getServerId()).getMobile() : StrConstant.EPMETY_STR);
break;
default:
log.warn("serviceType 错误");

569
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkdiaryServiceRecordServiceImpl.java

@ -0,0 +1,569 @@
package com.epmet.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.result.OptionResultDTO;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.ValidateException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.*;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.constants.ImportTaskConstants;
import com.epmet.dao.WorkdiaryServiceRecordDao;
import com.epmet.dao.WorkdiaryServiceTypeDao;
import com.epmet.dto.*;
import com.epmet.dto.form.GridOptionFormDTO;
import com.epmet.dto.form.LoginUserDetailsFormDTO;
import com.epmet.dto.form.resi.IcResiPageNonDynamicFormDTO;
import com.epmet.dto.result.*;
import com.epmet.dto.result.resi.IcResiNonDynamicResultDTO;
import com.epmet.entity.WorkdiaryServiceRecordEntity;
import com.epmet.excel.WorkdiaryServiceRecordExcel;
import com.epmet.excel.listener.WorkdiaryServiceImportListener;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.feign.OssFeignClient;
import com.epmet.redis.WorkdiaryServiceRecordRedis;
import com.epmet.service.WorkdiaryServiceRecordService;
import com.epmet.service.WorkdiaryServiceTypeService;
import com.epmet.utils.ImportTaskUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.entity.ContentType;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* 工作日志(服务)-记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Service
public class WorkdiaryServiceRecordServiceImpl extends BaseServiceImpl<WorkdiaryServiceRecordDao, WorkdiaryServiceRecordEntity> implements WorkdiaryServiceRecordService, ResultDataResolver {
@Autowired
private WorkdiaryServiceRecordRedis workdiaryServiceRecordRedis;
@Autowired
private WorkdiaryServiceTypeDao workdiaryServiceTypeDao;
@Autowired
private EpmetUserOpenFeignClient userOpenFeignClient;
@Autowired
private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Autowired
private OssFeignClient ossFeignClient;
private ThreadLocal<List<ImportResultDesc>> importResultDescTl = new ThreadLocal<>();
/**
* 工作日志-服务时间-正则表达式
* 支持模式
* 2022-01-01
* 2022-1-1
* 2022/01/01
* 2022/01-1
* ...
*/
private static final Pattern WORKDIARY_SERVICE_TIME_REGEX = Pattern.compile("^(\\s*)(?<year>\\d{4})[-/](?<month>\\d{1,2})[-/](?<day>\\d{1,2})(\\s*)$");
/**
* 导入结果描述
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class ImportResultDesc {
@ColumnWidth(20)
@ExcelProperty(value = "申请人")
private String applicantName;
@ColumnWidth(30)
@ExcelProperty(value = "服务内容")
private String serviceContent;
@ColumnWidth(30)
@ExcelProperty(value = "描述")
private String desc;
}
@Override
public PageData<WorkdiaryServiceRecordDTO> page(Map<String, Object> params) {
IPage<WorkdiaryServiceRecordEntity> page = baseDao.selectPage(
getPage(params, FieldConstant.CREATED_TIME, false),
getWrapper(params)
);
return getPageData(page, WorkdiaryServiceRecordDTO.class);
}
@Override
public PageData<WorkdiaryServiceRecordDTO> page(String gridId, Short serviceType, String applicantName, String applicantAddress,
String serviceContent, String applicantMobile, Date serviceTimeStart, Date serviceTimeEnd,
Integer pageNo, Integer pageSize) {
LoginUserDetailsResultDTO currentStaff = getResultDataOrThrowsException(userOpenFeignClient.getLoginUserDetails(new LoginUserDetailsFormDTO(
EpmetRequestHolder.getLoginUserApp(), EpmetRequestHolder.getLoginUserClient(), EpmetRequestHolder.getLoginUserId()
)), ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "查询工作人员信息失败", "查询工作人员信息失败");
LambdaQueryWrapper<WorkdiaryServiceRecordEntity> query = new LambdaQueryWrapper<>();
query.eq(StringUtils.isNotBlank(gridId), WorkdiaryServiceRecordEntity::getGridId, gridId);
query.eq(serviceType != null, WorkdiaryServiceRecordEntity::getServiceType, serviceType);
query.like(StringUtils.isNotBlank(applicantName), WorkdiaryServiceRecordEntity::getApplicantName, applicantName);
query.like(StringUtils.isNotBlank(applicantAddress), WorkdiaryServiceRecordEntity::getApplicantAddress, applicantAddress);
query.like(StringUtils.isNotBlank(serviceContent), WorkdiaryServiceRecordEntity::getServiceContent, serviceContent);
query.like(StringUtils.isNotBlank(applicantMobile), WorkdiaryServiceRecordEntity::getApplicantMobile, applicantMobile);
query.likeRight(WorkdiaryServiceRecordEntity::getOrgIdPath, currentStaff.getOrgIdPath());
// 服务时间查询,两端包含,闭区间
query.ge(serviceTimeStart != null, WorkdiaryServiceRecordEntity::getServiceTime, serviceTimeStart);
query.le(serviceTimeStart != null, WorkdiaryServiceRecordEntity::getServiceTime, serviceTimeEnd);
// 创建时间倒序
query.orderByDesc(WorkdiaryServiceRecordEntity::getCreatedTime);
// 查找类型列表
List<WorkdiaryServiceTypeDTO> stList = SpringContextUtils.getBean(WorkdiaryServiceTypeService.class).list(null, 1, 100);
Map<Short, String> stMap = stList.stream().collect(Collectors.toMap(WorkdiaryServiceTypeDTO::getServiceType, WorkdiaryServiceTypeDTO::getServiceTypeName));
// 查找服务记录
PageHelper.startPage(pageNo, pageSize);
List<WorkdiaryServiceRecordDTO> list = baseDao.selectList(query)
.stream()
.map(e -> convertEntity2DTO(e, stMap))
.collect(Collectors.toList());
return new PageData<>(list, new PageInfo<>(list).getTotal(), pageSize);
}
@Override
public List<WorkdiaryServiceRecordDTO> list(Map<String, Object> params) {
List<WorkdiaryServiceRecordEntity> entityList = baseDao.selectList(getWrapper(params));
return ConvertUtils.sourceToTarget(entityList, WorkdiaryServiceRecordDTO.class);
}
private QueryWrapper<WorkdiaryServiceRecordEntity> getWrapper(Map<String, Object> params){
String id = (String)params.get(FieldConstant.ID_HUMP);
QueryWrapper<WorkdiaryServiceRecordEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id);
return wrapper;
}
@Override
public WorkdiaryServiceRecordDTO get(String id) {
WorkdiaryServiceRecordEntity entity = baseDao.selectById(id);
return convertEntity2DTO(entity, null);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void save(WorkdiaryServiceRecordDTO dto) {
WorkdiaryServiceRecordEntity entity = ConvertUtils.sourceToTarget(dto, WorkdiaryServiceRecordEntity.class);
LoginUserDetailsResultDTO currentStaff = getResultDataOrThrowsException(userOpenFeignClient.getLoginUserDetails(new LoginUserDetailsFormDTO(
EpmetRequestHolder.getLoginUserApp(), EpmetRequestHolder.getLoginUserClient(), EpmetRequestHolder.getLoginUserId()
)), ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "查询工作人员信息失败", "查询工作人员信息失败");
String staffOrgIdPath = currentStaff.getOrgIdPath();
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(dto.getGridId());
if (gridInfo == null) {
// 说明网格是其他组织下的
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "网格未找到", "网格未找到");
}
String gridOrgIdPath = gridInfo.getPids().concat(":").concat(gridInfo.getId());
if (!gridOrgIdPath.contains(staffOrgIdPath)) {
// 说明网格是其他组织下的
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "所选网格不在您所属组织下", "所选网格不在您所属组织下");
}
entity.setOrgIdPath(gridOrgIdPath);
entity.setAgencyId(gridInfo.getPid());
IcResiUserDTO applicant = getResultDataOrThrowsException(userOpenFeignClient.getIcResiUserDTO(dto.getApplicantId()), ServiceConstant.EPMET_USER_SERVER,
EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, "未找到申请人信息");
entity.setCustomerId(EpmetRequestHolder.getLoginUserCustomerId());
if (applicant != null) {
entity.setApplicantName(applicant.getName());
entity.setCustomerId(applicant.getCustomerId());
}
insert(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(WorkdiaryServiceRecordDTO dto) {
WorkdiaryServiceRecordEntity entity = new WorkdiaryServiceRecordEntity();
entity.setId(dto.getId());
entity.setServiceType(dto.getServiceType());
entity.setGridId(dto.getGridId());
entity.setApplicantId(dto.getApplicantId());
entity.setApplicantAddress(dto.getApplicantAddress());
entity.setServiceContent(dto.getServiceContent());
entity.setApplicantMobile(dto.getApplicantMobile());
entity.setPrincipalName(dto.getPrincipalName());
entity.setServiceTime(dto.getServiceTime());
entity.setRemark(dto.getRemark());
//entity.setApplicantIdCard(dto.getApplicantIdCard());
// orgidPath
if (StringUtils.isNotBlank(dto.getGridId())) {
Optional.ofNullable(CustomerOrgRedis.getGridInfo(dto.getGridId()))
.ifPresent(gi -> {
entity.setOrgIdPath(gi.getPids().concat(":").concat(gi.getId()));
entity.setAgencyId(gi.getPid());
});
}
if (StringUtils.isNotBlank(dto.getApplicantId())) {
IcResiUserDTO applicant = getResultDataOrThrowsException(userOpenFeignClient.getIcResiUserDTO(dto.getApplicantId()), ServiceConstant.EPMET_USER_SERVER,
EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, "未找到申请人信息");
if (applicant != null) {
entity.setApplicantName(applicant.getName());
entity.setCustomerId(applicant.getCustomerId());
}
}
updateById(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(String[] ids) {
// 逻辑删除(@TableLogic 注解)
baseDao.deleteBatchIds(Arrays.asList(ids));
}
private WorkdiaryServiceRecordDTO convertEntity2DTO(WorkdiaryServiceRecordEntity entity, Map<Short, String> stMap) {
if (stMap == null || stMap.size() == 0) {
// 查找类型列表
List<WorkdiaryServiceTypeDTO> list = SpringContextUtils.getBean(WorkdiaryServiceTypeService.class).list(null, 1, 100);
stMap = list.stream().collect(Collectors.toMap(WorkdiaryServiceTypeDTO::getServiceType, WorkdiaryServiceTypeDTO::getServiceTypeName));
}
WorkdiaryServiceRecordDTO d = ConvertUtils.sourceToTarget(entity, WorkdiaryServiceRecordDTO.class);
Optional.ofNullable(CustomerOrgRedis.getGridInfo(entity.getGridId())).ifPresent((gridInfo) -> d.setGridName(gridInfo.getAgencyName() + gridInfo.getGridName()));
d.setServiceTypeName(stMap.get(entity.getServiceType()));
return d;
}
@Override
public void export(String gridId, Short serviceType, String applicantName, String applicantAddress,
String serviceContent, String applicantMobile, Date serviceTimeStart, Date serviceTimeEnd, HttpServletResponse response) {
ExcelWriter writer;
try {
writer = EasyExcel.write(ExcelUtils.getOutputStreamForExcel("工作日志导出.xlsx", response)).build();
} catch (IOException e) {
logger.error("【工作日志-服务】导出-response设置失败:{}", ExceptionUtils.getErrorStackTrace(e));
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode());
}
WriteSheet sheet = EasyExcel.writerSheet("工作日志")
.head(WorkdiaryServiceRecordExcel.class)
.build();
try {
//一次500条,分批导出
int pageSize = 500;
for (int pageNo = 1; ; pageNo++) {
PageData<WorkdiaryServiceRecordDTO> page = this.page(gridId, serviceType, applicantName, applicantAddress, serviceContent,
applicantMobile, serviceTimeStart, serviceTimeEnd, pageNo, pageSize);
List<WorkdiaryServiceRecordDTO> list = page.getList();
if (CollectionUtils.isEmpty(list)) {
// 空的,导出结束
break;
}
List<WorkdiaryServiceRecordExcel> excelObjects = list.stream().map(e -> new WorkdiaryServiceRecordExcel(e)).collect(Collectors.toList());
writer.write(excelObjects, sheet);
}
} finally {
writer.finish();
}
}
@Override
public Integer selectRecordCountOfType(Short serviceType) {
LambdaQueryWrapper<WorkdiaryServiceRecordEntity> query = new LambdaQueryWrapper<>();
query.eq(WorkdiaryServiceRecordEntity::getCustomerId, EpmetRequestHolder.getLoginUserCustomerId());
query.eq(WorkdiaryServiceRecordEntity::getServiceType, serviceType);
return baseDao.selectCount(query);
}
/**
* 创建导入任务并且执行导入
* @param fileSavePath
*/
@Override
public void createImportTaskAndExecuteImport(Path fileSavePath, String originFileName, String taskId) {
String resultDescFileUtl = null;
// 执行导入操作
try {
importResultDescTl.set(new ArrayList<>());
WorkdiaryServiceImportListener listener = new WorkdiaryServiceImportListener(this);
EasyExcel.read(fileSavePath.toFile(), WorkdiaryServiceRecordExcel.class,listener).headRowNumber(1).sheet(0).doRead();
} catch (Exception e) {
logger.error("【工作日志】-导入-未知错误:{}", ExceptionUtils.getErrorStackTrace(e));
} finally {
// 清理临时文件
try {
Files.deleteIfExists(fileSavePath);
} catch (IOException e) {
logger.error("【书记日志】-导入-删除导入临时文件失败,staffId:{}, 文件名称:{}, 错误信息:{}",
EpmetRequestHolder.getLoginUserId(), fileSavePath.toString(), ExceptionUtils.getErrorStackTrace(e));
}
// 上传错误描述文件
try {
resultDescFileUtl = buildAndUploadResultDescFile(importResultDescTl.get());
} catch (IOException e) {
logger.error("【工作日志】导入-生成和上传错误描述文件失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
// 清理错误结果描述缓存
importResultDescTl.remove();
}
// 修改导入记录状态为已完成
ImportTaskUtils.finishImportTask(taskId, ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS, resultDescFileUtl, "");
}
/**
* 生成和上传错误描述文件
* @return
*/
private String buildAndUploadResultDescFile(List<ImportResultDesc> descs) throws IOException {
if(CollectionUtils.isEmpty(descs)) {
return null;
}
//Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("导入失败的数据列表","导入失败的数据列表"),
// ImportResultDesc.class, descs);
String fileName = System.currentTimeMillis() + "_" + EpmetRequestHolder.getLoginUserId() + ".xlsx";
FileItem fileItem = new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, FileUtils.getAndCreateDirUnderEpmetFilesDir("workdiary", "result_desc").toFile())
.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName);
// 为了自动关闭流
try (OutputStream os = fileItem.getOutputStream()) {
EasyExcel.write(os, ImportResultDesc.class).sheet("失败列表").doWrite(descs);
}
UploadImgResultDTO result = getResultDataOrThrowsException(ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem)),
ServiceConstant.EPMET_OSS_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "上传结果描述文件失败", "上传结果描述文件失败");
if (!fileItem.isInMemory()) {
fileItem.delete();
}
return result.getUrl();
}
/**
* 执行批量插入
* @param datas
*/
@Override
public void executeBatchImport(List<WorkdiaryServiceRecordExcel> datas) {
if (CollectionUtils.isEmpty(datas)) {
return;
}
// 当前登录人
LoginUserDetailsResultDTO currentStaff = getResultDataOrThrowsException(userOpenFeignClient.getLoginUserDetails(
new LoginUserDetailsFormDTO(EpmetRequestHolder.getLoginUserApp(), EpmetRequestHolder.getLoginUserClient(), EpmetRequestHolder.getLoginUserId())),
ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【工作日志】-导入-没有找到当前登录人信息", "【工作日志】-导入-没有找到当前登录人信息");
// 服务类型字典。key:养老 value:object
List<WorkdiaryServiceTypeDTO> serviceTypes = SpringContextUtils.getBean(WorkdiaryServiceTypeService.class).page(null, 1, 100).getList();
Map<String, WorkdiaryServiceTypeDTO> serviceTypeMap = serviceTypes.stream().collect(Collectors.toMap(WorkdiaryServiceTypeDTO::getServiceTypeName, Function.identity()));
ArrayList<WorkdiaryServiceRecordEntity> diaryRecordList = new ArrayList<>();
// 循环校验和填充数据
for (WorkdiaryServiceRecordExcel row : datas) {
String gridName = row.getGridName();
String serviceTypeName = row.getServiceTypeName();
String applicantName = row.getApplicantName();
try {
// 校验必填
ValidatorUtils.validateEntity(row);
// 检查服务类型
WorkdiaryServiceTypeDTO serviceType = serviceTypeMap.get(serviceTypeName);
if (serviceType == null || serviceType.getEnabled().shortValue() == 0) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "所选服务类型不存在或已禁用", "所选服务类型不存在或已禁用");
}
// 检查网格
OptionResultDTO grid = findGrid(currentStaff.getAgencyId(), gridName);
if (grid == null) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "网格不存在,或不在您所属的组织下", "网格不存在,或不在您所属的组织下");
}
// 查找居民
IcResiNonDynamicResultDTO resi = findResi(grid.getValue(), row.getApplicantName(), row.getApplicantMobile());
if (StringUtils.isBlank(row.getApplicantMobile())) {
row.setApplicantMobile(resi.getMobile());
}
// 没填写住址的,到系统查询
if (StringUtils.isBlank(row.getApplicantAddress())) {
HouseAgencyInfoResultDTO house = getResultDataOrThrowsException(govOrgOpenFeignClient.getHouseAgencyInfo(resi.getHomeId()),
ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "查询房屋失败", "查询房屋失败");
if (house == null) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "居民住址未找到", "居民未找到");
}
row.setApplicantAddress(house.getFullName());
}
// ---------服务时间 Start 使用正则处理---------
//String serviceTimeStr = row.getServiceTime();
//String year;
//String month;
//String day;
//Matcher stm = WORKDIARY_SERVICE_TIME_REGEX.matcher(serviceTimeStr);
//if (stm.matches()) {
// year = stm.group("year");
// month = stm.group("month");
// day = stm.group("day");
//} else {
// throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),
// "服务时间格式不正确",
// "服务时间格式不正确");
//}
//
//year = String.format("%04d", Integer.valueOf(year));
//month = String.format("%02d", Integer.valueOf(month));
//day = String.format("%02d", Integer.valueOf(day));
//
//Date serviceTime = DateUtils.parseDate(String.format("%s-%s-%s", year, month, day), DateUtils.DATE_PATTERN);
// ---------服务时间 End---------
// 填充到entity
WorkdiaryServiceRecordEntity record = new WorkdiaryServiceRecordEntity(
EpmetRequestHolder.getLoginUserCustomerId(),
serviceType.getServiceType(),
currentStaff.getAgencyId(),
grid.getValue(),
currentStaff.getOrgIdPath().concat(":").concat(grid.getValue()),
resi.getId(),
row.getApplicantIdCard(),
row.getApplicantName(),
row.getApplicantAddress(),
row.getApplicantMobile(),
row.getServiceContent(),
row.getServiceTime(),
row.getPrincipalName(),
row.getRemark());
diaryRecordList.add(record);
} catch (ValidateException ve) {
importResultDescTl.get().add(new ImportResultDesc(applicantName, row.getServiceContent(), ve.getMsg()));
} catch (EpmetException ee) {
importResultDescTl.get().add(new ImportResultDesc(applicantName, row.getServiceContent(), ee.getMsg()));
} catch (Throwable t) {
logger.error(ExceptionUtils.getThrowableErrorStackTrace(t));
importResultDescTl.get().add(new ImportResultDesc(applicantName, row.getServiceContent(), "未知错误"));
}
}
// 批量持久化
insertBatch(diaryRecordList, 50);
}
private IcResiNonDynamicResultDTO findResi(String gridId, String applicantName, String mobile) {
PageData<IcResiNonDynamicResultDTO> page = getResultDataOrThrowsException(userOpenFeignClient.listResiNonDynamic(new IcResiPageNonDynamicFormDTO(gridId, applicantName, mobile, false)),
ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "居民未找到", "居民未找到");
List<IcResiNonDynamicResultDTO> list = page.getList();
if (page == null || CollectionUtils.isEmpty(page.getList())) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "居民未找到", "居民未找到");
}
return list.get(0);
}
/**
* 从组织下查找指定的网格名称得到网格数据
* @param agencyId
* @param gridName
* @return
*/
private OptionResultDTO findGrid(String agencyId, String gridName) {
List<OptionResultDTO> gridOptions = getResultDataOrThrowsException(govOrgOpenFeignClient.getGridOption(new GridOptionFormDTO(agencyId, "saveOrUpdate")),
ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【工作日志】-导入-网格查询失败", "【工作日志】-导入-网格查询失败");
for (OptionResultDTO grid : gridOptions) {
if (gridName.equals(grid.getLabel())) {
return grid;
}
}
return null;
}
}

156
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkdiaryServiceTypeServiceImpl.java

@ -0,0 +1,156 @@
package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.EpmetRequestHolder;
import com.epmet.commons.tools.utils.SpringContextUtils;
import com.epmet.dao.WorkdiaryServiceTypeDao;
import com.epmet.dto.WorkdiaryServiceTypeDTO;
import com.epmet.entity.WorkdiaryServiceTypeEntity;
import com.epmet.redis.WorkdiaryServiceTypeRedis;
import com.epmet.service.WorkdiaryServiceRecordService;
import com.epmet.service.WorkdiaryServiceTypeService;
import com.github.pagehelper.PageInfo;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 工作日志(服务)-服务类型
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-23
*/
@Service
public class WorkdiaryServiceTypeServiceImpl extends BaseServiceImpl<WorkdiaryServiceTypeDao, WorkdiaryServiceTypeEntity> implements WorkdiaryServiceTypeService {
@Autowired
private WorkdiaryServiceTypeRedis workdiaryServiceTypeRedis;
@Autowired
private RedisUtils redisUtils;
@Autowired
private DistributedLock distributedLock;
@Override
public PageData<WorkdiaryServiceTypeDTO> page(Short enabled, Integer pageNo, Integer pageSize) {
List<WorkdiaryServiceTypeDTO> list = list(enabled, pageNo, pageSize);
return new PageData<>(list, new PageInfo<>(list).getTotal(), pageSize);
}
@Override
public List<WorkdiaryServiceTypeDTO> list(Map<String, Object> params) {
List<WorkdiaryServiceTypeEntity> entityList = baseDao.selectList(getWrapper(params));
return ConvertUtils.sourceToTarget(entityList, WorkdiaryServiceTypeDTO.class);
}
@Override
public List<WorkdiaryServiceTypeDTO> list(Short enabled, Integer pageNo, Integer pageSize) {
LambdaQueryWrapper<WorkdiaryServiceTypeEntity> stQuery = new LambdaQueryWrapper<>();
stQuery.eq(WorkdiaryServiceTypeEntity::getCustomerId, EpmetRequestHolder.getLoginUserCustomerId());
stQuery.eq(enabled != null, WorkdiaryServiceTypeEntity::getEnabled, enabled);
List<WorkdiaryServiceTypeDTO> ds = baseDao.selectList(stQuery).stream().map((e) -> {
WorkdiaryServiceTypeDTO d = new WorkdiaryServiceTypeDTO();
d.setId(e.getId());
d.setServiceType(e.getServiceType());
d.setServiceTypeName(e.getServiceTypeName());
d.setEnabled(e.getEnabled());
return d;
}).collect(Collectors.toList());
return ds;
}
@Override
public PageData<WorkdiaryServiceTypeDTO> listAvaliableServiceType(Integer pageNo, Integer pageSize) {
return this.page(Short.valueOf("1"), pageNo, pageSize);
}
private QueryWrapper<WorkdiaryServiceTypeEntity> getWrapper(Map<String, Object> params){
String id = (String)params.get(FieldConstant.ID_HUMP);
QueryWrapper<WorkdiaryServiceTypeEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id);
return wrapper;
}
@Override
public WorkdiaryServiceTypeDTO get(String id) {
WorkdiaryServiceTypeEntity entity = baseDao.selectById(id);
return ConvertUtils.sourceToTarget(entity, WorkdiaryServiceTypeDTO.class);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void save(WorkdiaryServiceTypeDTO dto) {
String customerId = EpmetRequestHolder.getLoginUserCustomerId();
// 预先检查
LambdaQueryWrapper<WorkdiaryServiceTypeEntity> query = new LambdaQueryWrapper<>();
query.eq(WorkdiaryServiceTypeEntity::getCustomerId, customerId);
query.eq(WorkdiaryServiceTypeEntity::getServiceTypeName, dto.getServiceTypeName());
if (baseDao.selectCount(query) > 0) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "已存在该类别", "已存在该类别");
}
WorkdiaryServiceTypeEntity entity = ConvertUtils.sourceToTarget(dto, WorkdiaryServiceTypeEntity.class);
entity.setCustomerId(customerId);
entity.setEnabled(Short.valueOf("1"));
synchronized (this) {
Short max = baseDao.getMaxType(customerId);
entity.setServiceType(++max);
insert(entity);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(WorkdiaryServiceTypeDTO dto) {
WorkdiaryServiceTypeEntity entity = ConvertUtils.sourceToTarget(dto, WorkdiaryServiceTypeEntity.class);
updateById(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int delete(@RequestBody String[] ids) {
//String.format("");
//distributedLock.getLock(RedisKeys.getLockByMethodName());
// todo 此操作与日志记录的新增和修改动作之间需要互斥
List<String> canDeleteIds = new ArrayList<>();
int failCount = 0;
for (String id : ids) {
WorkdiaryServiceTypeEntity st = baseDao.selectById(id);
if (st == null) {
continue;
}
WorkdiaryServiceRecordService wsRecordService = SpringContextUtils.getBean(WorkdiaryServiceRecordService.class);
Integer recordCount = wsRecordService.selectRecordCountOfType(st.getServiceType());
if (recordCount > 0) {
failCount++;
} else {
canDeleteIds.add(id);
}
}
if (CollectionUtils.isNotEmpty(canDeleteIds)) {
baseDao.deleteBatchIds(canDeleteIds);
}
return failCount;
}
}

47
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/db/migration/V0.0.28__workdiary_service.sql

@ -0,0 +1,47 @@
# 服务记录表
CREATE TABLE `workdiary_service_record`
(
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户id',
`SERVICE_TYPE` tinyint(3) NOT NULL COMMENT '服务类型',
`AGENCY_ID` varchar(32) NOT NULL COMMENT '单位ID',
`GRID_ID` varchar(32) NOT NULL COMMENT '网格ID',
`ORG_ID_PATH` varchar(255) NOT NULL COMMENT '组织ID path',
`APPLICANT_ID` varchar(32) NOT NULL COMMENT '申请人ID',
`APPLICANT_ID_CARD` varchar(32) default '' COMMENT '申请人证件号',
`APPLICANT_NAME` varchar(32) NOT NULL COMMENT '申请人姓名',
`APPLICANT_ADDRESS` varchar(32) NOT NULL COMMENT '申请人住址',
`APPLICANT_MOBILE` varchar(20) NOT NULL COMMENT '申请人联系电话',
`SERVICE_CONTENT` varchar(255) NOT NULL COMMENT '服务内容',
`SERVICE_TIME` datetime NOT NULL COMMENT '服务时间',
`PRINCIPAL_NAME` varchar(10) default '' COMMENT '负责人姓名',
`REMARK` varchar(255) default '' COMMENT '备注',
`DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='工作日志(服务)-记录';
# 工作日志-服务分类
CREATE TABLE `workdiary_service_type`
(
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户id',
`SERVICE_TYPE` tinyint(3) NOT NULL COMMENT '服务类型',
`SERVICE_TYPE_NAME` varchar(32) NOT NULL COMMENT '服务类型名称',
`ENABLED` tinyint(1) NOT NULL COMMENT '是否启用。0:禁用,1:启用',
`DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`),
unique index cust_service_type(CUSTOMER_ID asc , SERVICE_TYPE asc , DEL_FLAG asc) using btree
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='工作日志(服务)-服务类型'

13
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/IcSocietyOrgDao.xml

@ -7,10 +7,12 @@
SELECT
agency_id agencyId,
id societyId,
img_url,
society_name societyName,
service_matters serviceMatters,
person_in_charge personInCharge,
mobile mobile,
service_time_str,
service_start_time serviceStartTime,
service_end_time serviceEndTime,
admin_staff_id adminStaffId,
@ -90,4 +92,13 @@
AND agency_id = #{agencyId}
</select>
</mapper>
<select id="selectListForUniqueName" parameterType="map" resultType="com.epmet.entity.IcSocietyOrgEntity">
select o.* from ic_society_org o
where o.del_flag='0'
and o.agency_id = #{agencyId}
and o.society_name =#{societyName}
<if test="null != id and id != '' ">
and o.id != #{id}
</if>
</select>
</mapper>

31
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/WorkdiaryServiceRecordDao.xml

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.WorkdiaryServiceRecordDao">
<resultMap type="com.epmet.entity.WorkdiaryServiceRecordEntity" id="workdiaryServiceRecordMap">
<result property="id" column="ID"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="serviceType" column="SERVICE_TYPE"/>
<result property="agencyId" column="AGENCY_ID"/>
<result property="gridId" column="GRID_ID"/>
<result property="orgIdPath" column="ORG_ID_PATH"/>
<result property="applicantId" column="APPLICANT_ID"/>
<result property="applicantIdCard" column="APPLICANT_ID_CARD"/>
<result property="applicantName" column="APPLICANT_NAME"/>
<result property="applicantAddress" column="APPLICANT_ADDRESS"/>
<result property="applicantMobile" column="APPLICANT_MOBILE"/>
<result property="serviceContent" column="SERVICE_CONTENT"/>
<result property="serviceTime" column="SERVICE_TIME"/>
<result property="principalName" column="PRINCIPAL_NAME"/>
<result property="remark" column="REMARK"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
</mapper>

27
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/WorkdiaryServiceTypeDao.xml

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.WorkdiaryServiceTypeDao">
<resultMap type="com.epmet.entity.WorkdiaryServiceTypeEntity" id="workdiaryServiceTypeMap">
<result property="id" column="ID"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="serviceType" column="SERVICE_TYPE"/>
<result property="serviceTypeName" column="SERVICE_TYPE_NAME"/>
<result property="enabled" column="ENABLED"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<!--该客户最大的type是啥-->
<select id="getMaxType" resultType="java.lang.Short">
select ifnull(max(SERVICE_TYPE), 0) max
from workdiary_service_type
where CUSTOMER_ID = #{customerId}
and DEL_FLAG = '0'
</select>
</mapper>

BIN
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/societyorg_import_template.xlsx

Binary file not shown.

BIN
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/workdiary_service_import.xlsx

Binary file not shown.

5
epmet-module/epmet-job/epmet-job-server/pom.xml

@ -43,11 +43,6 @@
<artifactId>epmet-message-client</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>pli-power-base-client</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>

17
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/PliPowerService.java

@ -1,17 +0,0 @@
package com.epmet.service;
import com.epmet.commons.tools.utils.Result;
import com.epmet.plugin.power.dto.visit.form.VisitorLogoutFormDTO;
public interface PliPowerService {
/**
* 访客登出
*
* @param formDTO
* @return com.epmet.commons.tools.utils.Result
* @author zhy
* @date 2022/5/30 10:25
*/
Result visitorLogout(VisitorLogoutFormDTO formDTO);
}

31
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/PliPowerServiceImpl.java

@ -1,31 +0,0 @@
package com.epmet.service.impl;
import com.epmet.commons.tools.utils.Result;
import com.epmet.plugin.power.dto.visit.form.VisitorLogoutFormDTO;
import com.epmet.plugin.power.feign.PliPowerFeignClient;
import com.epmet.service.PliPowerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description
* @ClassName StatsUserServiceImpl
* @Auth wangc
* @Date 2020-06-29 09:41
*/
@Service
public class PliPowerServiceImpl implements PliPowerService {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private PliPowerFeignClient pliPowerFeignClient;
@Override
public Result visitorLogout(VisitorLogoutFormDTO formDTO) {
return pliPowerFeignClient.visitorLogout(formDTO);
}
}

36
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/AutoPublishIcPartyActTask.java

@ -0,0 +1,36 @@
package com.epmet.task;
import com.epmet.commons.tools.utils.Result;
import com.epmet.resi.partymember.feign.ResiPartyMemberOpenFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Description
* @Author yzm
* @Date 2022/8/22 15:13
*/
@Slf4j
@Component("autoPublishIcPartyActTask")
public class AutoPublishIcPartyActTask implements ITask {
@Autowired
private ResiPartyMemberOpenFeignClient resiPartyMemberOpenFeignClient;
/**
* 活动时间2022-08-15 10:30 选择的是提前3天自动发布
* 本任务是自动发布活动
* //2022-8-9号 8:00 收到一个:您有一个活动3天后即将自动发布
*
* @param params 参数多参数使用JSON数据
*/
@Override
public void run(String params) {
Result result=resiPartyMemberOpenFeignClient.autoPublishIcPartyAct();
if(result.success()){
log.info("autoPublishIcPartyActTask执行成功");
}else{
log.info("autoPublishIcPartyActTask执行失败");
}
}
}

31
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/EnterprisePatrolRemindTask.java

@ -0,0 +1,31 @@
package com.epmet.task;
import com.epmet.commons.tools.utils.Result;
import com.epmet.feign.GovOrgOpenFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @Description
* @Author zhaoqifeng
* @Date 2022/9/6 17:35
*/
@Component("enterprisePatrolRemindTask")
@Slf4j
public class EnterprisePatrolRemindTask implements ITask {
@Resource
private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Override
public void run(String params) {
log.info("EnterprisePatrolRemindTask定时任务正在执行,参数为:{}", params);
Result result = govOrgOpenFeignClient.sendEnterprisePatrolRemindMessage();
if (result.success()) {
log.info("EnterprisePatrolRemindTask定时任务执行成功");
} else {
log.error("EnterprisePatrolRemindTask定时任务执行失败:" + result.getMsg());
}
}
}

37
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/NoticePartyActAutoPublishTask.java

@ -0,0 +1,37 @@
package com.epmet.task;
import com.epmet.commons.tools.utils.Result;
import com.epmet.resi.partymember.feign.ResiPartyMemberOpenFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Description
* @Author yzm
* @Date 2022/8/22 15:07
*/
@Slf4j
@Component("noticePartyActAutoPublishTask")
public class NoticePartyActAutoPublishTask implements ITask {
@Autowired
private ResiPartyMemberOpenFeignClient resiPartyMemberOpenFeignClient;
/**
* 活动时间2022-08-15 10:30 选择的是提前3天自动发布
* //2022-8-12 10:30自动发布,收到消息:您有一个活动已经发布
* 本任务是通知2022-8-9号 8:00 收到一个您有一个活动3天后即将自动发布
*
* @param params 参数多参数使用JSON数据
*/
@Override
public void run(String params) {
Result result=resiPartyMemberOpenFeignClient.noticePartyActAutoPublishTask();
if(result.success()){
log.info("noticePartyActAutoPublishTask执行成功");
}else{
log.info("noticePartyActAutoPublishTask执行失败");
}
}
}

41
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/PliVisitorLogoutTask.java

@ -1,41 +0,0 @@
package com.epmet.task;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.utils.Result;
import com.epmet.plugin.power.dto.visit.form.VisitorLogoutFormDTO;
import com.epmet.service.PliPowerService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 访客登出
*
* @author zhy
* @date 2022/5/30 10:23
*/
@Component("pliVisitorLogoutTask")
public class PliVisitorLogoutTask implements ITask {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private PliPowerService pliPowerService;
@Override
public void run(String params) {
logger.info("VisitorLogoutTask定时任务正在执行,参数为:{}", params);
VisitorLogoutFormDTO formDTO = new VisitorLogoutFormDTO();
if (StringUtils.isNotBlank(params)) {
formDTO = JSON.parseObject(params, VisitorLogoutFormDTO.class);
}
Result result = pliPowerService.visitorLogout(formDTO);
if (result.success()) {
logger.info("VisitorLogoutTask定时任务执行成功");
} else {
logger.error("VisitorLogoutTask定时任务执行失败:" + result.getMsg());
}
}
}

35
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/ic/IcUpdateYlfnTask.java

@ -0,0 +1,35 @@
package com.epmet.task.ic;
import com.epmet.commons.tools.utils.Result;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.task.ITask;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* desc:定时弥补数据 保证数据的一致性
*/
@Slf4j
@Component("icUpdateYlfnTask")
public class IcUpdateYlfnTask implements ITask {
@Resource
private EpmetUserOpenFeignClient epmetUserOpenFeignClient;
/**
* 执行定时任务接口
*
* @param params 参数多参数使用JSON数据
*/
@Override
public void run(String params) {
Result result = epmetUserOpenFeignClient.updateYlfn();
if (result.success()) {
log.info("icUpdateYlfnTask定时任务正在执行定时任务执行成功");
} else {
log.warn("icUpdateYlfnTask定时任务正在执行定时任务执行失败:" + result.getMsg());
}
}
}

7
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SmsTemplateConstant.java

@ -57,4 +57,11 @@ public interface SmsTemplateConstant {
* ${name}给您指派了一个新的需求请服务完成后尽快反馈谢谢合作
*/
String DEMAND_SERVICE_TEM="SMS_247645013";
/**
* 模板名称: 数字社区-企事业单位复巡查消息提醒模板
* 模板CODE: SMS_251056077
* 模板内容: ${name}最近一次巡查结果不合格请在${date}再次巡查
*/
String ENTERPRISE_PATROL_TEM="SMS_251056077";
}

12
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SystemMessageType.java

@ -170,4 +170,16 @@ public interface SystemMessageType {
*/
String PARTYMEMBER_RESI_IMPORT = "partymember_resi_import";
/**
* 党建小助手消息
*/
String PARTY_MEETING_MESSAGE = "party_meeting_message";
String ZBWYH = "参加支部委员会";
String ZBDYDH = "参加支部党员大会";
String DXZH = "参加党小组会";
String DANGKE = "参加党课";
String ZTDR = "参加主题党日";
String WMFWHD = "参加为民服务活动";
}

104
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/IcMessageDTO.java

@ -0,0 +1,104 @@
package com.epmet.dto;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 用户消息表(党建小助手)
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-19
*/
@Data
public class IcMessageDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户id
*/
private String customerId;
/**
* app=resi时此列为gridId,其他情况暂定 *
*/
private String gridId;
/**
* 被通知的用户id
*/
private String userId;
/**
* 消息通知对象居民端用户resi政府端工作人员gov运营端工作人员oper
*/
private String app;
/**
* 消息分类 党建活动party_act 党建日程party_schedule
*/
private String messageType;
/**
* 消息类型对应的业务Id
*/
private String targetId;
/**
* 消息标题
*/
private String title;
/**
* 消息通知内容
*/
private String messageContent;
/**
* read已读unread未读
*/
private String readFlag;
/**
* 删除标记 0未删除1已删除
*/
private String delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人(发布消息的人)
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
/**
* 调用者
*/
private String referer;
}

66
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/IcMessageFormDTO.java

@ -0,0 +1,66 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@Data
public class IcMessageFormDTO implements Serializable {
private static final long serialVersionUID = 2697079163476964749L;
/**
* 客户id
*/
@NotBlank(message = "客户id不能为空")
private String customerId;
/**
* app=resi时此列为gridId,其他情况暂定 *
*/
private String gridId;
/**
* 对应用户id
*/
@NotBlank(message = "通知用户id为空")
private String userId;
/**
* 消息通知对象居民端用户resi政府端工作人员gov运营端工作人员oper
*/
@NotBlank(message = "消息通知对象不能为空")
private String app;
/**
* 消息标题
*/
@NotBlank(message = "消息标题不能为空")
private String title;
/**
* 消息通知内容
*/
@NotBlank(message = "通知内容不能为空")
private String messageContent;
/**
* read已读unread未读
*/
@NotBlank(message = "readFlag不能为空")
private String readFlag;
/**
* 调用者 分内部调用和外部调用内部调用值为空外部默认为外挂-站内信
*/
private String referer;
/**
* 消息分类:info-上传下达消息 详见UserMessageTypeConstant
*/
private String messageType;
/**
* 消息对应的业务id,比如message_type=info时此列存储的是消息id,可跳转到消息详情
*/
private String targetId;
}

19
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/IcMessageListFormDTO.java

@ -0,0 +1,19 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@Data
public class IcMessageListFormDTO implements Serializable {
private static final long serialVersionUID = 2697079163476964749L;
private Integer pageNo = 1;
private Integer pageSize = 20;
private Boolean isPage = true;
//token中信息
private String customerId;
private String userId;
}

18
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/ReadIcMessageFormDTO.java

@ -0,0 +1,18 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
@Data
public class ReadIcMessageFormDTO implements Serializable {
private static final long serialVersionUID = 2697079163476964749L;
/**
* 消息Id
*/
private String id;
//token中信息
private String customerId;
private String userId;
}

12
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/feign/EpmetMessageOpenFeignClient.java

@ -1,6 +1,7 @@
package com.epmet.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.redis.common.bean.CustomerStaffInfoCache;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.SysSmsDTO;
import com.epmet.dto.form.*;
@ -127,4 +128,15 @@ public interface EpmetMessageOpenFeignClient {
@PostMapping(value = "message/sms/send-msg", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
Result sendMsg(@RequestBody List<SendSmsFormDTO> formDTO);
/**
* @Author sun
* @Description 党建小助手-批量插入未读消息
**/
@PostMapping(value = "message/icMessage/saveicmessagelist", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
Result saveIcMessageList(List<UserMessageFormDTO> msgList);
@PostMapping(value = "message/icMessage/unreadcount/{userId}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
Result<Integer> unReadCount(@PathVariable("userId") String userId);
}

11
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/feign/fallback/EpmetMessageOpenFeignClientFallback.java

@ -78,4 +78,15 @@ public class EpmetMessageOpenFeignClientFallback implements EpmetMessageOpenFeig
public Result sendMsg(List<SendSmsFormDTO> formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_MESSAGE_SERVER, "sendMsg",formDTO);
}
@Override
public Result saveIcMessageList(List<UserMessageFormDTO> msgList) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_MESSAGE_SERVER, "saveIcMessageList", msgList);
}
@Override
public Result<Integer> unReadCount(String userId) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_MESSAGE_SERVER, "unReadCount", userId);
}
}

105
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/controller/IcMessageController.java

@ -0,0 +1,105 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.IcMessageDTO;
import com.epmet.dto.form.IcMessageFormDTO;
import com.epmet.dto.form.IcMessageListFormDTO;
import com.epmet.dto.form.ReadIcMessageFormDTO;
import com.epmet.service.IcMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 用户消息表(党建小助手)
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-19
*/
@RestController
@RequestMapping("icMessage")
public class IcMessageController {
@Autowired
private IcMessageService icMessageService;
@RequestMapping("list")
public Result<PageData<IcMessageDTO>> list(@LoginUser TokenDto tokenDto, @RequestBody IcMessageListFormDTO formDTO){
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
return new Result<PageData<IcMessageDTO>>().ok(icMessageService.list(formDTO));
}
@RequestMapping(value = "{id}",method = {RequestMethod.POST,RequestMethod.GET})
public Result<IcMessageDTO> get(@PathVariable("id") String id){
IcMessageDTO data = icMessageService.get(id);
return new Result<IcMessageDTO>().ok(data);
}
@NoRepeatSubmit
@PostMapping("save")
public Result save(@RequestBody IcMessageDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
icMessageService.save(dto);
return new Result();
}
@NoRepeatSubmit
@PostMapping("update")
public Result update(@RequestBody IcMessageDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
icMessageService.update(dto);
return new Result();
}
@PostMapping("delete")
public Result delete(@RequestBody String[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
icMessageService.delete(ids);
return new Result();
}
/**
* @Author sun
* @Description 批量插入未读消息
**/
@PostMapping("saveicmessagelist")
public Result saveIcMessageList(@RequestBody List<IcMessageFormDTO> msgList) {
icMessageService.saveIcMessageList(msgList);
return new Result();
}
/**
* @Author sun
* @Description 单条或批量修改已读
**/
@PostMapping("read")
public Result read(@LoginUser TokenDto tokenDto, @RequestBody ReadIcMessageFormDTO formDTO) {
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
icMessageService.read(formDTO);
return new Result();
}
@PostMapping("unreadcount/{userId}")
public Result<Integer> unReadCount(@PathVariable ("userId") String userId) {
return new Result<Integer>().ok(icMessageService.unReadCount(userId));
}
}

27
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/dao/IcMessageDao.java

@ -0,0 +1,27 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.IcMessageDTO;
import com.epmet.dto.form.IcMessageListFormDTO;
import com.epmet.dto.form.ReadIcMessageFormDTO;
import com.epmet.entity.IcMessageEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 用户消息表(党建小助手)
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-19
*/
@Mapper
public interface IcMessageDao extends BaseDao<IcMessageEntity> {
List<IcMessageDTO> selectMessageList(IcMessageListFormDTO formDTO);
void upByUserId(ReadIcMessageFormDTO formDTO);
Integer selectUnReadCount(@Param("userId") String userId);
}

74
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/IcMessageEntity.java

@ -0,0 +1,74 @@
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 用户消息表(党建小助手)
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-19
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("ic_message")
public class IcMessageEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* app=resi时此列为gridId,其他情况暂定 *
*/
private String gridId;
/**
* 被通知的用户id
*/
private String userId;
/**
* 消息通知对象居民端用户resi政府端工作人员gov运营端工作人员oper
*/
private String app;
/**
* 消息分类 党建活动party_act 党建日程party_schedule
*/
private String messageType;
/**
* 消息类型对应的业务Id
*/
private String targetId;
/**
* 消息标题
*/
private String title;
/**
* 消息通知内容
*/
private String messageContent;
/**
* read已读unread未读
*/
private String readFlag;
/**
* 调用者
*/
private String referer;
}

78
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/IcMessageService.java

@ -0,0 +1,78 @@
package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.IcMessageDTO;
import com.epmet.dto.form.IcMessageFormDTO;
import com.epmet.dto.form.IcMessageListFormDTO;
import com.epmet.dto.form.ReadIcMessageFormDTO;
import com.epmet.entity.IcMessageEntity;
import java.util.List;
import java.util.Map;
/**
* 用户消息表(党建小助手)
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-19
*/
public interface IcMessageService extends BaseService<IcMessageEntity> {
/**
* 默认查询
*
* @param formDTO
* @return java.util.List<IcMessageDTO>
* @author generator
* @date 2022-08-19
*/
PageData<IcMessageDTO> list(IcMessageListFormDTO formDTO);
/**
* 单条查询
*
* @param id
* @return IcMessageDTO
* @author generator
* @date 2022-08-19
*/
IcMessageDTO get(String id);
/**
* 默认保存
*
* @param dto
* @return void
* @author generator
* @date 2022-08-19
*/
void save(IcMessageDTO dto);
/**
* 默认更新
*
* @param dto
* @return void
* @author generator
* @date 2022-08-19
*/
void update(IcMessageDTO dto);
/**
* 批量删除
*
* @param ids
* @return void
* @author generator
* @date 2022-08-19
*/
void delete(String[] ids);
void saveIcMessageList(List<IcMessageFormDTO> msgList);
void read(ReadIcMessageFormDTO formDTO);
Integer unReadCount(String userId);
}

116
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/IcMessageServiceImpl.java

@ -0,0 +1,116 @@
package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.DictTypeEnum;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dao.IcMessageDao;
import com.epmet.dto.IcMessageDTO;
import com.epmet.dto.form.IcMessageFormDTO;
import com.epmet.dto.form.IcMessageListFormDTO;
import com.epmet.dto.form.IcMoveInListFormDTO;
import com.epmet.dto.form.ReadIcMessageFormDTO;
import com.epmet.dto.result.AllGridsByUserIdResultDTO;
import com.epmet.dto.result.HouseInfoDTO;
import com.epmet.dto.result.IcMoveInListResultDTO;
import com.epmet.entity.IcMessageEntity;
import com.epmet.service.IcMessageService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 用户消息表(党建小助手)
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-08-19
*/
@Service
public class IcMessageServiceImpl extends BaseServiceImpl<IcMessageDao, IcMessageEntity> implements IcMessageService {
@Override
public PageData<IcMessageDTO> list(IcMessageListFormDTO formDTO) {
PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage());
List<IcMessageDTO> list = baseDao.selectMessageList(formDTO);
PageInfo<IcMessageDTO> pageInfo = new PageInfo<>(list);
return new PageData<>(list, pageInfo.getTotal());
}
private QueryWrapper<IcMessageEntity> getWrapper(Map<String, Object> params){
String id = (String)params.get(FieldConstant.ID_HUMP);
QueryWrapper<IcMessageEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id);
return wrapper;
}
@Override
public IcMessageDTO get(String id) {
IcMessageEntity entity = baseDao.selectById(id);
return ConvertUtils.sourceToTarget(entity, IcMessageDTO.class);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void save(IcMessageDTO dto) {
IcMessageEntity entity = ConvertUtils.sourceToTarget(dto, IcMessageEntity.class);
insert(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(IcMessageDTO dto) {
IcMessageEntity entity = ConvertUtils.sourceToTarget(dto, IcMessageEntity.class);
updateById(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(String[] ids) {
// 逻辑删除(@TableLogic 注解)
baseDao.deleteBatchIds(Arrays.asList(ids));
}
@Override
public void saveIcMessageList(List<IcMessageFormDTO> msgList) {
List<IcMessageEntity> entityList = ConvertUtils.sourceToTarget(msgList, IcMessageEntity.class);
insertBatch(entityList);
}
@Override
public void read(ReadIcMessageFormDTO formDTO) {
//id入参有值就按id修改,没值就按用户修改
if(StringUtils.isNotBlank(formDTO.getId())){
IcMessageEntity entity = new IcMessageEntity();
entity.setId(formDTO.getId());
entity.setReadFlag("read");
updateById(entity);
return;
}
//批量修改某个人消息列表
baseDao.upByUserId(formDTO);
}
@Override
public Integer unReadCount(String userId) {
return baseDao.selectUnReadCount(userId);
}
}

11
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SystemMessageServiceImpl.java

@ -237,6 +237,17 @@ public class SystemMessageServiceImpl implements SystemMessageService {
case SystemMessageType.PARTYMEMBER_RESI_IMPORT:
topic=TopicConstants.PARTYMEMBER_RESI;
break;
case SystemMessageType.PARTY_MEETING_MESSAGE:
topic=TopicConstants.IC_MESSAGE;
break;
case SystemMessageType.ZBWYH:
case SystemMessageType.ZBDYDH:
case SystemMessageType.DXZH:
case SystemMessageType.DANGKE:
case SystemMessageType.ZTDR:
case SystemMessageType.WMFWHD:
topic=TopicConstants.PARTY_BUILDING;
break;
default:
logger.error("getTopicByMsgType msgType:{} is not support for any topic", msgType);
}

20
epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.19__create_ic_message.sql

@ -0,0 +1,20 @@
CREATE TABLE `ic_message` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`customer_id` varchar(64) NOT NULL COMMENT '客户id',
`grid_id` varchar(64) NOT NULL DEFAULT '*' COMMENT '暂定 *',
`user_id` varchar(64) NOT NULL COMMENT '被通知的用户id',
`app` varchar(32) NOT NULL COMMENT '消息通知对象:居民端用户resi、政府端工作人员gov、运营端工作人员oper',
`message_type` varchar(32) DEFAULT NULL COMMENT '消息分类 党建小助手:party',
`target_id` varchar(64) DEFAULT NULL COMMENT '消息类型对应的业务Id',
`title` varchar(255) NOT NULL COMMENT '消息标题',
`message_content` varchar(3096) NOT NULL COMMENT '消息通知内容',
`read_flag` varchar(32) NOT NULL DEFAULT 'unread' COMMENT 'read已读、unread未读',
`DEL_FLAG` varchar(1) NOT NULL COMMENT '删除标记 0:未删除,1:已删除',
`REVISION` int(11) DEFAULT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人(发布消息的人)',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
`REFERER` varchar(20) DEFAULT NULL COMMENT '调用者',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='用户消息表(党建小助手)';

2
epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.20__alter_ic_message.sql

@ -0,0 +1,2 @@
ALTER TABLE epmet_message.`ic_message`
MODIFY COLUMN `message_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息分类 \r\n党建活动:party_act \r\n党建日程:party_schedule \r\n' AFTER `app`;

40
epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/IcMessageDao.xml

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.IcMessageDao">
<select id="selectMessageList" resultType="com.epmet.dto.IcMessageDTO">
SELECT
*
FROM
ic_message
WHERE
del_flag = '0'
AND customer_id = #{customerId}
AND user_id = #{userId}
ORDER BY CREATED_TIME desc
</select>
<update id="upByUserId" parameterType="com.epmet.dto.form.ReadIcMessageFormDTO">
UPDATE ic_message
SET read_flag = 'read',
updated_by = #{userId},
updated_time = NOW()
WHERE
del_flag = '0'
AND customer_id = #{customerId}
AND user_id = #{userId}
</update>
<select id="selectUnReadCount" resultType="java.lang.Integer">
SELECT
COUNT(id)
FROM
ic_message
WHERE
del_flag = '0'
AND read_flag = 'unread'
AND user_id = #{userId}
</select>
</mapper>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save