Browse Source

Merge branch 'develop' of http://git.elinkit.com.cn:7070/r/epmet-cloud into release_temp

dev
jianjun 4 years ago
parent
commit
03b11ebf75
  1. 15
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/DingDingRobotConstant.java
  2. 27
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/DingTextBriefNessFormDTO.java
  3. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  4. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java
  5. 24
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/DataAggregatorOpenFeignClient.java
  6. 19
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/impl/DataAggregatorOpenFeignClientFallback.java
  7. 17
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/impl/DataAggregatorOpenFeignClientFallbackFactory.java
  8. 6
      epmet-module/data-aggregator/data-aggregator-server/pom.xml
  9. 12
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovOrgController.java
  10. 19
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/excel/GridLivelyExcel.java
  11. 6
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/GovOrgService.java
  12. 97
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java
  13. 3
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/ScreenProjectController.java
  14. 13
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/UserGroupIdDTO.java
  15. 24
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java
  16. 3
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginGroupMainDailyDao.java
  17. 8
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginIssueLogDailyDao.java
  18. 8
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginTopicLogDailyDao.java
  19. 5
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/CalCpcIndexService.java
  20. 290
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/CalCpcIndexServiceImpl.java
  21. 3
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexOriginExtractServiceImpl.java
  22. 7
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginGroupMainDailyService.java
  23. 8
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginTopicLogDailyService.java
  24. 8
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/IssueExtractService.java
  25. 13
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginGroupMainDailyServiceImpl.java
  26. 12
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginTopicLogDailyServiceImpl.java
  27. 13
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/IssueExtractServiceImpl.java
  28. 5
      epmet-module/data-statistical/data-statistical-server/src/main/resources/db/migration/V0.0.29__addindex_forcpcability.sql
  29. 18
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginGroupMainDailyDao.xml
  30. 22
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginIssueLogDailyDao.xml
  31. 23
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginTopicLogDailyDao.xml
  32. 15
      epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/ImportTaskController.java
  33. 7
      epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/ImportTaskService.java
  34. 16
      epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/ImportTaskServiceImpl.java
  35. 1
      epmet-module/epmet-common-service/common-service-server/src/main/resources/db/migration/V0.0.13__ImportTaskCommentModify.sql
  36. 4
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/resi/ResiActDetailResultDTO.java
  37. 6
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/CommunitySelfOrgImportExcel.java
  38. 8
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/ImportCommunitySelfOrganization.java
  39. 39
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActInfoServiceImpl.java
  40. 51
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcCommunitySelfOrganizationServiceImpl.java
  41. 40
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/db/migration/V0.0.12__insert_ic_party_relation.sql
  42. 6
      epmet-module/epmet-job/epmet-job-server/pom.xml
  43. 26
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/controller/DemoController.java
  44. 68
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/ExportGridLiveResTask.java
  45. 30
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/NeighborHoodManageDelFormDTO.java
  46. 22
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/NeighborHoodManageDelResultDTO.java
  47. 21
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/UpdateBuildingHouseNumResultDTO.java
  48. 1
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/CustomerGridConstant.java
  49. 4
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java
  50. 17
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  51. 9
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java
  52. 25
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java
  53. 26
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java
  54. 51
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java
  55. 98
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java
  56. 97
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java
  57. 9
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java
  58. 87
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java
  59. 38
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml
  60. 43
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml
  61. 3
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java
  62. 81
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleServiceImpl.java
  63. 8
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DelIcResiUserFormDTO.java
  64. 11
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  65. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java
  66. 107
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java
  67. 11
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java
  68. 62
      epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java
  69. 44
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiVirtualSheetImportListener.java
  70. 7
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java
  71. 468
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java
  72. 13
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java
  73. 19
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

15
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/DingDingRobotConstant.java

@ -0,0 +1,15 @@
package com.epmet.commons.tools.constant;
public interface DingDingRobotConstant {
/**
* 尹作梅测试用
*/
String YZM_TEST_URL="https://oapi.dingtalk.com/robot/send?access_token=249c5f49006cf14b37f9c3bc502ede34c16926a5ac5a0deeb9c9b4be735c0daf";
String YZM_TEST_SECRET="SECa03f447d67c62d924b5ae52dd9a7ddd9147d32c1d43f8cb43449f505444bdc6b";
/**
* EPMET V3 产品研发群
*/
String V3_ROBOT_URL="https://oapi.dingtalk.com/robot/send?access_token=75e9ab857536f3018baa09009646876edbd263d07521a1a22eedfc3852623614";
String V3_ROBOT_SECRET="SECdc8d3fb6780faa919f38fd43783f76d111255036c3b5bdcbc086dff023ee84d5";
}

27
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/DingTextBriefNessFormDTO.java

@ -0,0 +1,27 @@
package com.epmet.commons.tools.dto.form;
import com.dingtalk.api.request.OapiRobotSendRequest;
import lombok.Data;
/**
* 钉钉机器人发送文本通知@手机号简参
*/
@Data
public class DingTextBriefNessFormDTO {
/* {
"msgtype":"text",
"text":{
"content":"我就是我, @15764229697 是不同的烟火"
},
"at":{
"atMobiles": [
"15764229697"
],
"isAtAll":false
}
}*/
private String msgtype;
private OapiRobotSendRequest.Text text;
private OapiRobotSendRequest.At at;
}

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

@ -250,6 +250,7 @@ public enum EpmetErrorCode {
ORG_ADD_FAILED(8919,"添加失败"),
ORG_EDIT_FAILED(8920,"编辑失败"),
ORG_DEL_FAILED(8921,"删除失败"),
NEIGHBORHOOD_DEL_FAILED(8922,""),
//通用错误码 start

1
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java

@ -305,6 +305,7 @@ public class HttpClientManager {
*/
public Result<String> sendAlarmMsg(String content) {
Long timestamp = System.currentTimeMillis();
//生产环境报警群:重要消息通知
String url = "https://oapi.dingtalk.com/robot/send?access_token=c40055ed85e45fdaafea00f3218928794262ff15163e09ad5c89764433b69806";
String secret = "SEC220eafdcb39ab5dd6cffa9f11b0e5de7178ddac9812d40fdceb6b1dda2963186";

24
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/DataAggregatorOpenFeignClient.java

@ -0,0 +1,24 @@
package com.epmet.dataaggre.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO;
import com.epmet.dataaggre.feign.impl.DataAggregatorOpenFeignClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(name = ServiceConstant.DATA_AGGREGATOR_SERVER, fallbackFactory = DataAggregatorOpenFeignClientFallbackFactory.class)
// @FeignClient(name = ServiceConstant.DATA_AGGREGATOR_SERVER, fallbackFactory= DataAggregatorOpenFeignClientFallbackFactory.class,url = "localhost:8114")
public interface DataAggregatorOpenFeignClient {
/**
* 定时任务导出网格活跃统计表
* @param form
* @return
*/
@PostMapping(value = "data/aggregator/org/export-send-msg")
Result exportGridLiveRes(@RequestBody GridLivelyFormDTO form);
}

19
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/impl/DataAggregatorOpenFeignClientFallback.java

@ -0,0 +1,19 @@
package com.epmet.dataaggre.feign.impl;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO;
import com.epmet.dataaggre.feign.DataAggregatorOpenFeignClient;
public class DataAggregatorOpenFeignClientFallback implements DataAggregatorOpenFeignClient {
/**
* 定时任务导出网格活跃统计表
* @param form
* @return
*/
@Override
public Result exportGridLiveRes(GridLivelyFormDTO form) {
return ModuleUtils.feignConError(ServiceConstant.DATA_AGGREGATOR_SERVER, "pcworkRecordListExportSendMsg",form);
}
}

17
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/impl/DataAggregatorOpenFeignClientFallbackFactory.java

@ -0,0 +1,17 @@
package com.epmet.dataaggre.feign.impl;
import com.epmet.dataaggre.feign.DataAggregatorOpenFeignClient;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class DataAggregatorOpenFeignClientFallbackFactory implements FallbackFactory<DataAggregatorOpenFeignClient> {
private DataAggregatorOpenFeignClientFallback fallback = new DataAggregatorOpenFeignClientFallback();
@Override
public DataAggregatorOpenFeignClient create(Throwable throwable) {
return null;
}
}

6
epmet-module/data-aggregator/data-aggregator-server/pom.xml

@ -110,6 +110,12 @@
</exclusion>-->
</exclusions>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-oss-client</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

12
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovOrgController.java

@ -27,7 +27,6 @@ import com.epmet.dataaggre.entity.govorg.CustomerAgencyEntity;
import com.epmet.dataaggre.enums.GridMemberDataAnalysisEnums;
import com.epmet.dataaggre.service.AggreGridService;
import com.epmet.dataaggre.service.govorg.GovOrgService;
import com.epmet.dto.form.patrol.PcworkRecordListFormDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
@ -402,4 +401,15 @@ public class GovOrgController {
govOrgService.grdiLivelyExport(response, formDTO);
}
/**
* 定时任务调用本方法查询网格活跃度统计结果生成excel,上传oss.发送钉钉excel.
* @param formDTO
* @return
*/
@PostMapping("export-send-msg")
public Result pcworkRecordListExportSendMsg(@RequestBody GridLivelyFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, GridLivelyFormDTO.Grid.class);
govOrgService.pcworkRecordListExportSendMsg(formDTO);
return new Result();
}
}

19
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/excel/GridLivelyExcel.java

@ -29,40 +29,57 @@ import lombok.Data;
*/
@Data
public class GridLivelyExcel {
@ExcelProperty("组织ID")
@ExcelIgnore
private String agencyId;
//组织名称
@Excel(name = "组织名称",width = 15)
@ExcelProperty("组织名称")
@ColumnWidth(15)
private String agencyName;
//组织下所有网格总数
@Excel(name = "网格总数",width = 15)
@ExcelProperty("网格总数")
@ColumnWidth(15)
private Integer gridSumNum;
//活跃网格数
@Excel(name = "活跃网格数",width = 15)
@ExcelProperty("活跃网格数")
@ColumnWidth(15)
private Integer gridLivelyNum;
//活跃网格数占比
@Excel(name = "活跃网格数占比",width = 15)
@ExcelProperty("活跃网格数占比")
@ColumnWidth(15)
private String gridLivelyRatio;
//正常运行网格数
@Excel(name = "正常运行网格数",width = 15)
@ExcelProperty("正常运行网格数")
@ColumnWidth(15)
private Integer gridOrdinaryNum;
//正常运行网格数占比
@Excel(name = "正常运行网格数占比",width = 15)
@ExcelProperty("正常运行网格数占比")
@ColumnWidth(15)
private String gridOrdinaryRatio;
//僵尸网格数
@Excel(name = "僵尸网格数",width = 15)
@ExcelProperty("僵尸网格数")
@ColumnWidth(15)
private Integer gridLazyNum;
//僵尸网格数占比
@Excel(name = "僵尸网格数占比",width = 15)
@ExcelProperty("僵尸网格数占比")
@ColumnWidth(15)
private String gridLazyRatio;

6
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/GovOrgService.java

@ -182,4 +182,10 @@ public interface GovOrgService {
* @Description 查询组织的直属下级组织下网格活跃度统计--文件导出
**/
void grdiLivelyExport(HttpServletResponse response, GridLivelyFormDTO formDTO);
/**
* @Author sun
* @Description 查询组织的直属下级组织下网格活跃度统计--文件导出
**/
void pcworkRecordListExportSendMsg(GridLivelyFormDTO formDTO);
}

97
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java

@ -1,18 +1,27 @@
package com.epmet.dataaggre.service.govorg.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.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSON;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.DingDingRobotConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.form.DingTextBriefNessFormDTO;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetErrorCode;
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.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dataaggre.constant.DataSourceConstant;
import com.epmet.dataaggre.dao.govorg.*;
import com.epmet.dataaggre.dto.epmetuser.result.ListStaffResultDTO;
@ -28,13 +37,23 @@ import com.epmet.dataaggre.service.datastats.DataStatsService;
import com.epmet.dataaggre.service.epmetuser.EpmetUserService;
import com.epmet.dataaggre.service.govorg.GovOrgService;
import com.epmet.dataaggre.service.opercrm.CustomerRelation;
import com.epmet.dto.result.UploadImgResultDTO;
import com.epmet.feign.OssFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
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.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.*;
@ -67,6 +86,8 @@ public class GovOrgServiceImpl implements GovOrgService {
private EpmetUserService epmetUserService;
@Autowired
private DataStatsService dataStatsService;
@Autowired
private OssFeignClient ossFeignClient;
/**
* @param staffId
@ -690,4 +711,80 @@ public class GovOrgServiceImpl implements GovOrgService {
return name.toString();
}
/**
* @Author sun
* @Description 查询组织的直属下级组织下网格活跃度统计--文件导出
**/
@Override
public void pcworkRecordListExportSendMsg(GridLivelyFormDTO formDTO) {
List<GridLivelyExcel> data = ConvertUtils.sourceToTarget(grdiLively(formDTO), GridLivelyExcel.class);
if(CollectionUtils.isEmpty(data)){
log.warn(String.format("网格员活跃度统计数据查询为空,入参【%s】", JSON.toJSONString(formDTO)));
return;
}
ExportParams exportParams = new ExportParams();
String sheetName = excelSheetName(formDTO);
exportParams.setSheetName(sheetName);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams,
GridLivelyExcel.class, data);
// 文件名
String resultDescFileName = sheetName.concat(".xls");
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem fileItem = factory.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), true, resultDescFileName);
OutputStream os = null;
Result<UploadImgResultDTO> uploadResult = null;
try {
os = fileItem.getOutputStream();
workbook.write(os);
uploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem));
} catch (Exception e) {
String errormsg = ExceptionUtils.getErrorStackTrace(e);
log.warn("【网格活跃度统计】上传错误描述文件异常:{}", errormsg);
} finally {
try {
os.close();
} catch (IOException e) {
String errormsg = ExceptionUtils.getErrorStackTrace(e);
log.warn("【网格活跃度统计】上传错误描述文件关闭输出流:{}", errormsg);
}
try {
fileItem.delete();
} catch (Exception e) {
String errormsg = ExceptionUtils.getErrorStackTrace(e);
log.warn("【网格活跃度统计】上传错误描述文件删除临时文件:{}", errormsg);
}
}
log.warn(String.format("网格员活跃度统计数据查询为空,返参【%s】", JSON.toJSONString(uploadResult)));
if (uploadResult == null || !uploadResult.success()) {
log.warn("【网格活跃度统计】调用OSS上传结果描述文件失败");
} else {
//EPMETV3群机器人
String secret = DingDingRobotConstant.V3_ROBOT_SECRET;
String url = DingDingRobotConstant.V3_ROBOT_URL;
// String secret = DingDingRobotConstant.YZM_TEST_SECRET;
// String url = DingDingRobotConstant.YZM_TEST_URL;
DingTextBriefNessFormDTO dingTalkTextMsg=new DingTextBriefNessFormDTO();
dingTalkTextMsg.setMsgtype("text");
//小雷哥手机号:18660295251,
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
at.setAtMobiles(Arrays.asList("18660295251"));
at.setIsAtAll(false);
dingTalkTextMsg.setAt(at);
//文本方式发送
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
text.setContent("网格活跃度统计: \n" +
"起止时间: " + formDTO.getStartTime().concat(StrConstant.UNDER_LINE).concat(formDTO.getEndTime()) + "\n" +
"文件下载地址: " + uploadResult.getData().getUrl() + "\n"+
"请查收@18660295251");
dingTalkTextMsg.setText(text);
HttpClientManager.getInstance().sendDingMsg(JSON.toJSONString(dingTalkTextMsg), url, secret);
}
}
}

3
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/ScreenProjectController.java

@ -204,6 +204,7 @@ public class ScreenProjectController {
//tokenDto.setUserId("36bc0fb38565ecdebf8ab9b476b44548");
//tokenDto.setCustomerId("45687aa479955f9d06204d415238f7cc");
ValidatorUtils.validateEntity(formDTO, ProjectCategoryFormDTO.CategoryProjectExportForm.class);
String openTime = formDTO.getStartTime();
List<ProjectCategoryResultDTO> data = screenProjectService.selectProjectCategory(formDTO, tokenDto);
String templatePath = "excel/project_category_temp.xlsx";
@ -216,7 +217,7 @@ public class ScreenProjectController {
Map<String,Object> mapData = new HashMap<>();
mapData.put("list",resultDTOList);
mapData.put("orgName", formDTO.getOrgName());
mapData.put("exportDate",getExportDateStr(formDTO.getStartTime(),formDTO.getEndTime()));
mapData.put("exportDate", getExportDateStr(openTime, formDTO.getEndTime()));
Workbook workbook = ExcelExportUtil.exportExcel(new TemplateExportParams(templatePath), mapData);
response.setHeader("content-Type", "application/vnd.ms-excel");
response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("项目分类统计.xls", "UTF-8"));

13
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/UserGroupIdDTO.java

@ -0,0 +1,13 @@
package com.epmet.dto.extract;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class UserGroupIdDTO implements Serializable {
private String userId;
private List<String> groupIdList;
}

24
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java

@ -54,7 +54,6 @@ import com.epmet.service.stats.DimAgencyService;
import com.epmet.service.stats.DimCustomerPartymemberService;
import com.epmet.service.stats.DimCustomerService;
import com.epmet.util.DimIdGenerator;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@ -65,7 +64,9 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
@RequestMapping("demo")
@RestController
@ -620,20 +621,23 @@ public class DemoController {
private CalCpcIndexService calCpcIndexService;
@PostMapping("calCpcPartyAbility")
public Result calCpcPartyAbility(@RequestParam("customerId") String customerId, @RequestParam("monthId")String monthId) {
public Result calCpcPartyAbility(@RequestParam("customerId") String customerId, @RequestParam("monthId") String monthId) {
long startCpc = System.currentTimeMillis();
if (StringUtils.isNotBlank(customerId) && StringUtils.isNotBlank(monthId)) {
calCpcIndexService.calCpcPartyAbility(customerId,monthId);
}else{
calCpcIndexService.calCpcPartyAbilityV2(customerId, monthId);
// calCpcIndexService.calCpcPartyAbility(customerId, monthId);
} else {
QueryWrapper<DimCustomerEntity> customerEntityQueryWrapper = new QueryWrapper<>();
List<DimCustomerEntity> customerEntityList=dimCustomerDao.selectList(customerEntityQueryWrapper);
List<DimCustomerEntity> customerEntityList = dimCustomerDao.selectList(customerEntityQueryWrapper);
QueryWrapper<DimMonthEntity> wrapper = new QueryWrapper<>();
List<DimMonthEntity> dimMonthEntityList= dimMonthDao.selectList(wrapper);
for(DimCustomerEntity customerEntity:customerEntityList){
for(DimMonthEntity monthEntity:dimMonthEntityList) {
calCpcIndexService.calCpcPartyAbility(customerEntity.getId(),monthEntity.getId());
List<DimMonthEntity> dimMonthEntityList = dimMonthDao.selectList(wrapper);
for (DimCustomerEntity customerEntity : customerEntityList) {
for (DimMonthEntity monthEntity : dimMonthEntityList) {
calCpcIndexService.calCpcPartyAbilityV2(customerEntity.getId(), monthEntity.getId());
}
}
}
log.error("手动调用党员相关-党建能力执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, customerId);
return new Result();
}

3
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginGroupMainDailyDao.java

@ -19,6 +19,7 @@ package com.epmet.dao.evaluationindex.extract;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.extract.FactOriginGroupMainDailyDTO;
import com.epmet.dto.extract.UserGroupIdDTO;
import com.epmet.dto.extract.form.GridHeartedFormDTO;
import com.epmet.dto.extract.form.ScreenPartyLinkMassesDataFormDTO;
import com.epmet.dto.extract.result.GridGroupUserCountResultDTO;
@ -225,4 +226,6 @@ public interface FactOriginGroupMainDailyDao extends BaseDao<FactOriginGroupMain
* @return java.util.List<com.epmet.dto.extract.result.OrgStatisticsResultDTO>
*/
List<OrgStatisticsResultDTO> selectPartyMemberGroupStaticByGrid(@Param("customerId") String customerId, @Param("dateId") String dateId);
List<UserGroupIdDTO> selectGroupAndLeader(String customerId);
}

8
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginIssueLogDailyDao.java

@ -170,4 +170,12 @@ public interface FactOriginIssueLogDailyDao extends BaseDao<FactOriginIssueLogDa
* @return java.util.List<com.epmet.dto.extract.result.OrgStatisticsResultDTO>
*/
List<OrgStatisticsResultDTO> getClosedIssueIncr(@Param("customerId") String customerId, @Param("dateId") String dateId);
/**
* 查询出本月内做过议题表决的用户id
* @param customerId
* @param monthId
* @return
*/
List<String> queryVoteUserIds(@Param("customerId")String customerId, @Param("monthId")String monthId);
}

8
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginTopicLogDailyDao.java

@ -103,4 +103,12 @@ public interface FactOriginTopicLogDailyDao extends BaseDao<FactOriginTopicLogDa
* @date 2020/9/21 9:37 上午
*/
List<PartyActiveResultDTO> selectPartyActiveTopic(@Param("customerId")String customerId,@Param("monthId") String monthId,@Param("isParty") Integer isParty);
/**
* 查询出本月内评论过话题的用户id
* @param customerId
* @param monthId
* @return
*/
List<String> queryCommentTopicUserIds(@Param("customerId") String customerId, @Param("monthId")String monthId);
}

5
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/CalCpcIndexService.java

@ -1,7 +1,5 @@
package com.epmet.service.evaluationindex.extract.dataToIndex;
import java.util.Map;
/**
* 党员相关
*
@ -18,4 +16,7 @@ public interface CalCpcIndexService {
* @Date 2020/9/17 14:08
**/
void calCpcPartyAbility(String customerId, String monthId);
void calCpcPartyAbilityV2(String customerId, String monthId);
}

290
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/CalCpcIndexServiceImpl.java

@ -1,7 +1,10 @@
package com.epmet.service.evaluationindex.extract.dataToIndex.impl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.dto.extract.UserGroupIdDTO;
import com.epmet.dto.indexcollect.result.CpcIndexCommonDTO;
import com.epmet.entity.evaluationindex.indexcoll.FactIndexPartyAblityCpcMonthlyEntity;
import com.epmet.service.evaluationindex.extract.dataToIndex.CalCpcIndexService;
@ -9,8 +12,10 @@ import com.epmet.service.evaluationindex.extract.todata.*;
import com.epmet.service.evaluationindex.indexcoll.FactIndexPartyAblityCpcMonthlyService;
import com.epmet.service.group.GroupDataService;
import com.epmet.service.stats.DimCustomerPartymemberService;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -20,6 +25,8 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
* 党员相关
@ -134,6 +141,237 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
factIndexPartyAblityCpcMonthlyService.delAndSavePartyAblityCpcMonthly(customerId,monthId,indexPartyAblityCpcList);
}
@Override
public void calCpcPartyAbilityV2(String customerId, String monthId) {
//1、构造初始值 当前客户下所有的党员
List<FactIndexPartyAblityCpcMonthlyEntity> indexPartyAblityCpcList = dimCustomerPartymemberService.selectPartyMemberList(customerId);
if (CollectionUtils.isEmpty(indexPartyAblityCpcList)) {
log.info("dim_customer_partymember do not any records customerId=" + customerId);
return;
}
//可以先查询出每个党员的 自建群
Map<String, List<String>> userCreatedGroups = queryUserCreatedGroups(customerId, indexPartyAblityCpcList);
CompletableFuture<Map<String, Integer>> createTopicCountFuture = CompletableFuture.supplyAsync(() -> {
return calCreateTopicCount(customerId, monthId);
});
CompletableFuture<Map<String, Integer>> joinTopicCountFuture = CompletableFuture.supplyAsync(() -> {
return calJoinTopicCount(customerId, monthId);
});
CompletableFuture<Map<String, Integer>> shiftIssueCountFuture = CompletableFuture.supplyAsync(() -> {
return calShiftIssueCount(customerId, monthId);
});
CompletableFuture<Map<String, Integer>> shiftProjectCountFuture = CompletableFuture.supplyAsync(() -> {
return calShiftProjectCount(customerId, monthId);
});
CompletableFuture<Map<String, Integer>> joinThreeMeetsCountFuture = CompletableFuture.supplyAsync(() -> {
return calJoinThreeMeetsCount(customerId, monthId);
});
CompletableFuture<Map<String, Integer>> groupUserCountFuture = CompletableFuture.supplyAsync(() -> {
return calgroupUserCount(customerId, monthId, indexPartyAblityCpcList, userCreatedGroups);
});
CompletableFuture<Map<String, Integer>> groupActiveUserCountFuture = CompletableFuture.supplyAsync(() -> {
return calGroupActiveUserCount(customerId, monthId, indexPartyAblityCpcList, userCreatedGroups);
});
CompletableFuture<Map<String, Integer>> groupTopicCountFuture = CompletableFuture.supplyAsync(() -> {
return calGroupTopicCount(customerId, monthId);
});
CompletableFuture<Map<String, BigDecimal>> topicToIssueRatioFuture = CompletableFuture.supplyAsync(() -> {
return caltopicToIssueRatio(customerId, monthId, indexPartyAblityCpcList, userCreatedGroups);
});
Map<String, Integer> createTopicCountMap = new HashMap<>();
Map<String, Integer> joinTopicCountMap = new HashMap<>();
Map<String, Integer> shiftIssueCountMap = new HashMap<>();
Map<String, Integer> shiftProjectCountMap = new HashMap<>();
Map<String, Integer> joinThreeMeetsCountMap = new HashMap<>();
Map<String, Integer> groupUserCountMap = new HashMap<>();
Map<String, Integer> groupActiveUserCountMap = new HashMap<>();
Map<String, Integer> groupTopicCountMap = new HashMap<>();
Map<String, BigDecimal> topicToIssueRatioMap = new HashMap<>();
try {
//1、党员提出话题数
createTopicCountMap = createTopicCountFuture.get();
} catch (Exception e) {
log.error("党员相关-党建能力原始指标值【党员提出话题数】计算异常:{}", ExceptionUtils.getErrorStackTrace(e));
}
try{
//2、党员参与话题数(支持、反对、评论、浏览)---目前只统计 党员评论话题次数之和
joinTopicCountMap = joinTopicCountFuture.get();
} catch (Exception e) {
log.error("党员相关-党建能力原始指标值【党员参与话题数】计算异常:{}", ExceptionUtils.getErrorStackTrace(e));
}
try{
//3、党员提出的话题转议题数
shiftIssueCountMap = shiftIssueCountFuture.get();
} catch (Exception e) {
log.error("党员相关-党建能力原始指标值【党员提出的话题转议题数】计算异常:{}", ExceptionUtils.getErrorStackTrace(e));
}
try{
//4、党员提出的议题转项目数
shiftProjectCountMap = shiftProjectCountFuture.get();
} catch (Exception e) {
log.error("党员相关-党建能力原始指标值【党员提出的议题转项目数】计算异常:{}", ExceptionUtils.getErrorStackTrace(e));
}
try{
//5、参加“三会一课”次数 默认0 :当前用户在本月内活动签到次数 限制活动分类编码100001 三会一课
joinThreeMeetsCountMap = joinThreeMeetsCountFuture.get();
} catch (Exception e) {
log.error("党员相关-党建能力原始指标值【参加“三会一课”次数】计算异常:{}", ExceptionUtils.getErrorStackTrace(e));
}
try{
//6、党员自建群群众人数 :和评价周期无关
groupUserCountMap = groupUserCountFuture.get();
} catch (Exception e) {
log.error("党员相关-党建能力原始指标值【党员自建群群众人数】计算异常:{}", ExceptionUtils.getErrorStackTrace(e));
}
try{
//7、党员自建群活跃群众人数
groupActiveUserCountMap = groupActiveUserCountFuture.get();
} catch (Exception e) {
log.error("党员相关-党建能力原始指标值【党员自建群活跃群众人数】计算异常:{}", ExceptionUtils.getErrorStackTrace(e));
}
try{
//8、党员自建群活跃度——话题数:从话题表中统计党员自建群i的话题总数;对所有自建群话题数累加。
groupTopicCountMap = groupTopicCountFuture.get();
} catch (Exception e) {
log.error("党员相关-党建能力原始指标值【党员自建群活跃度】计算异常:{}", ExceptionUtils.getErrorStackTrace(e));
}
try{
//9、自建群活跃度——议题转项目率
topicToIssueRatioMap = topicToIssueRatioFuture.get();
} catch (Exception e) {
log.error("党员相关-党建能力原始指标值【自建群活跃度】计算异常:{}", ExceptionUtils.getErrorStackTrace(e));
}
List<FactIndexPartyAblityCpcMonthlyEntity> list = new ArrayList<>();
List<List<FactIndexPartyAblityCpcMonthlyEntity>> partionList = Lists.partition(indexPartyAblityCpcList, 500);
List<CompletableFuture<List<FactIndexPartyAblityCpcMonthlyEntity>>> entityFutures = new ArrayList<>();
//2、计算实际值,更新
for (List<FactIndexPartyAblityCpcMonthlyEntity> partList : partionList) {
String quarterId = DateUtils.getQuarterId(monthId);
String yearId = DateUtils.getYearId(monthId);
Map<String, Integer> finalCreateTopicCountMap = createTopicCountMap;
Map<String, Integer> finalJoinTopicCountMap = joinTopicCountMap;
Map<String, Integer> finalShiftIssueCountMap = shiftIssueCountMap;
Map<String, Integer> finalShiftProjectCountMap = shiftProjectCountMap;
Map<String, Integer> finalJoinThreeMeetsCountMap = joinThreeMeetsCountMap;
Map<String, Integer> finalGroupUserCountMap = groupUserCountMap;
Map<String, Integer> finalGroupActiveUserCountMap = groupActiveUserCountMap;
Map<String, Integer> finalGroupTopicCountMap = groupTopicCountMap;
Map<String, BigDecimal> finalTopicToIssueRatioMap = topicToIssueRatioMap;
//目前平阴2100多个党员,200个一组,开一个线程
CompletableFuture<List<FactIndexPartyAblityCpcMonthlyEntity>> future = CompletableFuture.supplyAsync(() -> {
return constructEntity(monthId,
quarterId,
yearId,
partList,
finalCreateTopicCountMap,
finalJoinTopicCountMap,
finalShiftIssueCountMap,
finalShiftProjectCountMap,
finalJoinThreeMeetsCountMap,
finalGroupUserCountMap,
finalGroupActiveUserCountMap,
finalGroupTopicCountMap,
finalTopicToIssueRatioMap);
});
entityFutures.add(future);
}
for (CompletableFuture<List<FactIndexPartyAblityCpcMonthlyEntity>> entityFuture : entityFutures) {
try {
List<FactIndexPartyAblityCpcMonthlyEntity> partList = entityFuture.get();
list.addAll(partList);
} catch (InterruptedException e) {
log.error("党员相关-党建能力原始指标构造异常:{}", ExceptionUtils.getErrorStackTrace(e));
} catch (Exception e) {
log.error("党员相关-党建能力原始指标构造异常:{}", ExceptionUtils.getErrorStackTrace(e));
}
}
//3、删除之前统计过的、批插入批量插入
factIndexPartyAblityCpcMonthlyService.delAndSavePartyAblityCpcMonthly(customerId, monthId, list);
}
private List<FactIndexPartyAblityCpcMonthlyEntity> constructEntity(String monthId,
String quarterId,
String yearId,
List<FactIndexPartyAblityCpcMonthlyEntity> partList,
Map<String, Integer> createTopicCountMap,
Map<String, Integer> joinTopicCountMap,
Map<String, Integer> shiftIssueCountMap,
Map<String, Integer> shiftProjectCountMap,
Map<String, Integer> joinThreeMeetsCountMap,
Map<String, Integer> groupUserCountMap,
Map<String, Integer> groupActiveUserCountMap,
Map<String, Integer> groupTopicCountMap,
Map<String, BigDecimal> topicToIssueRatioMap) {
List<FactIndexPartyAblityCpcMonthlyEntity> resultList = new ArrayList<>();
for (FactIndexPartyAblityCpcMonthlyEntity temp : partList) {
FactIndexPartyAblityCpcMonthlyEntity indexPartyAblityCpcEntity = ConvertUtils.sourceToTarget(temp, FactIndexPartyAblityCpcMonthlyEntity.class);
indexPartyAblityCpcEntity.setMonthId(monthId);
indexPartyAblityCpcEntity.setQuarterId(quarterId);
indexPartyAblityCpcEntity.setYearId(yearId);
//1、党员提出话题数
if (MapUtils.isNotEmpty(createTopicCountMap) && createTopicCountMap.containsKey(indexPartyAblityCpcEntity.getUserId())) {
indexPartyAblityCpcEntity.setCreateTopicCount(createTopicCountMap.get(indexPartyAblityCpcEntity.getUserId()));
}
//2、党员参与话题数(支持、反对、评论、浏览)---目前只统计 党员评论话题次数之和
if (MapUtils.isNotEmpty(joinTopicCountMap) && joinTopicCountMap.containsKey(indexPartyAblityCpcEntity.getUserId())) {
indexPartyAblityCpcEntity.setJoinTopicCount(joinTopicCountMap.get(indexPartyAblityCpcEntity.getUserId()));
}
//3、党员提出的话题转议题数
if (MapUtils.isNotEmpty(shiftIssueCountMap) && shiftIssueCountMap.containsKey(indexPartyAblityCpcEntity.getUserId())) {
indexPartyAblityCpcEntity.setShiftIssueCount(shiftIssueCountMap.get(indexPartyAblityCpcEntity.getUserId()));
}
//4、党员提出的议题转项目数
if (MapUtils.isNotEmpty(shiftProjectCountMap) && shiftProjectCountMap.containsKey(indexPartyAblityCpcEntity.getUserId())) {
indexPartyAblityCpcEntity.setShiftProjectCount(shiftProjectCountMap.get(indexPartyAblityCpcEntity.getUserId()));
}
//5、参加“三会一课”次数 目前没有此业务,默认0 : 当前用户在本月内活动签到次数 限制活动分类编码100001 三会一课
if (MapUtils.isNotEmpty(joinThreeMeetsCountMap) && joinThreeMeetsCountMap.containsKey(indexPartyAblityCpcEntity.getUserId())) {
indexPartyAblityCpcEntity.setJoinThreeMeetsCount(joinThreeMeetsCountMap.get(indexPartyAblityCpcEntity.getUserId()));
}
//6、党员自建群群众人数
if (MapUtils.isNotEmpty(groupUserCountMap) && groupUserCountMap.containsKey(indexPartyAblityCpcEntity.getUserId())) {
indexPartyAblityCpcEntity.setGroupUserCount(groupUserCountMap.get(indexPartyAblityCpcEntity.getUserId()));
}
//7、党员自建群活跃群众人数
if (MapUtils.isNotEmpty(groupActiveUserCountMap) && groupActiveUserCountMap.containsKey(indexPartyAblityCpcEntity.getUserId())) {
indexPartyAblityCpcEntity.setGroupActiveUserCount(groupActiveUserCountMap.get(indexPartyAblityCpcEntity.getUserId()));
}
//8、党员自建群活跃度——话题数
if (MapUtils.isNotEmpty(groupTopicCountMap) && groupTopicCountMap.containsKey(indexPartyAblityCpcEntity.getUserId())) {
indexPartyAblityCpcEntity.setGroupTopicCount(groupTopicCountMap.get(indexPartyAblityCpcEntity.getUserId()));
}
//9、自建群活跃度——议题转项目率
if (MapUtils.isNotEmpty(topicToIssueRatioMap) && topicToIssueRatioMap.containsKey(indexPartyAblityCpcEntity.getUserId())) {
indexPartyAblityCpcEntity.setTopicToIssueRatio(topicToIssueRatioMap.get(indexPartyAblityCpcEntity.getUserId()));
}
resultList.add(indexPartyAblityCpcEntity);
}
return resultList;
}
/**
* @param customerId
* @param partyMemberList
@ -144,7 +382,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
**/
private Map<String, List<String>> queryUserCreatedGroups(String customerId, List<FactIndexPartyAblityCpcMonthlyEntity> partyMemberList) {
Map<String, List<String>> map = new HashMap<>();
for (FactIndexPartyAblityCpcMonthlyEntity partyMember : partyMemberList) {
/*for (FactIndexPartyAblityCpcMonthlyEntity partyMember : partyMemberList) {
//查询当前党员建了多少个组
List<String> groupIdList=factOriginGroupMainDailyService.selectGroupIds(customerId,partyMember.getUserId());
if (CollectionUtils.isEmpty(groupIdList)) {
@ -153,6 +391,17 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
} else {
map.put(partyMember.getUserId(), groupIdList);
}
}*/
//查询出所有的小组,按照组长
List<UserGroupIdDTO> list = factOriginGroupMainDailyService.selectGroupAndLeader(customerId);
Map<String, List<String>> userGroupIdMap = list.stream().collect(Collectors.toMap(UserGroupIdDTO::getUserId, UserGroupIdDTO::getGroupIdList));
for (FactIndexPartyAblityCpcMonthlyEntity partyMember : partyMemberList) {
if (MapUtils.isEmpty(userGroupIdMap) || !userGroupIdMap.containsKey(partyMember.getUserId())) {
map.put(partyMember.getUserId(), new ArrayList<>());
continue;
} else {
map.put(partyMember.getUserId(), userGroupIdMap.get(partyMember.getUserId()));
}
}
return map;
}
@ -166,11 +415,13 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
* @Date 2020/9/18 10:59
**/
private Map<String, Integer> calCreateTopicCount(String customerId, String monthId) {
long startCpc = System.currentTimeMillis();
List<CpcIndexCommonDTO> list = factOriginTopicMainDailyService.selectPartyCreateTopicCount(customerId, monthId);
Map<String, Integer> resultMap = new HashMap<>();
for (CpcIndexCommonDTO cpcIndexCommonDTO: list) {
resultMap.put(cpcIndexCommonDTO.getUserId(), cpcIndexCommonDTO.getIndexValue());
}
log.warn("1、党员相关-党建能力【党员提出话题数】执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, customerId);
return resultMap;
}
@ -183,11 +434,13 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
* @Date 2020/9/18 13:33
**/
private Map<String, Integer> calJoinTopicCount(String customerId, String monthId) {
long startCpc = System.currentTimeMillis();
List<CpcIndexCommonDTO> list = factOriginTopicLogDailyService.selectJoinTopicCount(customerId, monthId);
Map<String, Integer> resultMap = new HashMap<>();
for (CpcIndexCommonDTO cpcIndexCommonDTO : list) {
resultMap.put(cpcIndexCommonDTO.getUserId(), cpcIndexCommonDTO.getIndexValue());
}
log.warn("2、党员相关-党建能力【党员参与话题数】执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, customerId);
return resultMap;
}
@ -201,11 +454,13 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
* @Date 2020/9/18 13:53
**/
private Map<String, Integer> calShiftIssueCount(String customerId, String monthId) {
long startCpc = System.currentTimeMillis();
List<CpcIndexCommonDTO> list = issueExtractService.selectShiftIssueCount(customerId, monthId);
Map<String, Integer> resultMap = new HashMap<>();
for (CpcIndexCommonDTO cpcIndexCommonDTO : list) {
resultMap.put(cpcIndexCommonDTO.getUserId(), cpcIndexCommonDTO.getIndexValue());
}
log.warn("3、党员相关-党建能力【党员提出的话题转议题数】执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, customerId);
return resultMap;
}
@ -218,12 +473,14 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
* @Date 2020/9/18 14:10
**/
private Map<String, Integer> calShiftProjectCount(String customerId, String monthId) {
long startCpc = System.currentTimeMillis();
//查询fact_origin_project_main_daily 表 中议题的议题的状态为 shift_
List<CpcIndexCommonDTO> list = factOriginProjectMainDailyService.selectShiftProjectCount(customerId, monthId);
Map<String, Integer> resultMap = new HashMap<>();
for (CpcIndexCommonDTO cpcIndexCommonDTO : list) {
resultMap.put(cpcIndexCommonDTO.getUserId(), cpcIndexCommonDTO.getIndexValue());
}
log.warn("4、党员相关-党建能力【党员提出的议题转项目数】执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, customerId);
return resultMap;
}
@ -236,12 +493,14 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
* @Date 2021/5/12 13:38
**/
private Map<String, Integer> calJoinThreeMeetsCount(String customerId, String monthId) {
long startCpc = System.currentTimeMillis();
//查询小组活动签到表,计算用户在本月内签到的活动次数
List<CpcIndexCommonDTO> list=groupDataService.selectJoinThreeMeetsCount(customerId,monthId);
Map<String, Integer> resultMap = new HashMap<>();
for (CpcIndexCommonDTO cpcIndexCommonDTO : list) {
resultMap.put(cpcIndexCommonDTO.getUserId(), cpcIndexCommonDTO.getIndexValue());
}
log.warn("5、党员相关-党建能力【参加“三会一课”次数】执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, customerId);
return resultMap;
}
@ -256,6 +515,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
private Map<String, Integer> calgroupUserCount(String customerId, String monthId,
List<FactIndexPartyAblityCpcMonthlyEntity> partyMemberList,
Map<String, List<String>> userCreatedGroups) {
long startCpc = System.currentTimeMillis();
/*含义评价周期内党员自建群中群众成员数
数据来源用户社群关系表
计算方法对党员i的所有j个自建群从用户社群关系表中统计属于每个自建群的群众用户总人数并对j个群众用户总数进行不重复累加
@ -265,7 +525,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
//查询当前党员建了多少个组
List<String> groupIdList = userCreatedGroups.get(partyMember.getUserId());
if (CollectionUtils.isEmpty(groupIdList)) {
log.info("当前党员userId="+partyMember.getUserId()+"没有创建过小组, 【党员相关-党员自建群群众人数】赋值0");
// log.info("当前党员userId="+partyMember.getUserId()+"没有创建过小组, 【党员相关-党员自建群群众人数】赋值0");
map.put(partyMember.getUserId(), NumConstant.ZERO);
continue;
}
@ -279,6 +539,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
map.put(partyMember.getUserId(), memberIdList.size());
}
}
log.warn("6、党员相关-党建能力【党员自建群群众人数】执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, customerId);
return map;
}
@ -294,6 +555,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
private Map<String, Integer> calGroupActiveUserCount(String customerId, String monthId,
List<FactIndexPartyAblityCpcMonthlyEntity> partyMemberList,
Map<String, List<String>> userCreatedGroups) {
long startCpc = System.currentTimeMillis();
/*含义评价周期内党员自建群中活跃群众成员数所谓活跃群成员即评价周期内参与话题事件评论点赞点踩总次数大于给定阈值的群众用户
数据来源话题用户阅读表话题评论用户表态表话题评论表事件点赞点踩表事件评论点赞点踩表事件评论表用户信息表
计算方法
@ -311,7 +573,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
//1、查询当前党员建了多少个组
List<String> groupIdList = userCreatedGroups.get(partyMember.getUserId());
if (CollectionUtils.isEmpty(groupIdList)) {
log.warn("当前党员userId="+partyMember.getUserId()+"没有创建过小组, 【党员相关-党员自建群活跃群众人数】赋值0");
// log.warn("当前党员userId="+partyMember.getUserId()+"没有创建过小组, 【党员相关-党员自建群活跃群众人数】赋值0");
map.put(partyMember.getUserId(), NumConstant.ZERO);
continue;
}
@ -321,23 +583,35 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
map.put(partyMember.getUserId(), NumConstant.ZERO);
continue;
}
//可以先把本月内评论的用户+本月内表决过的用户 集合查询出来。避免循环查询
List<String> commentTopicUserIds=factOriginTopicLogDailyService.queryCommentTopicUserIds(customerId,monthId);
List<String> voteUserIds=issueExtractService.queryVoteUserIds(customerId,monthId);
//3、判断每个成员是否 “活跃”
for (String memberId : memberIdList) {
//注释2022.03.02
//1、判断成员在本月内是否评论过
Integer topicCommentCount = factOriginTopicLogDailyService.selectUserCommentCount(memberId, customerId, monthId);
/*Integer topicCommentCount = factOriginTopicLogDailyService.selectUserCommentCount(memberId, customerId, monthId);
if (topicCommentCount > 0) {
groupActiveUserCount++;
continue;
}
}*/
//2、判断成员在本月内是否表决过(支持or反对)议题
Integer voteCount = issueExtractService.selectCountUserVote(memberId, customerId, monthId);
/*Integer voteCount = issueExtractService.selectCountUserVote(memberId, customerId, monthId);
if (voteCount > 0) {
groupActiveUserCount++;
}*/
if (CollectionUtils.isNotEmpty(commentTopicUserIds) && commentTopicUserIds.contains(memberId)) {
groupActiveUserCount++;
continue;
}
if (CollectionUtils.isNotEmpty(voteUserIds) && voteUserIds.contains(memberId)) {
groupActiveUserCount++;
}
}
//赋值每个党员的 -- 党员自建群活跃群众人数
map.put(partyMember.getUserId(), groupActiveUserCount);
}
log.warn("7、党员相关-党建能力【党员自建群活跃群众人数】执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, customerId);
return map;
}
@ -351,6 +625,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
* @Date 2020/9/18 14:31
**/
private Map<String, Integer> calGroupTopicCount(String customerId, String monthId) {
long startCpc = System.currentTimeMillis();
/*含义评价周期内党员自建群中话题发布数
数据来源话题表
计算方法从话题表中统计党员自建群i的话题总数对所有自建群话题数累加
@ -360,6 +635,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
for (CpcIndexCommonDTO dto : list) {
resultMap.put(dto.getUserId(), dto.getIndexValue());
}
log.warn("8、党员相关-党建能力【党员自建群活跃度——话题数】执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, customerId);
return resultMap;
}
@ -374,6 +650,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
String monthId,
List<FactIndexPartyAblityCpcMonthlyEntity> partyMemberList,
Map<String, List<String>> userCreatedGroups) {
long startCpc = System.currentTimeMillis();
Map<String, BigDecimal> map = new HashMap<>();
for (FactIndexPartyAblityCpcMonthlyEntity partyMember : partyMemberList) {
//如果党员自建群为空,直接赋值0
@ -408,6 +685,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
BigDecimal topicToIssueRatio = new BigDecimal(topicToIssueRatioStr).multiply(new BigDecimal(NumConstant.ONE_HUNDRED));
map.put(partyMember.getUserId(), topicToIssueRatio);
}
log.warn("9、党员相关-党建能力【自建群活跃度——议题转项目率】执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, customerId);
return map;
}

3
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexOriginExtractServiceImpl.java

@ -101,7 +101,8 @@ public class IndexOriginExtractServiceImpl implements IndexOriginExtractService
executorService.submit(() -> {
try {
long startCpc = System.currentTimeMillis();
calCpcIndexService.calCpcPartyAbility(customerId, monthId);
// calCpcIndexService.calCpcPartyAbility(customerId, monthId);
calCpcIndexService.calCpcPartyAbilityV2(customerId, monthId);
log.info("党员相关-党建能力执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, param.getCustomerId());
} catch (Exception e) {
log.error("抽取【党员相关数据】发生异常,参数:" + JSON.toJSONString(param), e);

7
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginGroupMainDailyService.java

@ -19,6 +19,7 @@ package com.epmet.service.evaluationindex.extract.todata;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.dto.extract.FactOriginGroupMainDailyDTO;
import com.epmet.dto.extract.UserGroupIdDTO;
import com.epmet.dto.extract.form.ScreenPartyLinkMassesDataFormDTO;
import com.epmet.dto.extract.result.GridGroupUserCountResultDTO;
import com.epmet.dto.extract.result.OrgStatisticsResultDTO;
@ -125,4 +126,10 @@ public interface FactOriginGroupMainDailyService extends BaseService<FactOriginG
*/
Map<String, OrgStatisticsResultDTO> getPartyMemberGroupStatic(String customerId, String dateId, String type);
/**
* 查询出小组id ,组长userId
* @param customerId
* @return
*/
List<UserGroupIdDTO> selectGroupAndLeader(String customerId);
}

8
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginTopicLogDailyService.java

@ -79,4 +79,12 @@ public interface FactOriginTopicLogDailyService extends BaseService<FactOriginTo
* @date 2020/9/21 9:37 上午
*/
List<PartyActiveResultDTO> selectPartyActiveTopic(String customerId, String monthId,Integer isParty);
/**
* 查询出本月内评论过话题的用户id
* @param customerId
* @param monthId
* @return
*/
List<String> queryCommentTopicUserIds(String customerId, String monthId);
}

8
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/IssueExtractService.java

@ -107,4 +107,12 @@ public interface IssueExtractService {
* @date 2020/9/21 9:37 上午
*/
List<PartyActiveResultDTO> selectPartyActiveIssueVote(String customerId, String monthId, Integer isParty);
/**
* 查询出本月内做过议题表决的用户id
* @param customerId
* @param monthId
* @return
*/
List<String> queryVoteUserIds(String customerId, String monthId);
}

13
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginGroupMainDailyServiceImpl.java

@ -22,8 +22,8 @@ import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.constant.OrgTypeConstant;
import com.epmet.dao.evaluationindex.extract.FactOriginGroupMainDailyDao;
import com.epmet.dao.evaluationindex.extract.FactOriginGroupMemberDailyDao;
import com.epmet.dto.extract.FactOriginGroupMainDailyDTO;
import com.epmet.dto.extract.UserGroupIdDTO;
import com.epmet.dto.extract.form.ScreenPartyLinkMassesDataFormDTO;
import com.epmet.dto.extract.result.GridGroupUserCountResultDTO;
import com.epmet.dto.extract.result.OrgStatisticsResultDTO;
@ -198,4 +198,15 @@ public class FactOriginGroupMainDailyServiceImpl extends BaseServiceImpl<FactOri
}
}
/**
* 查询出小组id ,组长userId
*
* @param customerId
* @return
*/
@Override
public List<UserGroupIdDTO> selectGroupAndLeader(String customerId) {
return baseDao.selectGroupAndLeader(customerId);
}
}

12
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginTopicLogDailyServiceImpl.java

@ -108,4 +108,16 @@ public class FactOriginTopicLogDailyServiceImpl extends BaseServiceImpl<FactOrig
public List<PartyActiveResultDTO> selectPartyActiveTopic(String customerId, String monthId, Integer isParty) {
return baseDao.selectPartyActiveTopic(customerId, monthId, isParty);
}
/**
* 查询出本月内评论过话题的用户id
*
* @param customerId
* @param monthId
* @return
*/
@Override
public List<String> queryCommentTopicUserIds(String customerId, String monthId) {
return baseDao.queryCommentTopicUserIds(customerId,monthId);
}
}

13
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/IssueExtractServiceImpl.java

@ -374,4 +374,17 @@ public class IssueExtractServiceImpl implements IssueExtractService {
public List<PartyActiveResultDTO> selectPartyActiveIssueVote(String customerId, String monthId, Integer isParty) {
return issueLogDailyDao.selectPartyActiveIssueVote(customerId, monthId, isParty);
}
/**
* 查询出本月内做过议题表决的用户id
*
* @param customerId
* @param monthId
* @return
*/
@Override
public List<String> queryVoteUserIds(String customerId, String monthId) {
return issueLogDailyDao.queryVoteUserIds(customerId,monthId);
}
}

5
epmet-module/data-statistical/data-statistical-server/src/main/resources/db/migration/V0.0.29__addindex_forcpcability.sql

@ -0,0 +1,5 @@
-- stat库执行
alter table fact_origin_topic_main_daily add index `IDX_TOPIC_MAIN_GROUP_ID` (`GROUP_ID`);
alter table fact_origin_project_main_daily add index `IDX_P_MAIN_TOPIC_ID` (`TOPIC_ID`);
alter table fact_origin_issue_main_daily add index `IDX_ISSUE_MAIN_TOPIC_ID` (`TOPIC_ID`);
alter table fact_origin_group_member_daily add index `IDX_GM_GROUP_ID` (`GROUP_ID`);

18
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginGroupMainDailyDao.xml

@ -382,4 +382,22 @@
GRID_ID
</select>
<resultMap id="UserGroupIdDTOMap" type="com.epmet.dto.extract.UserGroupIdDTO">
<id property="userId" column="GROUP_OWNER_ID"/>
<collection property="groupIdList" ofType="java.lang.String">
<constructor>
<arg column="ID"/>
</constructor>
</collection>
</resultMap>
<select id="selectGroupAndLeader" parameterType="java.lang.String" resultMap="UserGroupIdDTOMap">
SELECT
t1.GROUP_OWNER_ID,
t1.ID
FROM
fact_origin_group_main_daily t1
WHERE t1.DEL_FLAG='0'
and t1.CUSTOMER_ID = #{customerId}
</select>
</mapper>

22
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginIssueLogDailyDao.xml

@ -237,4 +237,26 @@
GRID_ID,
OPERATION_USER_ID
</select>
<select id="queryVoteUserIds" parameterType="map" resultType="java.lang.String">
SELECT
*
FROM
(
SELECT
T1.OPERATION_USER_ID AS userId,
COUNT( 1 ) AS TOTAL
FROM
fact_origin_issue_log_daily T1
WHERE
T1.DEL_FLAG = '0'
AND T1.CUSTOMER_ID = #{customerId}
AND T1.MONTH_ID = #{monthId}
AND ( T1.ACTION_CODE = 'vote_support' OR T1.ACTION_CODE = 'vote_opposition' )
GROUP BY
T1.OPERATION_USER_ID
) temp
WHERE
total >0
</select>
</mapper>

23
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginTopicLogDailyDao.xml

@ -143,4 +143,27 @@
AND CUSTOMER_ID = #{customerId}
AND MONTH_ID = #{monthId}
</select>
<!-- 查询出本月内,评论过话题的用户id -->
<select id="queryCommentTopicUserIds" parameterType="map" resultType="java.lang.String">
SELECT
userId
FROM
(
SELECT
t1.OPERATE_USER_ID AS userId,
COUNT( 1 ) AS total
FROM
fact_origin_topic_log_daily T1
WHERE
T1.DEL_FLAG = '0'
AND T1.CUSTOMER_ID = #{customerId}
AND T1.MONTH_ID = #{monthId}
AND t1.ACTION_CODE = 'comment'
GROUP BY
t1.OPERATE_USER_ID
) temp
WHERE
total >0
</select>
</mapper>

15
epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/ImportTaskController.java

@ -12,9 +12,7 @@ import com.epmet.dto.form.ImportTaskCommonFormDTO;
import com.epmet.dto.result.ImportTaskCommonResultDTO;
import com.epmet.service.ImportTaskService;
import org.springframework.beans.factory.annotation.Autowired;
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.*;
@RestController
@RequestMapping("import-task")
@ -70,4 +68,15 @@ public class ImportTaskController {
return new Result();
}
/**
* 检查是否有正在执行的任务
* @param bizType 业务类型非必填不传则任意一种导入正在执行都会返回true
* @return
*/
@GetMapping("processing-check")
public Result processingTaskCheck(@RequestParam(value = "biz_type", required = false) String bizType) {
Boolean r = importTaskService.processingTaskCheck(bizType);
return new Result().ok(r);
}
}

7
epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/ImportTaskService.java

@ -44,4 +44,11 @@ public interface ImportTaskService {
* @return
*/
PageData<ImportTaskCommonResultDTO> page(ImportTaskCommonFormDTO param);
/**
* 检查是否有正在执行的任务
* @param bizType
* @return
*/
Boolean processingTaskCheck(String bizType);
}

16
epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/ImportTaskServiceImpl.java

@ -14,6 +14,7 @@ import com.epmet.entity.ImportTaskEntity;
import com.epmet.service.ImportTaskService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -71,8 +72,8 @@ public class ImportTaskServiceImpl implements ImportTaskService {
public String createProcessTask(String operatorId, String bizType, String originFileName) {
if (existsProcessingTask(operatorId, bizType)) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),
"已存在执行中的导入任务,请等待执行完成。",
"已存在执行中的导入任务,请等待执行完成。");
"存在进行中的导入",
"存在进行中的导入");
}
ImportTaskEntity importRecord = new ImportTaskEntity();
@ -108,4 +109,15 @@ public class ImportTaskServiceImpl implements ImportTaskService {
});
return new PageData<>(list,page.getTotal());
}
@Override
public Boolean processingTaskCheck(String bizType) {
LambdaQueryWrapper<ImportTaskEntity> query = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(bizType)) {
query.eq(ImportTaskEntity::getBizType, bizType);
}
query.eq(ImportTaskEntity::getProcessStatus, ImportTaskConstants.PROCESS_STATUS_PROCESSING);
return importRecordDao.selectCount(query) > 0;
}
}

1
epmet-module/epmet-common-service/common-service-server/src/main/resources/db/migration/V0.0.13__ImportTaskCommentModify.sql

@ -0,0 +1 @@
alter table import_task modify column PROCESS_STATUS varchar(32) comment '处理状态。processing:处理中;finished_success:成功;finished_fail:未完全成功'

4
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/resi/ResiActDetailResultDTO.java

@ -186,6 +186,8 @@ public class ResiActDetailResultDTO implements Serializable {
*/
private String unitId;
private String unitName;
private List<String> unitIdList;
private List<String> unitNameList;
/**
* 活动目标
*/
@ -196,4 +198,6 @@ public class ResiActDetailResultDTO implements Serializable {
*/
private String serviceMatter;
private String serviceMatterName;
private List<String> serviceMatterList;
private List<String> serviceMatterNameList;
}

6
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/CommunitySelfOrgImportExcel.java

@ -27,9 +27,9 @@ import lombok.Data;
@Data
public class CommunitySelfOrgImportExcel {
@Excel(name = "组织名称", width = 40)
private String agencyName;
@Excel(name = "社会组织名称", width = 40)
/*@Excel(name = "组织名称", width = 40)
private String agencyName;*/
@Excel(name = "社会组织名称", width = 40)
private String societyName;
@Excel(name = "错误信息", width = 50)
private String errorInfo;

8
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/ImportCommunitySelfOrganization.java

@ -5,6 +5,7 @@ import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
import com.epmet.commons.tools.utils.ExcelVerifyInfo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.List;
@ -17,22 +18,27 @@ import java.util.List;
public class ImportCommunitySelfOrganization extends ExcelVerifyInfo {
@Excel(name = "组织名称", needMerge = true)
@NotBlank(message = "不能为空")
private String organizationName;
@Excel(name = "组织人数", needMerge = true)
//@NotNull(message = "不能为空")
private Integer organizationPersonCount;
@Excel(name = "服务事项", needMerge = true)
@NotBlank(message = "不能为空")
private String serviceItem;
@Excel(name = "负责人", needMerge = true)
@NotBlank(message = "不能为空")
private String principalName;
@Excel(name = "联系电话", needMerge = true)
@NotBlank(message = "不能为空")
private String principalPhone;
@Excel(name = "创建时间", needMerge = true)
private Date organizationCreatedTime;
private String organizationCreatedTime;
@ExcelCollection(name = "组织成员")
private List<ImportCommunitySelfOrganizationSon> persons;

39
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActInfoServiceImpl.java

@ -22,7 +22,6 @@ 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.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
@ -34,6 +33,7 @@ import com.epmet.dao.ActInfoDao;
import com.epmet.dao.ActUserRelationDao;
import com.epmet.dao.HeartUserInfoDao;
import com.epmet.dto.ActInfoDTO;
import com.epmet.dto.IcPartyActivityDTO;
import com.epmet.dto.IcPartyUnitDTO;
import com.epmet.dto.form.resi.*;
import com.epmet.dto.result.demand.OptionDTO;
@ -42,7 +42,6 @@ import com.epmet.entity.ActInfoEntity;
import com.epmet.entity.ActUserRelationEntity;
import com.epmet.service.*;
import com.epmet.utils.CaculateDistance;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -77,6 +76,12 @@ public class ActInfoServiceImpl extends BaseServiceImpl<ActInfoDao, ActInfoEntit
private IcPartyUnitService icPartyUnitService;
@Resource
private IcServiceItemDictService icServiceItemDictService;
@Resource
private IcPartyActivityService icPartyActivityService;
@Resource
private IcActivityServiceRelationService icActivityServiceRelationService;
@Resource
private IcActivityUnitRelationService icActivityUnitRelationService;
@Override
public PageData<ActInfoDTO> page(Map<String, Object> params) {
@ -255,16 +260,26 @@ public class ActInfoServiceImpl extends BaseServiceImpl<ActInfoDao, ActInfoEntit
String currentUserStatus = getCurrentUserStatus(formDto.getActId(), formDto.getUserId());
detailResultDTO.setCurrentUserStatus(currentUserStatus);
if (StringUtils.isNotBlank(detailResultDTO.getServiceMatter())) {
//获取服务事项
List<OptionDTO> serviceItemList=icServiceItemDictService.queryDictList(tokenDto.getCustomerId());
Map<String, String> categoryMap=serviceItemList.stream().collect(Collectors.toMap(OptionDTO::getValue, OptionDTO::getLabel));
detailResultDTO.setServiceMatterName(MapUtils.isNotEmpty(categoryMap) && categoryMap.containsKey(detailResultDTO.getServiceMatter()) ? categoryMap.get(detailResultDTO.getServiceMatter()) : StrConstant.EPMETY_STR);
}
if (StringUtils.isNotBlank(detailResultDTO.getUnitId())) {
//获取单位名称
IcPartyUnitDTO unitDTO = icPartyUnitService.get(detailResultDTO.getUnitId());
detailResultDTO.setUnitName(null != unitDTO ? unitDTO.getUnitName() : StrConstant.EPMETY_STR);
if (ActConstant.PARTY.equals(detailResultDTO.getActType())) {
IcPartyActivityDTO dto = icPartyActivityService.getActivityByActId(formDto.getActId());
if (null != dto) {
//获取服务事项
List<OptionDTO> serviceItemList = icServiceItemDictService.queryDictList(tokenDto.getCustomerId());
Map<String, String> categoryMap = serviceItemList.stream().collect(Collectors.toMap(OptionDTO::getValue, OptionDTO::getLabel));
List<String> services = icActivityServiceRelationService.getServiceList(dto.getId());
List<String> serviceNames = services.stream().map(categoryMap::get).collect(Collectors.toList());
detailResultDTO.setServiceMatterList(services);
detailResultDTO.setServiceMatterNameList(serviceNames);
//获取联建单位
IcPartyUnitDTO unitDTO = new IcPartyUnitDTO();
unitDTO.setAgencyId(dto.getAgencyId());
Map<String, String> option = icPartyUnitService.option(unitDTO).stream().collect(Collectors.toMap(OptionDTO::getValue, OptionDTO::getLabel));
List<String> unitIds = icActivityUnitRelationService.getUnitList(dto.getId());
List<String> unitNames = unitIds.stream().map(option::get).collect(Collectors.toList());
detailResultDTO.setUnitIdList(unitIds);
detailResultDTO.setUnitNameList(unitNames);
}
}
return new Result<ResiActDetailResultDTO>().ok(detailResultDTO);
}

51
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcCommunitySelfOrganizationServiceImpl.java

@ -67,6 +67,8 @@ import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
@ -433,7 +435,7 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
e.setOrgType(IcCommunitySelfOrganizationConstant.ORG_TYPE_AGENCY);
e.setPid(agencyInfo.getPid());
e.setPids(agencyInfo.getPids());
e.setOrganizationCreatedTime(l.getOrganizationCreatedTime());
// e.setOrganizationCreatedTime(l.getOrganizationCreatedTime());
baseDao.insert(e);
if (CollectionUtils.isNotEmpty(l.getPersons())){
l.getPersons().forEach(p -> {
@ -476,8 +478,9 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
@Override
//@Transactional(rollbackFor = Exception.class)
@Async
public void importCommunitySelfOrganization(TokenDto tokenDto, HttpServletResponse response, MultipartFile file, String taskId) throws IOException {
public void importCommunitySelfOrganization(TokenDto tokenDto, HttpServletResponse response, MultipartFile file, String taskId) {
try {
log.info("社会自组织导入,子线程开始执行");
List<CommunitySelfOrgImportExcel> fileList = new ArrayList<>();
CommunitySelfOrgImportExcel excel = null;
//1.读取Excel数据
@ -487,7 +490,7 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
//打印失败的行 和失败的信息
log.warn("第{}行,{}", entity.getRowNum(), entity.getErrorMsg());
excel = new CommunitySelfOrgImportExcel();
excel.setAgencyName(entity.getOrganizationName());
//excel.setAgencyName(entity.getOrganizationName());
excel.setSocietyName(entity.getOrganizationName());
excel.setErrorInfo(entity.getErrorMsg());
fileList.add(excel);
@ -522,10 +525,11 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
if (!m && !t){
errMsg.append("手机号码不合法;");
bl.set(true);
log.warn("手机号码不合法,自组织名称{}", obj.getOrganizationName());
}
if(bl.get()){
excel = new CommunitySelfOrgImportExcel();
excel.setAgencyName(obj.getOrganizationName());
//excel.setAgencyName(obj.getOrganizationName());
excel.setSocietyName(obj.getOrganizationName());
excel.setErrorInfo(errMsg.toString());
fileList.add(excel);
@ -540,17 +544,24 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
e.setOrgType(IcCommunitySelfOrganizationConstant.ORG_TYPE_AGENCY);
e.setPid(agencyInfo.getPid());
e.setPids(agencyInfo.getPids());
e.setOrganizationCreatedTime(l.getOrganizationCreatedTime());
baseDao.insert(e);
e.setOrganizationCreatedTime(DateUtils.parse(l.getOrganizationCreatedTime(), DATE_PATTERN));
List<IcCommunitySelfOrganizationPersonnelEntity> persons = new ArrayList<>();
AtomicReference<Boolean> bl = new AtomicReference<>(false);
StringBuffer msg = new StringBuffer("");
if (CollectionUtils.isNotEmpty(l.getPersons())){
l.getPersons().forEach(p -> {
boolean m = PhoneValidatorUtils.isMobile(p.getPersonPhone());
boolean t = PhoneValidatorUtils.isTel(p.getPersonPhone());
if (!m && !t){
throw new EpmetException(EpmetErrorCode.CHECK_PHONE_ERROR.getCode());
bl.set(true);
msg.append("自组织下成员手机号错误;");
log.warn("自组织下成员手机号错误,自组织名称{}", l.getOrganizationName());
return;
//throw new EpmetException(EpmetErrorCode.CHECK_PHONE_ERROR.getCode());
}
});
List<IcCommunitySelfOrganizationPersonnelEntity> persons = ConvertUtils.sourceToTarget(l.getPersons(), IcCommunitySelfOrganizationPersonnelEntity.class);
persons = ConvertUtils.sourceToTarget(l.getPersons(), IcCommunitySelfOrganizationPersonnelEntity.class);
Map<String, List<IcCommunitySelfOrganizationPersonnelEntity>> groupByPhone = persons.stream().collect(Collectors.groupingBy(IcCommunitySelfOrganizationPersonnelEntity::getPersonPhone));
List<String> phones = new ArrayList<>();
groupByPhone.forEach((k,v) -> {
@ -559,27 +570,43 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
}
});
if (CollectionUtils.isNotEmpty(phones)){
StringBuffer sb = new StringBuffer();
bl.set(true);
msg.append("自组织下成员手机号重复;");
log.warn("自组织下成员手机号重复,自组织名称{}", l.getOrganizationName());
/*StringBuffer sb = new StringBuffer();
phones.forEach(p -> {
sb.append(p).append(",");
});
String copywriter = sb.toString().substring(NumConstant.ZERO, sb.length() - NumConstant.ONE);
EpmetErrorCode.EXISTS_SAME_PHONE_ERROR.setMsg(String.format(EpmetErrorCode.EXISTS_SAME_PHONE_ERROR.getMsg(),copywriter));
throw new RenException(EpmetErrorCode.EXISTS_SAME_PHONE_ERROR.getCode());
throw new RenException(EpmetErrorCode.EXISTS_SAME_PHONE_ERROR.getCode());*/
}
}
if(bl.get()){
CommunitySelfOrgImportExcel ex = new CommunitySelfOrgImportExcel();
//ex.setAgencyName(l.getOrganizationName());
ex.setSocietyName(l.getOrganizationName());
ex.setErrorInfo(msg.toString());
fileList.add(ex);
return;
}
baseDao.insert(e);
if(CollectionUtils.isNotEmpty(persons)){
persons.forEach(p -> {
p.setCustomerId(tokenDto.getCustomerId());
p.setOrgId(e.getId());
});
personnelService.insertBatch(persons);
}
});
}
//4.错误数据生成文件,修改导入任务状态
String url = erroeImport(fileList);
upImportTask(url, taskId, tokenDto.getUserId(), true);
} catch (Exception e) {
log.error("【社会自组织信息导入】程序错误");
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【社会自组织信息导入】程序错误:{}", errorMsg);
upImportTask(null, taskId, tokenDto.getUserId(), false);
}
}
@ -643,7 +670,7 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
importTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS);
} else {
importTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
importTaskForm.setResultDesc("社会自组织导入存在错误");
importTaskForm.setResultDesc("社会自组织导入存在程序错误");
}
Result result = commonServiceOpenFeignClient.finishImportTask(importTaskForm);
if (!result.success()) {

40
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/db/migration/V0.0.12__insert_ic_party_relation.sql

@ -0,0 +1,40 @@
INSERT INTO ic_activity_unit_relation
SELECT
UUID() AS ID,
CUSTOMER_ID,
AGENCY_ID,
PIDS,
ID AS ACTIVITY_ID,
ACT_ID,
UNIT_ID,
1 AS SORT,
DEL_FLAG,
REVISION,
CREATED_BY,
NOW(),
UPDATED_BY,
NOW()
FROM
ic_party_activity
WHERE UNIT_ID IS NOT NULL AND UNIT_ID != '';
UPDATE ic_activity_unit_relation SET ID = REPLACE (ID, '-', '');
INSERT INTO ic_activity_service_relation
SELECT
UUID() AS ID,
CUSTOMER_ID,
AGENCY_ID,
PIDS,
ID AS ACTIVITY_ID,
ACT_ID,
SERVICE_MATTER,
1 AS SORT,
DEL_FLAG,
REVISION,
CREATED_BY,
NOW(),
UPDATED_BY,
NOW()
FROM
ic_party_activity
WHERE SERVICE_MATTER IS NOT NULL AND UNIT_ID != '';
UPDATE ic_activity_service_relation SET ID = REPLACE (ID, '-', '');

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

@ -102,6 +102,12 @@
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>data-aggregator-client</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

26
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/controller/DemoController.java

@ -8,12 +8,16 @@
package com.epmet.controller;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO;
import com.epmet.dataaggre.feign.DataAggregatorOpenFeignClient;
import com.epmet.feign.DataStatisticalOpenFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
* 定时任务
@ -27,6 +31,8 @@ public class DemoController {
@Autowired
private DataStatisticalOpenFeignClient client;
@Autowired
private DataAggregatorOpenFeignClient dataAggregatorFeignClient;
@GetMapping("testAlarm")
public void testAlarm() {
@ -35,4 +41,18 @@ public class DemoController {
//}
client.agencyGridIssueStats(null);
}
@PostMapping("exportGridLiveRes")
public Result exportGridLiveRes(@RequestParam("params") String params) {
if(StringUtils.isBlank(params)){
return new Result();
}
GridLivelyFormDTO formDTO = new GridLivelyFormDTO();
if (StringUtils.isNotBlank(params)) {
formDTO = JSON.parseObject(params, GridLivelyFormDTO.class);
}
ValidatorUtils.validateEntity(formDTO,GridLivelyFormDTO.Grid.class);
return dataAggregatorFeignClient.exportGridLiveRes(formDTO);
}
}

68
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/ExportGridLiveResTask.java

@ -0,0 +1,68 @@
package com.epmet.task;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO;
import com.epmet.dataaggre.feign.DataAggregatorOpenFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 每个星期一的凌晨5点执行查询网格活跃度统计导出excel上传oss, 发送钉钉@小雷哥
*/
@Slf4j
@Component("exportGridLiveResTask")
public class ExportGridLiveResTask implements ITask {
@Autowired
private DataAggregatorOpenFeignClient dataAggregatorFeignClient;
@Override
public void run(String params) {
if(StringUtils.isBlank(params)){
return;
}
GridLivelyFormDTO formDTO = new GridLivelyFormDTO();
if (StringUtils.isNotBlank(params)) {
formDTO = JSON.parseObject(params, GridLivelyFormDTO.class);
}
//默认获取当前日期的上一个自然周
if (StringUtils.isBlank(formDTO.getStartTime()) || StringUtils.isBlank(formDTO.getEndTime())) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
//上周日的日期
Date yesterday = calendar.getTime();
DateFormat format = new SimpleDateFormat("yyyyMMdd");
Calendar c = new GregorianCalendar();
//这里设置一周开始时间是星期一
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(yesterday);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
//获取当前自然周的起始时间
String beginTime = format.format(c.getTime());
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
//当前自然周的截止时间
String endTime = format.format(c.getTime());
formDTO.setStartTime(beginTime);
formDTO.setEndTime(endTime);
}
ValidatorUtils.validateEntity(formDTO,GridLivelyFormDTO.Grid.class);
Result result = dataAggregatorFeignClient.exportGridLiveRes(formDTO);
if(!result.success()){
log.error(String.format("exportGridLiveResTask网格活跃度统计导出失败,入参:%s",params));
}
}
}

30
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/NeighborHoodManageDelFormDTO.java

@ -0,0 +1,30 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* @Author zxc
* @DateTime 2022/3/1 4:35 下午
* @DESC
*/
@Data
public class NeighborHoodManageDelFormDTO implements Serializable {
private static final long serialVersionUID = 405799151478155056L;
public interface NeighborHoodManageDelForm{}
@NotNull(message = "ids不能为空" , groups = NeighborHoodManageDelForm.class)
private List<String> ids;
/**
* 小区neighborHood楼栋building房屋house
*/
@NotBlank(message = "type不能为空" , groups = NeighborHoodManageDelForm.class)
private String type;
}

22
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/NeighborHoodManageDelResultDTO.java

@ -0,0 +1,22 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/3/2 10:05 上午
* @DESC
*/
@Data
public class NeighborHoodManageDelResultDTO implements Serializable {
private static final long serialVersionUID = -4248802585738319974L;
private String neighborHoodId;
private String buildingId;
private String houseId;
private String name;
}

21
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/UpdateBuildingHouseNumResultDTO.java

@ -0,0 +1,21 @@
package com.epmet.dto.result;
import com.epmet.commons.tools.constant.NumConstant;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/3/3 5:24 下午
* @DESC
*/
@Data
public class UpdateBuildingHouseNumResultDTO implements Serializable {
private static final long serialVersionUID = 4350166505117596584L;
private String id;
private Integer num;
}

1
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/CustomerGridConstant.java

@ -19,4 +19,5 @@ public interface CustomerGridConstant {
String NEIGHBORHOOD = "neighborHood";
String BUILDING = "building";
String HOUSE = "house";
}

4
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java

@ -219,10 +219,10 @@ public class BuildingController {
ImportTaskCommonFormDTO importFormDTO = new ImportTaskCommonFormDTO();
importFormDTO.setBizType(ImportTaskConstants.BIZ_TYPE_BUILDING);
importFormDTO.setOperatorId(formDTO.getUserId());
importFormDTO.setOriginFileName(ImportErrorMsgConstants.BUILDING_ERROR_NAME);
importFormDTO.setOriginFileName(file.getOriginalFilename());
Result<ImportTaskCommonResultDTO> importTask = epmetCommonServiceOpenFeignClient.createImportTask(importFormDTO);
if (!importTask.success()){
throw new EpmetException("当前存在上传任务");
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"","存在进行中的导入");
}
buildingService.buildingImportExcel(formDTO,file,importTask);
return new Result();

17
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java

@ -269,13 +269,26 @@ public class HouseController implements ResultDataResolver {
ImportTaskCommonFormDTO importFormDTO = new ImportTaskCommonFormDTO();
importFormDTO.setBizType(ImportTaskConstants.BIZ_TYPE_HOUSE);
importFormDTO.setOperatorId(formDTO.getUserId());
importFormDTO.setOriginFileName(ImportErrorMsgConstants.HOUSE_ERROR_NAME);
importFormDTO.setOriginFileName(file.getOriginalFilename());
Result<ImportTaskCommonResultDTO> importTask = epmetCommonServiceOpenFeignClient.createImportTask(importFormDTO);
if (!importTask.success()){
throw new EpmetException("当前存在上传任务");
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"","存在进行中的导入");
}
houseService.dispose(file,formDTO,importTask);
return new Result<>();
}
/**
* Desc 小区管理中批量删除
* @param formDTO
* @author zxc
* @date 2022/3/1 4:57 下午
*/
@PostMapping("delete")
public Result allDelete(@RequestBody NeighborHoodManageDelFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO, NeighborHoodManageDelFormDTO.NeighborHoodManageDelForm.class);
houseService.allDelete(formDTO);
return new Result();
}
}

9
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java

@ -17,8 +17,10 @@
package com.epmet.controller;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.annotation.LoginUser;
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.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
@ -36,6 +38,7 @@ import com.epmet.dto.form.ImportTaskCommonFormDTO;
import com.epmet.dto.result.ImportTaskCommonResultDTO;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.service.IcNeighborHoodService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -53,6 +56,7 @@ import java.util.Map;
*/
@RestController
@RequestMapping("icneighborhood")
@Slf4j
public class IcNeighborHoodController {
@Autowired
@ -139,11 +143,12 @@ public class IcNeighborHoodController {
ImportTaskCommonFormDTO importFormDTO = new ImportTaskCommonFormDTO();
importFormDTO.setBizType(ImportTaskConstants.BIZ_TYPE_NEIGHBOR_HOOD);
importFormDTO.setOperatorId(formDTO.getUserId());
importFormDTO.setOriginFileName(ImportErrorMsgConstants.NEIGHBORHOOD_ERROR_NAME);
importFormDTO.setOriginFileName(file.getOriginalFilename());
Result<ImportTaskCommonResultDTO> importTask = epmetCommonServiceOpenFeignClient.createImportTask(importFormDTO);
if (!importTask.success()){
throw new EpmetException("当前存在上传任务");
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"","存在进行中的导入");
}
log.info("插入任务结果"+ JSON.toJSONString(importTask.getData()));
icNeighborHoodService.neighborhoodImport(formDTO,file,importTask);
return new Result();
}

25
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java

@ -22,6 +22,7 @@ import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.ImportGeneralDTO;
import com.epmet.dto.result.BaseInfoFamilyBuildingResultDTO;
import com.epmet.dto.result.BuildingResultDTO;
import com.epmet.dto.result.UpdateBuildingHouseNumResultDTO;
import com.epmet.entity.CustomerAgencyEntity;
import com.epmet.entity.IcBuildingEntity;
import com.epmet.entity.IcHouseEntity;
@ -162,4 +163,28 @@ public interface IcBuildingDao extends BaseDao<IcBuildingEntity> {
*/
List<String> selectExistHouse(@Param("ids")List<String> ids);
/**
* Desc: 查询客户下户数为空的
* @param customerId
* @author zxc
* @date 2022/3/3 5:20 下午
*/
List<String> selectHouseTotalIsNull(@Param("customerId")String customerId);
/**
* Desc: 查询楼栋下的户数
* @param ids
* @author zxc
* @date 2022/3/3 5:26 下午
*/
List<UpdateBuildingHouseNumResultDTO> selectHouseNum(@Param("ids")List<String> ids);
/**
* Desc: 批量更新楼栋户数
* @param nums
* @author zxc
* @date 2022/3/3 5:31 下午
*/
void allUpdateHouseNum(@Param("nums") List<UpdateBuildingHouseNumResultDTO> nums);
}

26
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java

@ -20,6 +20,7 @@ package com.epmet.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.result.HouseInfoDTO;
import com.epmet.dto.result.NeighborHoodManageDelResultDTO;
import com.epmet.entity.IcHouseEntity;
import com.epmet.excel.IcHouseExcel;
import org.apache.ibatis.annotations.Mapper;
@ -74,4 +75,29 @@ public interface IcHouseDao extends BaseDao<IcHouseEntity> {
@Param("buildingUnitId")String buildingUnitId,
@Param("doorName")String doorName,
@Param("houseId")String houseId);
/**
* Desc: 根据小区IDs查询小区下是否有存在楼栋的
* @param ids
* @author zxc
* @date 2022/3/2 9:51 上午
*/
List<NeighborHoodManageDelResultDTO> selectExistBuildingByNeighborHoodIds(@Param("ids")List<String> ids);
/**
* Desc: 根据楼栋IDs查询楼栋下是否有存在房屋的
* @param ids
* @author zxc
* @date 2022/3/2 9:53 上午
*/
List<NeighborHoodManageDelResultDTO> selectExistHouseByBuildingIds(@Param("ids")List<String> ids);
/**
* Desc: 根据房屋ID查询名字
* @param ids
* @author zxc
* @date 2022/3/2 11:00 上午
*/
List<String> selectHouseNames(@Param("ids")List<String> ids);
}

51
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java

@ -80,6 +80,36 @@ public class ImportBuildingInfoListener extends AnalysisEventListener<BuildingIn
ImportGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportGeneralDTO.class);
dto.setNum(num);
dto.setCustomerId(formDTO.getCustomerId());
if(StringUtils.isBlank(data.getAgencyName())){
nums.add(num);
disposeErrorMsg(info, "所属组织的值未填写");
return;
}
if(StringUtils.isBlank(data.getGridName())){
nums.add(num);
disposeErrorMsg(info, "所属网格的值未填写");
return;
}
if(StringUtils.isBlank(data.getNeighborHoodName())){
nums.add(num);
disposeErrorMsg(info,"小区名称的值未填写");
return;
}
if(StringUtils.isBlank(data.getBuildingName())){
nums.add(num);
disposeErrorMsg(info,"楼栋名称的值未填写");
return;
}
if(StringUtils.isBlank(data.getType())){
nums.add(num);
disposeErrorMsg(info,"楼栋类型的值未填写");
return;
}
if(null == data.getTotalUnitNum()){
nums.add(num);
disposeErrorMsg(info,"单元数的值未填写");
return;
}
// 应产品要求添加
if (StringUtils.isNotBlank(dto.getType()) && (!dto.getType().equals("商品房") && !dto.getType().equals("自建房")) && !dto.getType().equals("别墅")){
nums.add(num);
@ -193,7 +223,9 @@ public class ImportBuildingInfoListener extends AnalysisEventListener<BuildingIn
}else {
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(neighborHoodGeneralDTO.getGridId());
if (null == gridInfo){
throw new EpmetException("查询网格失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.BUILDING_ERROR);
return;
}
// 1.排除网格名不一样但小区名一样 2.排除组织不一样,网格一样,小区一样
if ((!gridInfo.getGridName().equals(dto.getGridName()) && neighborHoodGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName())) ||
@ -207,7 +239,9 @@ public class ImportBuildingInfoListener extends AnalysisEventListener<BuildingIn
dto.setAgencyId(neighborHoodGeneralDTO.getAgencyId());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.BUILDING_ERROR);
return;
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
@ -226,7 +260,9 @@ public class ImportBuildingInfoListener extends AnalysisEventListener<BuildingIn
gridName = null == gridName ? icBuildingDao.selectGridNameById(formDTO.getOrgId()) : gridName;
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
if (null == gridInfo){
throw new EpmetException("查询网格失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.BUILDING_ERROR);
return;
}
//排除不是本网格的 gridName不一样排除,gridName一样但是agencyName不一样也得排除
if (dto.getGridName().compareTo(gridName) != 0 || (!dto.getAgencyName().equals(gridInfo.getAgencyName()) && dto.getGridName().equals(gridName))){
@ -238,7 +274,9 @@ public class ImportBuildingInfoListener extends AnalysisEventListener<BuildingIn
dto.setAgencyId(gridInfo.getPid());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.BUILDING_ERROR);
return;
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
@ -279,7 +317,9 @@ public class ImportBuildingInfoListener extends AnalysisEventListener<BuildingIn
dto.setAgencyId(formDTO.getOrgId());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.BUILDING_ERROR);
return;
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
@ -357,6 +397,7 @@ public class ImportBuildingInfoListener extends AnalysisEventListener<BuildingIn
String s = neighborHoodService.orgGeneralImport(errorInfos, BuildingErrorInfoModel.class);
input.setResultDescFilePath(s);
} catch (IOException e) {
epmetCommonServiceOpenFeignClient.finishImportTask(input);
e.printStackTrace();
}
}

98
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java

@ -16,6 +16,7 @@ import com.epmet.dto.ImportGeneralDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.form.ImportTaskCommonFormDTO;
import com.epmet.dto.result.ImportResultDTO;
import com.epmet.dto.result.UpdateBuildingHouseNumResultDTO;
import com.epmet.entity.IcHouseEntity;
import com.epmet.enums.HousePurposeEnums;
import com.epmet.enums.HouseRentFlagEnums;
@ -89,6 +90,66 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
ImportGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportGeneralDTO.class);
dto.setNum(num);
dto.setCustomerId(formDTO.getCustomerId());
if(StringUtils.isBlank(data.getAgencyName())){
nums.add(num);
disposeErrorMsg(info, "所属组织的值未填写");
return;
}
if(StringUtils.isBlank(data.getGridName())){
nums.add(num);
disposeErrorMsg(info, "所属网格的值未填写");
return;
}
if(StringUtils.isBlank(data.getNeighborHoodName())){
nums.add(num);
disposeErrorMsg(info,"所属小区的值未填写");
return;
}
if(StringUtils.isBlank(data.getBuildingName())){
nums.add(num);
disposeErrorMsg(info,"所属楼栋的值未填写");
return;
}
if(StringUtils.isBlank(data.getHouseType())){
nums.add(num);
disposeErrorMsg(info, "房屋类型的值未填写");
return;
}
if(StringUtils.isBlank(data.getPurpose())){
nums.add(num);
disposeErrorMsg(info, "房屋用途的值未填写");
return;
}
if(StringUtils.isBlank(data.getRentFlagString())){
nums.add(num);
disposeErrorMsg(info, "是否出租的值未填写");
return;
}
if(StringUtils.isBlank(data.getOwnerIdCard())){
nums.add(num);
disposeErrorMsg(info, "房主身份证的值未填写");
return;
}
if(StringUtils.isBlank(data.getOwnerName())){
nums.add(num);
disposeErrorMsg(info, "房主姓名的值未填写");
return;
}
if(StringUtils.isBlank(data.getOwnerPhone())){
nums.add(num);
disposeErrorMsg(info, "房主电话的值未填写");
return;
}
if(StringUtils.isBlank(data.getDoorName())){
nums.add(num);
disposeErrorMsg(info, "门牌号的值未填写");
return;
}
if(null == data.getBuildingUnit()){
nums.add(num);
disposeErrorMsg(info, "单元号的值未填写");
return;
}
// 应产品要求
if (StringUtils.isNotBlank(dto.getHouseType()) ){
if( !"楼房".equals(dto.getHouseType()) && !dto.getHouseType().equals("平房") && !dto.getHouseType().equals("别墅") ){
@ -209,7 +270,9 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
}else {
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(buildingGeneralDTO.getGridId());
if (null == gridInfo){
throw new EpmetException("查询网格失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.HOUSE_ERROR);
return;
}
// 排除 1、小区名不一样&&楼栋名一样 2、网格名不一样&&小区名一样&&楼名一样 3、组织名不一样&&网格名一样&&小区名一样&&楼名一样
if ((!buildingGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName()) && buildingGeneralDTO.getBuildingName().equals(dto.getBuildingName()))
@ -225,7 +288,9 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
dto.setAgencyId(buildingGeneralDTO.getAgencyId());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.HOUSE_ERROR);
return;
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
@ -261,7 +326,9 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
}else {
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(neighborHoodGeneralDTO.getGridId());
if (null == gridInfo){
throw new EpmetException("查询网格失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.HOUSE_ERROR);
return;
}
// 1.排除网格名不一样但小区名一样 2.排除组织不一样,网格一样,小区一样
if ((!gridInfo.getGridName().equals(dto.getGridName()) && neighborHoodGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName())) ||
@ -275,7 +342,9 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
dto.setAgencyId(neighborHoodGeneralDTO.getAgencyId());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.HOUSE_ERROR);
return;
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
@ -294,7 +363,9 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
gridName = null == gridName ? icBuildingDao.selectGridNameById(formDTO.getOrgId()) : gridName;
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
if (null == gridInfo){
throw new EpmetException("查询网格失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.HOUSE_ERROR);
return;
}
//排除不是本网格的 gridName不一样排除,gridName一样但是agencyName不一样也得排除
if (dto.getGridName().compareTo(gridName) != 0 || (!dto.getAgencyName().equals(gridInfo.getAgencyName()) && dto.getGridName().equals(gridName))){
@ -306,7 +377,9 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
dto.setAgencyId(gridInfo.getPid());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.HOUSE_ERROR);
return;
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
@ -347,7 +420,9 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
dto.setAgencyId(formDTO.getOrgId());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
nums.add(num);
disposeErrorMsg(info, ImportErrorMsgConstants.HOUSE_ERROR);
return;
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
@ -450,6 +525,14 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
finalDispose();
// 更新ic_building户数
List<String> list = icBuildingDao.selectHouseTotalIsNull(formDTO.getCustomerId());
if (!CollectionUtils.isEmpty(list)){
List<UpdateBuildingHouseNumResultDTO> houseNum = icBuildingDao.selectHouseNum(list);
if (!CollectionUtils.isEmpty(houseNum)){
icBuildingDao.allUpdateHouseNum(houseNum);
}
}
// 删除缓存
icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId());
@ -472,6 +555,7 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
String s = neighborHoodService.orgGeneralImport(errorInfos, HouseErrorInfoModel.class);
input.setResultDescFilePath(s);
} catch (IOException e) {
epmetCommonServiceOpenFeignClient.finishImportTask(input);
e.printStackTrace();
}
}

97
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java

@ -2,8 +2,8 @@ package com.epmet.model;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
@ -23,10 +23,10 @@ import com.epmet.entity.IcPropertyManagementEntity;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.IcNeighborHoodService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -38,6 +38,7 @@ import java.util.stream.Collectors;
* @DateTime 2022/2/15 2:16 下午
* @DESC
*/
@Slf4j
public class ImportNeighborHoodInfoListener extends AnalysisEventListener<NeighborHoodInfoModel> {
List<Integer> nums = new ArrayList<>();
@ -83,6 +84,33 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
}
info = data;
num = num + NumConstant.ONE;
log.info("读数据"+num);
if (StringUtils.isBlank(data.getNeighborHoodName()) ||
StringUtils.isBlank(data.getGridName()) || StringUtils.isBlank(data.getAgencyName()) || StringUtils.isBlank(data.getAddress())){
nums.add(num);
disposeErrorMsg(info,ImportErrorMsgConstants.NEIGHBOR_HOOD_ERROR);
return;
}
if(StringUtils.isBlank(data.getAgencyName())){
nums.add(num);
disposeErrorMsg(info, "所属组织的值未填写");
return;
}
if(StringUtils.isBlank(data.getGridName())){
nums.add(num);
disposeErrorMsg(info, "所属网格的值未填写");
return;
}
if(StringUtils.isBlank(data.getNeighborHoodName())){
nums.add(num);
disposeErrorMsg(info,"小区名称的值未填写");
return;
}
if(StringUtils.isBlank(data.getNeighborHoodName())){
nums.add(num);
disposeErrorMsg(info,"详细地址的值未填写");
return;
}
ImportGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportGeneralDTO.class);
dto.setNum(num);
dto.setCustomerId(formDTO.getCustomerId());
@ -95,6 +123,7 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
if (num%NumConstant.ONE_HUNDRED == NumConstant.ZERO){
finalDispose();
}
log.info("读数据"+num+"完毕");
}
public void finalDispose(){
@ -181,7 +210,9 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
gridName = null == gridName ? icBuildingDao.selectGridNameById(formDTO.getOrgId()) : gridName;
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
if (null == gridInfo){
throw new EpmetException("查询网格失败...");
nums.add(num);
disposeErrorMsg(info,ImportErrorMsgConstants.NEIGHBOR_HOOD_ERROR);
return;
}
//排除不是本网格的 gridName不一样排除,gridName一样但是agencyName不一样也得排除
if (dto.getGridName().compareTo(gridName) != 0 || (!dto.getAgencyName().equals(gridInfo.getAgencyName()) && dto.getGridName().equals(gridName))){
@ -193,7 +224,9 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
dto.setAgencyId(gridInfo.getPid());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
nums.add(num);
disposeErrorMsg(info,ImportErrorMsgConstants.NEIGHBOR_HOOD_ERROR);
return;
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
@ -233,7 +266,9 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
dto.setAgencyId(formDTO.getOrgId());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
nums.add(num);
disposeErrorMsg(info,ImportErrorMsgConstants.NEIGHBOR_HOOD_ERROR);
return;
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
@ -295,32 +330,44 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
finalDispose();
// 删除缓存
icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheHouses(formDTO.getCustomerId(), formDTO.getUserId());
// 放结果
icHouseRedis.setImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId(), new ImportResultDTO(nums,num));
ImportTaskCommonFormDTO input = new ImportTaskCommonFormDTO();
input.setOperatorId(formDTO.getUserId());
input.setTaskId(taskId);
if (CollectionUtils.isEmpty(nums)){
input.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS);
epmetCommonServiceOpenFeignClient.finishImportTask(input);
}else {
input.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
if (!CollectionUtils.isEmpty(errorInfos)){
try {
String s = neighborHoodService.orgGeneralImport(errorInfos, NeighborHoodErrorInfoModel.class);
input.setResultDescFilePath(s);
} catch (IOException e) {
e.printStackTrace();
input.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
try {
finalDispose();
// 删除缓存
icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheHouses(formDTO.getCustomerId(), formDTO.getUserId());
// 放结果
icHouseRedis.setImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId(), new ImportResultDTO(nums,num));
log.info("数据处理完毕,开始更新任务状态");
if (CollectionUtils.isEmpty(nums)){
input.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS);
epmetCommonServiceOpenFeignClient.finishImportTask(input);
}else {
if (!CollectionUtils.isEmpty(errorInfos)){
try {
String s = neighborHoodService.orgGeneralImport(errorInfos, NeighborHoodErrorInfoModel.class);
if (s == null){
log.warn("doAfterAllAnalysed orgGeneralImport fail,return null,taskId:{}", taskId);
}
input.setResultDescFilePath(s);
} catch (Exception e) {
log.error("doAfterAllAnalysed orgGeneralImport exception", e);
}
}
log.info("任务状态更新完毕");
}
} catch (Exception e) {
log.error("doAfterAllAnalysed exception", e);
} finally {
epmetCommonServiceOpenFeignClient.finishImportTask(input);
}
log.info("任务DTO"+JSON.toJSONString(input));
}
}

9
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java

@ -21,6 +21,7 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.IcHouseFormDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.form.ListIcNeighborHoodFormDTO;
import com.epmet.dto.form.NeighborHoodManageDelFormDTO;
import com.epmet.dto.result.HouseInfoDTO;
import com.epmet.dto.result.IcNeighborHoodResultDTO;
import com.epmet.dto.result.ImportTaskCommonResultDTO;
@ -67,5 +68,13 @@ public interface HouseService {
List<HouseInfoDTO> queryListHouseInfo(Set<String> houseIds, String customerId);
/**
* Desc 小区管理中批量删除
* @param formDTO
* @author zxc
* @date 2022/3/1 4:57 下午
*/
void allDelete(NeighborHoodManageDelFormDTO formDTO);
Result dispose(MultipartFile file, ImportInfoFormDTO formDTO, Result<ImportTaskCommonResultDTO> importTask);
}

87
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java

@ -18,6 +18,8 @@ import com.epmet.commons.tools.feign.ResultDataResolver;
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.constant.CustomerGridConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constants.ImportTaskConstants;
import com.epmet.dao.IcBuildingDao;
import com.epmet.dao.IcBuildingUnitDao;
@ -31,15 +33,18 @@ import com.epmet.dto.form.IcHouseFormDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.form.ImportTaskCommonFormDTO;
import com.epmet.dto.form.ListIcNeighborHoodFormDTO;
import com.epmet.dto.form.NeighborHoodManageDelFormDTO;
import com.epmet.dto.result.HouseInfoDTO;
import com.epmet.dto.result.IcNeighborHoodResultDTO;
import com.epmet.dto.result.ImportTaskCommonResultDTO;
import com.epmet.dto.result.NeighborHoodManageDelResultDTO;
import com.epmet.entity.IcHouseEntity;
import com.epmet.enums.HousePurposeEnums;
import com.epmet.enums.HouseRentFlagEnums;
import com.epmet.enums.HouseTypeEnums;
import com.epmet.excel.IcHouseExcel;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.model.HouseInfoModel;
import com.epmet.model.ImportHouseInfoListener;
@ -99,6 +104,8 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
@Autowired
private EpmetCommonServiceOpenFeignClient epmetCommonServiceOpenFeignClient;
@Autowired
private EpmetUserOpenFeignClient epmetUserOpenFeignClient;
@Override
@ -382,4 +389,84 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
}
return new Result();
}
/**
* Desc 小区管理中批量删除
* @param formDTO
* @author zxc
* @date 2022/3/1 4:57 下午
*/
@Override
public void allDelete(NeighborHoodManageDelFormDTO formDTO) {
if (CollectionUtils.isEmpty(formDTO.getIds())){
return;
}
List<String> ids = formDTO.getIds();
if (formDTO.getType().equals(CustomerGridConstant.NEIGHBORHOOD)){
List<NeighborHoodManageDelResultDTO> exists = icHouseDao.selectExistBuildingByNeighborHoodIds(ids);
if (!CollectionUtils.isEmpty(exists)){
exists.forEach(e -> {
for (int i = NumConstant.ZERO; i < ids.size(); i++) {
if (ids.get(i).equals(e.getNeighborHoodId())){
ids.remove(i);
continue;
}
}
});
}
if (!CollectionUtils.isEmpty(ids)){
icNeighborHoodDao.deleteBatchIds(ids);
}
if (!CollectionUtils.isEmpty(exists)){
String collect = exists.stream().map(m -> m.getName()).collect(Collectors.joining(","));
EpmetErrorCode.NEIGHBORHOOD_DEL_FAILED.setMsg(String.format("%s内包含楼宇信息,暂无法删除",collect));
throw new EpmetException(EpmetErrorCode.NEIGHBORHOOD_DEL_FAILED.getCode());
}
}else if (formDTO.getType().equals(CustomerGridConstant.BUILDING)){
List<NeighborHoodManageDelResultDTO> exists = icHouseDao.selectExistHouseByBuildingIds(ids);
if (!CollectionUtils.isEmpty(exists)){
exists.forEach(e -> {
for (int i = NumConstant.ZERO; i < ids.size(); i++) {
if (ids.get(i).equals(e.getBuildingId())){
ids.remove(i);
continue;
}
}
});
}
if (!CollectionUtils.isEmpty(ids)){
icBuildingDao.deleteBatchIds(ids);
}
if (!CollectionUtils.isEmpty(exists)){
String collect = exists.stream().map(m -> m.getName()).collect(Collectors.joining(","));
EpmetErrorCode.NEIGHBORHOOD_DEL_FAILED.setMsg(String.format("%s内包含房屋信息,暂无法删除",collect));
throw new EpmetException(EpmetErrorCode.NEIGHBORHOOD_DEL_FAILED.getCode());
}
}else if (formDTO.getType().equals(CustomerGridConstant.HOUSE)){
Result<List<String>> existUsers = epmetUserOpenFeignClient.getExistUserByHouseIds(ids);
if (!existUsers.success()){
throw new EpmetException("根据房屋IDs查询房屋下是否有存在居民失败...");
}
List<String> exists = existUsers.getData();
if (!CollectionUtils.isEmpty(exists)){
exists.forEach(e -> {
for (int i = NumConstant.ZERO; i < ids.size(); i++) {
if (ids.get(i).equals(e)){
ids.remove(i);
continue;
}
}
});
}
if (!CollectionUtils.isEmpty(ids)){
icHouseDao.deleteBatchIds(ids);
}
if (!CollectionUtils.isEmpty(exists)){
List<String> list = icHouseDao.selectHouseNames(exists);
String collect = list.stream().collect(Collectors.joining(","));
EpmetErrorCode.NEIGHBORHOOD_DEL_FAILED.setMsg(String.format("%s内包含居民信息,暂无法删除",collect));
throw new EpmetException(EpmetErrorCode.NEIGHBORHOOD_DEL_FAILED.getCode());
}
}
}
}

38
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml

@ -25,6 +25,23 @@
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<!-- 批量更新楼栋户数 -->
<update id="allUpdateHouseNum">
UPDATE ic_building
set
TOTAL_HOUSE_NUM = CASE
<foreach collection="nums" item="n">
when id = #{n.id} then #{n.num}
</foreach> end,
UPDATED_TIME = NOW()
WHERE DEL_FLAG = '0'
AND id in(
<foreach collection="nums" item="n" separator=",">
#{n.id}
</foreach>
)
</update>
<!--<select id="searchBuildingByPage" resultType="map">
select
a.ID as buildingId,
@ -329,4 +346,25 @@
)
</select>
<!-- 查询客户下户数为空的 -->
<select id="selectHouseTotalIsNull" resultType="java.lang.String">
SELECT ID FROM ic_building WHERE DEL_FLAG = '0' AND CUSTOMER_ID = #{customerId} AND TOTAL_HOUSE_NUM IS NULL
</select>
<!-- 查询楼栋下的户数 -->
<select id="selectHouseNum" resultType="com.epmet.dto.result.UpdateBuildingHouseNumResultDTO">
SELECT
BUILDING_ID AS id,
COUNT( ID ) AS num
FROM ic_house
WHERE DEL_FLAG = '0'
AND BUILDING_ID IN (
<foreach collection="ids" item="id" separator=",">
#{id}
</foreach>
)
GROUP BY
BUILDING_ID
</select>
</mapper>

43
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml

@ -329,4 +329,47 @@
ih.DEL_FLAG = '0'
AND ih.ID = #{houseId}
</select>
<!-- 根据小区IDs查询小区下是否有存在楼栋的 -->
<select id="selectExistBuildingByNeighborHoodIds" resultType="com.epmet.dto.result.NeighborHoodManageDelResultDTO">
SELECT
nh.ID AS neighborHoodId,
nh.NEIGHBOR_HOOD_NAME AS name
FROM ic_neighbor_hood nh
INNER JOIN ic_building b ON (nh.id = b.NEIGHBOR_HOOD_ID AND b.DEL_FLAG = '0')
WHERE nh.DEL_FLAG = '0'
AND nh.ID IN (
<foreach collection="ids" item="id" separator=",">
#{id}
</foreach>
)
GROUP BY nh.id
</select>
<!-- 根据楼栋IDs查询楼栋下是否有存在房屋的 -->
<select id="selectExistHouseByBuildingIds" resultType="com.epmet.dto.result.NeighborHoodManageDelResultDTO">
SELECT
b.ID AS buildingId,
b.BUILDING_NAME AS name
FROM ic_building b
INNER JOIN ic_house h ON (h.BUILDING_ID = b.ID AND h.DEL_FLAG = '0')
WHERE b.DEL_FLAG = '0'
AND b.ID IN (
<foreach collection="ids" item="id" separator=",">
#{id}
</foreach>
)
GROUP BY b.id
</select>
<!-- 根据房屋ID查询名字 -->
<select id="selectHouseNames" resultType="java.lang.String">
SELECT HOUSE_NAME FROM ic_house
WHERE DEL_FLAG = '0'
AND id IN (
<foreach collection="ids" item="id" separator=",">
#{id}
</foreach>
)
</select>
</mapper>

3
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java

@ -19,6 +19,7 @@ package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.annotation.RequirePermission;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.enums.RequirePermissionEnum;
import com.epmet.commons.tools.scan.result.SyncScanResult;
import com.epmet.commons.tools.security.dto.TokenDto;
@ -218,6 +219,7 @@ public class ArticleController {
* @param formDTO
* @throws Exception
*/
@NoRepeatSubmit
@PostMapping("publish")
@RequirePermission(requirePermission = RequirePermissionEnum.WORK_PARTY_VOICE_PUBLISH)
public Result<Boolean> publishArticle(@LoginUser TokenDto tokenDto, @RequestBody PublishArticleFormDTO formDTO) throws Exception {
@ -234,6 +236,7 @@ public class ArticleController {
* @param formDTO
* @throws Exception
*/
@NoRepeatSubmit
@PostMapping("manualpublish")
@RequirePermission(requirePermission = RequirePermissionEnum.WORK_PARTY_VOICE_PUBLISH)
public Result<Boolean> manualPublish(@LoginUser TokenDto tokenDto, @RequestBody PublishArticleFormDTO formDTO) throws Exception {

81
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleServiceImpl.java

@ -259,8 +259,9 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
@Override
//@Transactional(rollbackFor = Exception.class)
@Async
public void importData(TokenDto tokenDto, HttpServletResponse response, MultipartFile file, String taskId) throws IOException {
public void importData(TokenDto tokenDto, HttpServletResponse response, MultipartFile file, String taskId) {
try {
log.info("党员风采导入,子线程开始执行");
List<PartyMemberImportExcel> fileList = new ArrayList<>();
PartyMemberImportExcel excel = null;
ExcelImportResult<IcPartymemberStyleImportExcel> importResult = ExcelPoiUtils.importExcelMore(file, 0, 1, IcPartymemberStyleImportExcel.class);
@ -326,48 +327,50 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
iterator.remove();
}
}
if (CollectionUtils.isEmpty(result)) {
/*Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "第" + subList + "行未成功!");*/
erroeImport(fileList);
return;
}
List<IcPartymemberStyleImageEntity> imageList = new ArrayList<>();
List<IcPartymemberStyleEntity> list = result.stream().map(item -> {
IcPartymemberStyleEntity entity = new IcPartymemberStyleEntity();
entity.setId(UUID.randomUUID().toString().replace("-", ""));
entity.setCustomerId(tokenDto.getCustomerId());
entity.setAgencyId(staffInfoCache.getAgencyId());
entity.setGridId(gridMap.get(item.getGridName()));
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(entity.getGridId());
if (null != gridInfo) {
entity.setGridPids(gridInfo.getPids());
}
entity.setName(item.getName());
entity.setMainDeed(item.getMainDeed());
IcPartymemberStyleCategoryDictEntity dictEntity=categoryDictMap.get(item.getCategoryName());
entity.setCategoryId(null == dictEntity ? StrConstant.EPMETY_STR : dictEntity.getId());
entity.setCategoryCode(null == dictEntity ? StrConstant.EPMETY_STR : dictEntity.getCategoryCode());
AtomicInteger i = new AtomicInteger();
return entity;
}).collect(Collectors.toList());
/*if (CollectionUtils.isEmpty(result)) {
Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "第" + subList + "行未成功!");
}*/
if (!CollectionUtils.isEmpty(result)) {
List<IcPartymemberStyleImageEntity> imageList = new ArrayList<>();
List<IcPartymemberStyleEntity> list = result.stream().map(item -> {
IcPartymemberStyleEntity entity = new IcPartymemberStyleEntity();
entity.setId(UUID.randomUUID().toString().replace("-", ""));
entity.setCustomerId(tokenDto.getCustomerId());
entity.setAgencyId(staffInfoCache.getAgencyId());
entity.setGridId(gridMap.get(item.getGridName()));
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(entity.getGridId());
if (null != gridInfo) {
entity.setGridPids(gridInfo.getPids());
}
entity.setName(item.getName());
entity.setMainDeed(item.getMainDeed());
IcPartymemberStyleCategoryDictEntity dictEntity=categoryDictMap.get(item.getCategoryName());
entity.setCategoryId(null == dictEntity ? StrConstant.EPMETY_STR : dictEntity.getId());
entity.setCategoryCode(null == dictEntity ? StrConstant.EPMETY_STR : dictEntity.getCategoryCode());
AtomicInteger i = new AtomicInteger();
return entity;
}).collect(Collectors.toList());
insertBatch(list);
icPartymemberStyleImageService.insertBatch(imageList);
insertBatch(list);
icPartymemberStyleImageService.insertBatch(imageList);
/*String str = String.format("共%s条,成功导入%s条。", numList.size() + result.size(), numList.size() + result.size() - numList.size());
if (numList.size() > NumConstant.ZERO) {
Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str + "第" + subList + "行未成功!");
}
return new Result().ok(str);*/
/*String str = String.format("共%s条,成功导入%s条。", numList.size() + result.size(), numList.size() + result.size() - numList.size());
if (numList.size() > NumConstant.ZERO) {
Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str + "第" + subList + "行未成功!");
}
return new Result().ok(str);*/
}
//生成导入失败数据对应的文件,修改任务状态
String url = erroeImport(fileList);
upImportTask(url, taskId, tokenDto.getUserId(), true);
} catch (Exception e) {
log.error("【党员风采信息导入】程序错误");
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【党员风采信息导入】程序错误:{}", errorMsg);
upImportTask(null, taskId, tokenDto.getUserId(), false);
}
}
@ -432,7 +435,7 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
importTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS);
} else {
importTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
importTaskForm.setResultDesc("党员风采导入存在错误");
importTaskForm.setResultDesc("党员风采导入存在程序错误");
}
Result result = commonServiceOpenFeignClient.finishImportTask(importTaskForm);
if (!result.success()) {

8
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DelIcResiUserFormDTO.java

@ -4,7 +4,9 @@ import com.epmet.commons.tools.enums.IcFormCodeEnum;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* @Description 删除居民
@ -18,10 +20,14 @@ public class DelIcResiUserFormDTO implements Serializable {
public interface IdGroup {
}
@NotBlank(message = "icResiUserId不能为空", groups = IdGroup.class)
private String icResiUserId;
@NotNull(message = "userIds不能为空", groups = IdGroup.class)
private List<String> userIds;
@NotBlank(message = "token获取的customerId不能为空", groups = IdGroup.class)
private String customerId;
private String formCode= IcFormCodeEnum.RESI_BASE_INFO.getCode();
}

11
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java

@ -649,7 +649,7 @@ public interface EpmetUserOpenFeignClient {
@GetMapping(value = "/epmetuser/user/queryUserClient/{userId}")
Result<UserDTO> queryUserClient(@PathVariable("userId") String userId);
@PostMapping("/epmetuser/icresidemanddict/demandoption/demandoption")
@PostMapping("/epmetuser/icresidemanddict/demandoption")
Result<List<OptionResultDTO>> getDemandOptions();
@PostMapping("/epmetuser/icresiuser/categorycount")
@ -711,4 +711,13 @@ public interface EpmetUserOpenFeignClient {
@PostMapping("/epmetuser/statsresiwarn/list2")
Result<List<IcStatsResiResultDTO>> getPersonCategoryList(@RequestBody StatsResiListFormDTO formDTO);
/**
* Desc: 根据房屋IDs查询房屋下是否有存在居民的
* @param ids
* @author zxc
* @date 2022/3/2 10:32 上午
*/
@PostMapping("/epmetuser/icresiuser/getexistuserbyhouseids")
Result<List<String>> getExistUserByHouseIds(@RequestBody List<String> ids);
}

5
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java

@ -527,4 +527,9 @@ public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClien
public Result<List<IcStatsResiResultDTO>> getPersonCategoryList(StatsResiListFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getPersonCategoryList", formDTO);
}
@Override
public Result<List<String>> getExistUserByHouseIds(List<String> ids) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getExistUserByHouseIds", ids);
}
}

107
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java

@ -71,6 +71,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
@ -183,15 +184,19 @@ public class IcResiUserController implements ResultDataResolver {
public Result delete(@LoginUser TokenDto tokenDto, @RequestBody DelIcResiUserFormDTO formDTO) {
formDTO.setCustomerId(tokenDto.getCustomerId());
ValidatorUtils.validateEntity(formDTO, DelIcResiUserFormDTO.IdGroup.class);
icResiUserService.delete(formDTO);
//推送MQ事件
IcResiUserAddMQMsg mqMsg = new IcResiUserAddMQMsg();
mqMsg.setCustomerId(tokenDto.getCustomerId());
mqMsg.setIcResiUser(formDTO.getIcResiUserId());
SystemMsgFormDTO form = new SystemMsgFormDTO();
form.setMessageType(SystemMessageType.IC_RESI_USER_DEL);
form.setContent(mqMsg);
epmetMessageOpenFeignClient.sendSystemMsgByMQ(form);
formDTO.getUserIds().forEach(userId -> {
formDTO.setIcResiUserId(userId);
icResiUserService.delete(formDTO);
//推送MQ事件
IcResiUserAddMQMsg mqMsg = new IcResiUserAddMQMsg();
mqMsg.setCustomerId(tokenDto.getCustomerId());
mqMsg.setIcResiUser(userId);
SystemMsgFormDTO form = new SystemMsgFormDTO();
form.setMessageType(SystemMessageType.IC_RESI_USER_DEL);
form.setContent(mqMsg);
epmetMessageOpenFeignClient.sendSystemMsgByMQ(form);
});
return new Result();
}
@ -439,7 +444,7 @@ public class IcResiUserController implements ResultDataResolver {
}
String originalFilename = file.getOriginalFilename();
// 校验文件类型
// 一.校验文件类型
String extension = FilenameUtils.getExtension(originalFilename);
if (!"xls".equals(extension) && !"xlsx".equals(extension)) {
throw new RenException("文件类型不匹配");
@ -447,9 +452,9 @@ public class IcResiUserController implements ResultDataResolver {
String operatorId = loginUserUtil.getLoginUserId();
String importTaskId = icResiUserImportService.createImportTaskRecord(operatorId, ImportTaskConstants.BIZ_TYPE_RESI, originalFilename);;
String importTaskId = icResiUserImportService.createImportTaskRecord(operatorId, ImportTaskConstants.BIZ_TYPE_RESI, originalFilename);
// 缓存上传的文件
// 二.缓存上传的文件
Path importTempFileSavePath;
try {
String fileName = UUID.randomUUID().toString().concat(".").concat(extension);
@ -460,22 +465,46 @@ public class IcResiUserController implements ResultDataResolver {
throw new RenException("上传失败");
}
final Path importTempFileSavePathFinal = importTempFileSavePath;
HttpServletRequest request = ((StandardMultipartHttpServletRequest)multipartRequest).getRequest();
HashMap<String, String> headers = getHeadersFromRequest(request);
// 异步执行导入
// 三.异步执行导入
CompletableFuture.runAsync(() -> {
try {
// 睡眠2秒钟,等待主线程先结束,主线程会清空request对象的headers,等他执行了清空之后,我们这边再手动setHeader进去
Thread.sleep(1000l);
Thread.sleep(2000l);
System.out.println("请求头:" + headers);
} catch (InterruptedException e) {
e.printStackTrace();
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【上传居民信息】失败,睡眠2s发生中断:{}", errorMsg);
return;
}
try {
setHeaders2Request(request, headers);
List<FormItemResult> formItemList = icResiUserService.listFormItems(customerId,IcFormCodeEnum.RESI_BASE_INFO.getCode());
icResiUserImportService.importIcResiInfoFromExcel(importTaskId, formItemList, importTempFileSavePath.toString(), response, IC_RESI_UPLOAD_DIR);
} catch (Throwable e) {
String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e);
log.error("【导入居民信息失败】导入失败:{}", errorMsg);
// 要将导入任务状态设置为结束但不成功。不报错即成功,没有返回值
icResiUserImportService.finishImportTask(importTaskId, operatorId, ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL, "系统异常,请查看系统日志", null);
} finally {
try {
if (importTempFileSavePath != null){
Files.delete(importTempFileSavePath);
}
} catch (IOException e) {
log.error("【导入居民信息失败】清理上传的文件失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
// 清理request对象
RequestContextHolder.resetRequestAttributes();
}
setHeaders2Request(request, headers);
submitResiImportTask(customerId, operatorId, importTaskId, importTempFileSavePathFinal, response);
});
return new Result();
@ -524,35 +553,6 @@ public class IcResiUserController implements ResultDataResolver {
}
}
/**
* 提交居民导入任务
* @param customerId
* @param operatorId
* @param importTaskId
* @param response
*/
private void submitResiImportTask(String customerId, String operatorId, String importTaskId, Path importTempFileSavePath, HttpServletResponse response) {
try {
List<FormItemResult> formItemList = icResiUserService.listFormItems(customerId,IcFormCodeEnum.RESI_BASE_INFO.getCode());
icResiUserImportService.importIcResiInfoFromExcel(importTaskId, formItemList, importTempFileSavePath.toString(), response, IC_RESI_UPLOAD_DIR);
} catch (Throwable e) {
String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e);
log.error("【导入居民信息失败】导入失败:{}", errorMsg);
// 要将导入任务状态设置为结束但不成功。不报错即成功,没有返回值
icResiUserImportService.finishImportTask(importTaskId, operatorId, ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL, "系统异常,请查看系统日志", null);
} finally {
try {
if (importTempFileSavePath != null){
Files.delete(importTempFileSavePath);
}
} catch (IOException e) {
log.error("【导入居民信息失败】清理上传的文件失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
}
}
@PostMapping("test")
public Result<List<Map<String, Object>>> test(@LoginUser TokenDto tokenDto, @RequestBody DynamicQueryFormDTO formDTO) {
formDTO.setCustomerId("45687aa479955f9d06204d415238f7cc");
@ -784,4 +784,15 @@ public class IcResiUserController implements ResultDataResolver {
ValidatorUtils.validateEntity(formDTO, PersonWarnRightListFormDTO.PersonWarnRightListForm.class);
return new Result<PersonWarnRightListResultDTO>().ok(icResiUserService.personWarnRightList(formDTO,tokenDto));
}
/**
* Desc: 根据房屋IDs查询房屋下是否有存在居民的
* @param ids
* @author zxc
* @date 2022/3/2 10:32 上午
*/
@PostMapping("getexistuserbyhouseids")
public Result<List<String>> getExistUserByHouseIds(@RequestBody List<String> ids){
return new Result<List<String>>().ok(icResiUserService.getExistUserByHouseIds(ids));
}
}

11
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java

@ -239,7 +239,7 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
Map<String, String> getCategoryListMap(@Param("columns")List<String> columns, @Param("icUserId") String icUserId);
Map<String, String> selectResiInfoMap(@Param("idCard") String idCard);
Map<String, String> selectResiInfoMap(@Param("idCard") String idCard, @Param("resiId") String resiId);
List<Map<String,Object>> selectResiUsers(@Param("types")List<String> types,@Param("orgId")String orgId);
@ -262,4 +262,13 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
Map<String, BigDecimal> getDataAnalyseCount(@Param("customerId") String customerId, @Param("tableName") String tableName,
@Param("columnList") List<String> columnList, @Param("id") String id, @Param("level") String level);
List<Map<String, String>> getIcUserList(@Param("customerId") String customerId, @Param("columns")List<String> columns);
/**
* Desc: 根据房屋IDs查询房屋下是否有存在居民的
* @param ids
* @author zxc
* @date 2022/3/2 10:32 上午
*/
List<String> getExistUserByHouseIds(@Param("ids") List<String> ids);
}

62
epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java

@ -1,6 +1,9 @@
package com.epmet.enums;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
/**
* @Description 描述
@ -13,21 +16,40 @@ public enum IcResiUserTableEnum {
/**
* 注释
*/
IC_RESI_USER("ic_resi_user","社区居民基本信息录入表", 0, 3, null),
IC_PARTY_MEMBER("ic_party_member","党员信息录入表", 1, 2, "IS_PARTY"),
IC_ENSURE_HOUSE("ic_ensure_house","保障房人员信息录入表", 2, 2, "IS_ENSURE_HOUSE"),
IC_UNEMPLOYED("ic_unemployed","失业人员信息录入表", 3, 2, "IS_UNEMPLOYED"),
IC_VETERANS("ic_veterans","退役军人信息录入表", 4, 2, "IS_VETERANS"),
IC_UNITED_FRONT("ic_united_front","统战人员信息录入表", 5, 2, "IS_UNITED_FRONT"),
IC_VOLUNTEER("ic_volunteer","志愿者信息录入表", 6, 3, "IS_VOLUNTEER"),
IC_OLD_PEOPLE("ic_old_people","老年人信息录入表", 7, 2, "IS_OLD_PEOPLE"),
IC_SPECIAL("ic_special","特殊人群信息录入表", 8, 3, "IS_SPECIAL");
IC_RESI_USER("ic_resi_user","社区居民基本信息录入表", 0, 3, null, true),
IC_PARTY_MEMBER("ic_party_member","党员信息录入表", 1, 2, "IS_PARTY", true),
IC_ENSURE_HOUSE("ic_ensure_house","保障房人员信息录入表", 2, 2, "IS_ENSURE_HOUSE", true),
IC_UNEMPLOYED("ic_unemployed","失业人员信息录入表", 3, 2, "IS_UNEMPLOYED", true),
IC_VETERANS("ic_veterans","退役军人信息录入表", 4, 2, "IS_VETERANS", true),
IC_UNITED_FRONT("ic_united_front","统战人员信息录入表", 5, 2, "IS_UNITED_FRONT", true),
IC_VOLUNTEER("ic_volunteer","志愿者信息录入表", 6, 3, "IS_VOLUNTEER", true),
IC_OLD_PEOPLE("ic_old_people","老年人信息录入表", 7, 2, "IS_OLD_PEOPLE", true),
IC_SPECIAL("ic_special","特殊人群信息录入表", 8, 3, "IS_SPECIAL", true),
// 下面的是:没有实际数据库表,在ic_resi_user中有一个标记,但是导入的时候是有单独的sheet的
IC_DBH("ic_resi_user","低保人员信息录入表", null, 2, "IS_DBH", false),
IC_YLFN("ic_resi_user","育龄妇女信息录入表", null, 2, "IS_YLFN", false),
IC_XFRY("ic_resi_user","信访人员信息录入表", null, 2, "IS_XFRY", false),
IC_KC("ic_resi_user","空巢老人信息录入表", null, 2, "IS_KC", false),
IC_SD("ic_resi_user","失独人员信息录入表", null, 2, "IS_SD", false),
IC_SN("ic_resi_user","失能人员信息录入表", null, 2, "IS_SN", false),
IC_SZ("ic_resi_user","失智人员信息录入表", null, 2, "IS_SZ", false),
IC_CJ("ic_resi_user","残疾人员信息录入表", null, 2, "IS_CJ", false),
IC_DB("ic_resi_user","大病人员信息录入表", null, 2, "IS_DB", false),
IC_MB("ic_resi_user","慢病人员信息录入表", null, 2, "IS_MB", false);
private String tableName;
/**
* 表描述 && sheet名称
*/
private String tableComment;
private int sheetNo;
private Integer sheetNo;
private int headRowNo;
private String mainTableFlagColumnName;
/**
* 该sheet是否有数据库表
*/
private boolean existsDBTable;
/**
* 根据表名获取枚举对象
@ -63,34 +85,18 @@ public enum IcResiUserTableEnum {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTableComment() {
return tableComment;
}
public void setTableComment(String tableComment) {
this.tableComment = tableComment;
}
public int getSheetNo() {
return sheetNo;
}
public void setSheetNo(int sheetNo) {
this.sheetNo = sheetNo;
}
public int getHeadRowNo() {
return headRowNo;
}
public void setHeadRowNo(int headRowNo) {
this.headRowNo = headRowNo;
}
public String getMainTableFlagColumnName() {
return mainTableFlagColumnName;
}
@ -98,4 +104,8 @@ public enum IcResiUserTableEnum {
public void setMainTableFlagColumnName(String mainTableFlagColumnName) {
this.mainTableFlagColumnName = mainTableFlagColumnName;
}
public boolean isExistsDBTable() {
return existsDBTable;
}
}

44
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiVirtualSheetImportListener.java

@ -0,0 +1,44 @@
package com.epmet.excel.handler;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.epmet.enums.IcResiUserTableEnum;
import com.epmet.service.impl.IcResiUserImportServiceImpl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class IcResiVirtualSheetImportListener extends AnalysisEventListener<Map<String, String>> {
private IcResiUserImportServiceImpl importService;
private IcResiUserTableEnum sheetEnumObject;
/**
* 身份证号列表
*/
private List<Map<String, String>> resiInfo = new ArrayList<>();
public IcResiVirtualSheetImportListener(IcResiUserImportServiceImpl importService, IcResiUserTableEnum sheetEnumObject) {
this.importService = importService;
this.sheetEnumObject = sheetEnumObject;
}
@Override
public void invoke(Map<String, String> data, AnalysisContext context) {
if (data != null && data.size() > 0) {
resiInfo.add(data);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
try {
importService.persistIcResiVirtualSheetExtraInfo(resiInfo, sheetEnumObject);
} finally {
// 清空数据
resiInfo.clear();
}
}
}

7
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java

@ -209,4 +209,11 @@ public interface IcResiUserService extends BaseService<IcResiUserEntity> {
*/
PersonWarnRightListResultDTO personWarnRightList(PersonWarnRightListFormDTO formDTO, TokenDto tokenDto);
/**
* Desc: 根据房屋IDs查询房屋下是否有存在居民的
* @param ids
* @author zxc
* @date 2022/3/2 10:32 上午
*/
List<String> getExistUserByHouseIds(List<String> ids);
}

468
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java

@ -12,6 +12,7 @@ import com.epmet.bean.ResiImportResiCategoryChangedCache;
import com.epmet.bean.ResiImportChangedData;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.constant.ThreadLocalConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.dto.result.OptionResultDTO;
import com.epmet.commons.tools.exception.EpmetErrorCode;
@ -39,6 +40,7 @@ import com.epmet.entity.IcUserChangeRecordEntity;
import com.epmet.entity.IcUserTransferRecordEntity;
import com.epmet.enums.IcResiUserTableEnum;
import com.epmet.excel.handler.IcResiImportDynamicExcelListener;
import com.epmet.excel.handler.IcResiVirtualSheetImportListener;
import com.epmet.feign.*;
import com.epmet.service.*;
import com.google.common.cache.Cache;
@ -73,6 +75,11 @@ import java.util.stream.Collectors;
@Service
public class IcResiUserImportServiceImpl implements IcResiUserImportService, ResultDataResolver {
/**
* 身份证号列序号
*/
public static final Integer ID_CARD_COLUMN_NO = 9;
// 错误和跳过excel行暂存
public static final ThreadLocal<Map<String, List<ErrorRow>>> errorRows = new ThreadLocal<>();
@ -200,24 +207,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
private String errorInfo;
}
@Data
public static class SkipedRow {
@Excel(name = "工作表")
private String sheetName;
private String tableName;
@Excel(name = "身份证号")
private String idCard;
@Excel(name = "姓名")
private String name;
@Excel(name = "信息")
private String info;
}
/**
* 导入居民信息
* @param importTaskId 导入任务id
@ -245,8 +234,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
CustomerAgencyDTO agencyInfo = getResultDataOrThrowsException(govOrgOpenFeignClient.getAgencyById(currUserAgencyId), ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null, null);
String customerId = agencyInfo.getCustomerId();
boolean hasErrorRows = false;
try {
initImportThreadLocal(customerId);
@ -256,12 +243,13 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
// 上传附表信息
for (IcResiUserTableEnum sheet : IcResiUserTableEnum.values()) {
// 是主表
if (sheet == IcResiUserTableEnum.IC_RESI_USER) {
continue;
}
try {
importIcResiExtraInfoFromExcel(formItemList, excelPathName, sheet.getSheetNo(), sheet.getHeadRowNo(), currUserAgencyId, loginUserId, sheet.getTableName(), customerId);
importIcResiExtraInfoFromExcel(formItemList, excelPathName, sheet, currUserAgencyId, loginUserId, customerId);
} catch (Exception e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("导入IC居民附加信息【{}】错误:{}", sheet.getTableComment(), errorMsg);
@ -339,12 +327,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String operatorId = loginUserUtil.getLoginUserId();
String importTag = operatorId + System.currentTimeMillis();
// 跳过的,不导入的行
Map<String, List<SkipedRow>> skipedRowsMap = new LinkedHashMap<>();
for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) {
skipedRowsMap.put(e.getTableName(), new LinkedList<>());
}
// 错误信息
Map<String, List<ErrorRow>> errorRowsMap = new LinkedHashMap<>();
for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) {
@ -392,19 +374,35 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
*
* @param formItemList
* @param excelPathName
* @param sheetNo
* @param headRowNumber
* @param sheetEnumObject sheet枚举对象
* @param currUserAgencyId
* @param currentUserId
* @param targetTableName 要插入哪一个表
* @return
*/
private void importIcResiExtraInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currentUserId,
String targetTableName, String customerId) {
IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(this, customerId, currentUserId, currUserAgencyId, null,
false, targetTableName, formItemList, headRowNumber);
EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead();
private void importIcResiExtraInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, IcResiUserTableEnum sheetEnumObject, String currUserAgencyId,
String currentUserId, String customerId) {
// 如果该sheet对应有实际的数据库表,使用items动态的解析
if (sheetEnumObject.isExistsDBTable()) {
IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(
this, customerId, currentUserId, currUserAgencyId, null,
false, sheetEnumObject.getTableName(), formItemList, sheetEnumObject.getHeadRowNo());
EasyExcelFactory.read(new File(excelPathName))
.registerReadListener(readListener)
.headRowNumber(sheetEnumObject.getHeadRowNo())
.sheet(sheetEnumObject.getTableComment())
.doRead();
} else {
// 实际上并不存在该sheet对应的数据库表,此时无法使用items解析,就要读取固定的ID_CARD字段数据,更新主表字段为true
IcResiVirtualSheetImportListener vitualSheetReadListener = new IcResiVirtualSheetImportListener(this, sheetEnumObject);
EasyExcelFactory.read(new File(excelPathName))
.registerReadListener(vitualSheetReadListener)
.headRowNumber(sheetEnumObject.getHeadRowNo())
.sheet(sheetEnumObject.getTableComment())
.doRead();
}
}
/**
@ -427,7 +425,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String idCard = columnAndValues.get("ID_CARD");
Map<String, String> existingResiMap = icResiUserDao.selectResiInfoMap(idCard);
Map<String, String> existingResiMap = icResiUserDao.selectResiInfoMap(idCard, null);
if (existingResiMap == null) {
// 新导入的居民,因为还没有读取子sheet,所以这些居民类别没有办法获取,先默认设置成0,后面读取子sheet的时候再更新
@ -439,6 +437,16 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
columnAndValues.put("IS_UNITED_FRONT", "0");
columnAndValues.put("IS_VETERANS", "0");
columnAndValues.put("IS_VOLUNTEER", "0");
columnAndValues.put("IS_DBH", "0");
columnAndValues.put("IS_YLFN", "0");
columnAndValues.put("IS_XFRY", "0");
columnAndValues.put("IS_KC", "0");
columnAndValues.put("IS_SD", "0");
columnAndValues.put("IS_SN", "0");
columnAndValues.put("IS_SZ", "0");
columnAndValues.put("IS_CJ", "0");
columnAndValues.put("IS_DB", "0");
columnAndValues.put("IS_MB", "0");
} else {
// 该居民已存在,要做更新操作,因为还没有读取子sheet,所以这些居民最新类别没有办法获取,先设置上旧的数据
columnAndValues.put("IS_ENSURE_HOUSE", existingResiMap.get("IS_ENSURE_HOUSE"));
@ -449,6 +457,16 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
columnAndValues.put("IS_UNITED_FRONT", existingResiMap.get("IS_UNITED_FRONT"));
columnAndValues.put("IS_VETERANS", existingResiMap.get("IS_VETERANS"));
columnAndValues.put("IS_VOLUNTEER", existingResiMap.get("IS_VOLUNTEER"));
columnAndValues.put("IS_DBH", existingResiMap.get("IS_DBH"));
columnAndValues.put("IS_YLFN", existingResiMap.get("IS_YLFN"));
columnAndValues.put("IS_XFRY", existingResiMap.get("IS_XFRY"));
columnAndValues.put("IS_KC", existingResiMap.get("IS_KC"));
columnAndValues.put("IS_SD", existingResiMap.get("IS_SD"));
columnAndValues.put("IS_SN", existingResiMap.get("IS_SN"));
columnAndValues.put("IS_SZ", existingResiMap.get("IS_SZ"));
columnAndValues.put("IS_CJ", existingResiMap.get("IS_CJ"));
columnAndValues.put("IS_DB", existingResiMap.get("IS_DB"));
columnAndValues.put("IS_MB", existingResiMap.get("IS_MB"));
}
columnAndValues.put("AGENCY_ID", currUserAgencyId);
@ -465,12 +483,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
ResiImportChangedData transferData;
if ((transferData = this.getResiImportTrasferData(existingResiMap, columnAndValues)) != null) {
newlyOrChangedResi.get().getTransferedResis().put(existingResiMap.get("ID"), transferData);
} else {
// 组织维度没有发生变化,看是否有居民类型变更
ResiImportChangedData d = getResiImportCategoryChangedData(existingResiMap, columnAndValues);
if (d != null) {
newlyOrChangedResi.get().getCategoryChangedResis().put(existingResiMap.get("ID"), d);
}
}
} else {
// 新增居民
@ -478,22 +490,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
columnAndValues.put("CREATED_BY", currentUserId);
columnAndValues.put("ID", resiId);
icResiUserDao.add(tableName, columnAndValues);
// 过滤出本居民含有哪些类别
Map<String, String> resiCategories = resiCategoryColumnNameAndLabel.get().keySet()
.stream()
.filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName)))
.collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k)));
// newlyOrChangedResi.get().getNewResis().put(resiId,
// new ResiImportCategoryData(columnAndValues.get("AGENCY_ID"),
// columnAndValues.get("GRID_ID"),
// columnAndValues.get("VILLAGE_ID"),
// columnAndValues.get("BUILD_ID"),
// columnAndValues.get("UNIT_ID"),
// columnAndValues.get("HOME_ID"),
// resiCategories));
icResiUserDao.add(tableName, columnAndValues);
ResiImportCategoryData categoryData = new ResiImportCategoryData(resiId,
columnAndValues.get("AGENCY_ID"),
@ -502,7 +500,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
columnAndValues.get("BUILD_ID"),
columnAndValues.get("UNIT_ID"),
columnAndValues.get("HOME_ID"),
resiCategories);
new HashMap<>());
redisUtils.hMSet(RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", resiId), BeanUtil.beanToMap(categoryData));
categoryData = null;
@ -560,13 +558,13 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
// 检查用户是否存在
Map<String, String> resiInfoMap = icResiUserDao.selectResiInfoMap(idCard);
Map<String, String> existResiInfoMap = icResiUserDao.selectResiInfoMap(idCard, null);
if (resiInfoMap == null || resiInfoMap.size() == 0) {
if (existResiInfoMap == null || existResiInfoMap.size() == 0) {
throw new RenException(EpmetErrorCode.RESI_NOT_FOUND.getCode(), String.format("身份证号为【%s】的居民信息未找到,请确认该居民信息存在", idCard));
}
String icResiId = resiInfoMap.get("ID");
String icResiId = existResiInfoMap.get("ID");
columnAndValues.put("IC_RESI_USER", icResiId);
columnAndValues.put("CUSTOMER_ID", loginUserUtil.getLoginUserCustomerId());
@ -594,7 +592,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
// 保存到类别变更缓存中
saveSubTableInfoToCategoryChangedResiCache(icResiId,
Objects.requireNonNull(IcResiUserTableEnum.getObjectByTableName(targetTableName)).getMainTableFlagColumnName(),
resiInfoMap);
existResiInfoMap);
} catch (Exception e) {
String errorMsg;
@ -617,6 +615,45 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
}
/**
* 虚拟(不对应实际的数据库表)sheet的数据导入持久化
* @param sheetEnumObject
*/
public void persistIcResiVirtualSheetExtraInfo(List<Map<String, String>> resiInfo, IcResiUserTableEnum sheetEnumObject) {
for (Map<String, String> columnAndValues : resiInfo) {
String idCard = columnAndValues.get(ID_CARD_COLUMN_NO);
try {
Map<String, String> resiInfoMap = icResiUserDao.selectResiInfoMap(idCard, null);
if (resiInfoMap == null || resiInfoMap.size() == 0) {
throw new RenException(EpmetErrorCode.RESI_NOT_FOUND.getCode(), String.format("身份证号为【%s】的居民信息未找到,请确认该居民信息存在", idCard));
}
String icResiId = resiInfoMap.get("ID");
// 更新主表中该居民类型字段为true
updateMainTableResiTypeFlag(sheetEnumObject, icResiId);
// 保存类别变更信息
saveSubTableInfoToCategoryChangedResiCache(icResiId, sheetEnumObject.getMainTableFlagColumnName(), resiInfoMap);
} catch (Exception e) {
String errorMsg;
if (e instanceof RenException || e instanceof EpmetException) {
errorMsg = e.getMessage();
} else {
errorMsg = "未知系统错误";
log.error(ExceptionUtils.getErrorStackTrace(e));
}
ErrorRow errorRow = new ErrorRow();
errorRow.setName(columnAndValues.get("NAME"));
errorRow.setIdCard(idCard);
errorRow.setErrorInfo(errorMsg);
errorRow.setTableName(sheetEnumObject.getTableName());
errorRows.get().get(sheetEnumObject.getTableName()).add(errorRow);
}
}
}
/**
* 去掉多余的列
* @param originColumnAndValues
@ -1060,7 +1097,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
private void updateMainTableResiTypeFlag(IcResiUserTableEnum icResiUserTableEnum, String resiUserId) {
HashMap<String, Boolean> map = new HashMap<>();
map.put(icResiUserTableEnum.getMainTableFlagColumnName(), true);
icResiUserDao.upTable("ic_resi_user", resiUserId, map);
icResiUserDao.upTable(IcResiUserTableEnum.IC_RESI_USER.getTableName(), resiUserId, map);
}
/**
@ -1127,93 +1164,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
return null;
}
HashMap<String, String> existingResiCategories = new HashMap<>();
HashMap<String, String> newResiCategories = new HashMap<>();
for (String categoryColumnName : resiCategoryColumnNameAndLabel.get().keySet()) {
String oldCategoryValue = existingResiMap.get(categoryColumnName);
String newCategoryValue = newResiMap.get(categoryColumnName);
if (StringUtils.isBlank(oldCategoryValue)) oldCategoryValue = "0";
if (StringUtils.isBlank(newCategoryValue)) newCategoryValue = "0";
if ("1".equals(oldCategoryValue) || "1".equals(newCategoryValue)) {
// 新旧值有一个为1,则放入
existingResiCategories.put(categoryColumnName, oldCategoryValue);
newResiCategories.put(categoryColumnName, newCategoryValue);
}
// if ("1".equals(oldCategoryValue)) {
// existingResiCategories.put(categoryColumnName, oldCategoryValue);
// }
//
// if ("1".equals(newCategoryValue)) {
// newResiCategories.put(categoryColumnName, newCategoryValue);
// }
}
ResiImportCategoryData oldOne = new ResiImportCategoryData(
existingResiMap.get("ID"),
existingResiMap.get("AGENCY_ID"),
existingResiMap.get("GRID_ID"),
existingResiMap.get("VILLAGE_ID"),
existingResiMap.get("BUILD_ID"),
existingResiMap.get("UNIT_ID"),
existingResiMap.get("HOME_ID"),
existingResiCategories);
ResiImportCategoryData newOne = new ResiImportCategoryData(
newResiMap.get("ID"),
newResiMap.get("AGENCY_ID"),
newResiMap.get("GRID_ID"),
newResiMap.get("VILLAGE_ID"),
newResiMap.get("BUILD_ID"),
newResiMap.get("UNIT_ID"),
newResiMap.get("HOME_ID"),
newResiCategories);
return new ResiImportChangedData(oldOne, newOne);
}
/**
* 类别变更的居民信息封装只要发生变化0或者1都要保存
* 1.
* @param existingResiMap
* @param newResiMap
* @return
*/
private ResiImportChangedData getResiImportCategoryChangedData(Map<String, String> existingResiMap, Map<String, String> newResiMap) {
// 发生变化的类别列明
HashMap<String, String> oldCategories = new HashMap<>();
HashMap<String, String> newCategories = new HashMap<>();
Set<String> categoryColumnNames = resiCategoryColumnNameAndLabel.get().keySet();
for (String categoryColumnName : categoryColumnNames) {
String existingColumnValue = existingResiMap.get(categoryColumnName);
String newColumnValue = newResiMap.get(categoryColumnName);
// 先转为0再对比
if (StringUtils.isBlank(existingColumnValue)) existingColumnValue = "0";
if (StringUtils.isBlank(newColumnValue)) newColumnValue = "0";
if (!existingColumnValue.equals(newColumnValue)) {
oldCategories.put(categoryColumnName, existingColumnValue);
newCategories.put(categoryColumnName, newColumnValue);
}
// if (StringUtils.isAllBlank(existingColumnValue, newColumnValue)) {
// // 都为空,则没发生变化
// continue;
// } else {
//
// }
}
if (oldCategories.size() == 0) {
return null;
}
ResiImportCategoryData oldOne = new ResiImportCategoryData(
existingResiMap.get("ID"),
existingResiMap.get("AGENCY_ID"),
@ -1222,7 +1172,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
existingResiMap.get("BUILD_ID"),
existingResiMap.get("UNIT_ID"),
existingResiMap.get("HOME_ID"),
oldCategories);
new HashMap<>());
ResiImportCategoryData newOne = new ResiImportCategoryData(
newResiMap.get("ID"),
@ -1232,7 +1182,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
newResiMap.get("BUILD_ID"),
newResiMap.get("UNIT_ID"),
newResiMap.get("HOME_ID"),
newCategories);
new HashMap<>());
return new ResiImportChangedData(oldOne, newOne);
}
@ -1241,20 +1191,19 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
*
* @param icResiId 居民id
* @param columnName 该项信息在主表的列名
* @param existResiInfoMap 已存在的居民信息map
*/
private void saveSubTableInfoToCategoryChangedResiCache(String icResiId, String columnName, Map<String, String> resiInfoMap) {
private void saveSubTableInfoToCategoryChangedResiCache(String icResiId, String columnName, Map<String, String> existResiInfoMap) {
ResiImportResiCategoryChangedCache cc = newlyOrChangedResi.get();
// Map<String, ResiImportCategoryData> newResis = cc.getNewResis();
Map<String, ResiImportChangedData> categoryChangedResis = cc.getCategoryChangedResis();
Map<String, ResiImportChangedData> transferedResis = cc.getTransferedResis();
// ResiImportCategoryData newResi = newResis.get(icResiId);
// 为新增居民
String userCateRedisKey = RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", icResiId);
Map < String, Object > addUserMap = redisUtils.hGetAll(userCateRedisKey);
Map<String, Object> addUserMap = redisUtils.hGetAll(userCateRedisKey);
if (addUserMap != null && addUserMap.size() > 0) {
//说明是新增居民
ResiImportCategoryData newResiCateData = ConvertUtils.mapToEntity(addUserMap, ResiImportCategoryData.class);
newResiCateData.getCategories().put(columnName, "1");
redisUtils.hMSet(userCateRedisKey, BeanUtil.beanToMap(newResiCateData));
@ -1262,47 +1211,53 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
return;
}
ResiImportChangedData categoryChangedData = categoryChangedResis.get(icResiId);
if (categoryChangedData != null) {
// 说明是类别变更的居民
Map<String, String> oldCategories = categoryChangedData.getOldData().getCategories();
Map<String, String> newCategories = categoryChangedData.getNewData().getCategories();
if ("0".equals(resiInfoMap.get(columnName))) {
oldCategories.put(columnName, "0");
newCategories.put(columnName, "1");
}
return;
}
String oldValue = existResiInfoMap.get(columnName);
// 为发生调动的居民。不管标志相同与否都往里面put
ResiImportChangedData transferedData = transferedResis.get(icResiId);
if (transferedData != null) {
// 说明是发生调动的居民,新数据值为1
Map<String, String> newCategories = transferedData.getNewData().getCategories();
Map<String, String> oldCategories = transferedData.getOldData().getCategories();
String oldValue = resiInfoMap.get(columnName);
if (StringUtils.isBlank(oldValue)) {
oldValue = "0";
}
oldCategories.put(columnName, oldValue);
oldCategories.put(columnName, oldValue);
newCategories.put(columnName, "1");
return;
}
if ("0".equals(resiInfoMap.get(columnName))) {
// 非新增,非调动,变更的数据不在主sheet中,而在附sheet中。看是否发生人员类型变更(从0->1)
ResiImportCategoryData oldOne = new ResiImportCategoryData();
ResiImportCategoryData newOne = new ResiImportCategoryData();
// 类别变更的居民。不管标志相同与否都往里面put
ResiImportChangedData categoryChangedData = categoryChangedResis.get(icResiId);
if (categoryChangedData != null) {
Map<String, String> oldCategories = categoryChangedData.getOldData().getCategories();
Map<String, String> newCategories = categoryChangedData.getNewData().getCategories();
oldOne.getCategories().put(columnName, "0");
newOne.getCategories().put(columnName, "1");
oldCategories.put(columnName, oldValue);
newCategories.put(columnName, "1");
ResiImportChangedData cd = new ResiImportChangedData(oldOne, newOne);
categoryChangedResis.put(icResiId, cd);
return;
}
// 非新增,非调动,可能是类别变更的,只是主表中没有数据,只有附加表的数据
ResiImportCategoryData oldOne = new ResiImportCategoryData();
ResiImportCategoryData newOne = new ResiImportCategoryData();
oldOne.setAgencyId(existResiInfoMap.get("AGENCY_ID"));
oldOne.setGridId(existResiInfoMap.get("GRID_ID"));
oldOne.setVillageId(existResiInfoMap.get("VILLAGE_ID"));
oldOne.setBuildId(existResiInfoMap.get("BUILD_ID"));
oldOne.setUnitId(existResiInfoMap.get("UNIT_ID"));
oldOne.setHomeId(existResiInfoMap.get("HOME_ID"));
oldOne.getCategories().put(columnName, oldValue);
newOne.setAgencyId(existResiInfoMap.get("AGENCY_ID"));
newOne.setGridId(existResiInfoMap.get("GRID_ID"));
newOne.setVillageId(existResiInfoMap.get("VILLAGE_ID"));
newOne.setBuildId(existResiInfoMap.get("BUILD_ID"));
newOne.setUnitId(existResiInfoMap.get("UNIT_ID"));
newOne.setHomeId(existResiInfoMap.get("HOME_ID"));
newOne.getCategories().put(columnName, "1");
ResiImportChangedData cd = new ResiImportChangedData(oldOne, newOne);
categoryChangedResis.put(icResiId, cd);
}
/**
@ -1322,7 +1277,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
Map<String, String> oldCategories = oldData.getCategories();
Map<String, String> newCategories = newData.getCategories();
fillResiSubCategoryInfo4TransferAndCategoryChange(oldData, newData);
Map<String, String> resiInfoMap = icResiUserDao.selectResiInfoMap(null, resiId);
fillResiSubCategoryInfo4TransferAndCategoryChange(oldData, newData, resiInfoMap);
StringBuilder sbBefore = new StringBuilder("");
StringBuilder sbAfter = new StringBuilder("");
@ -1339,23 +1296,19 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
// 生成changeRecord并存入
IcResiUserEntity resiInfo = icResiUserDao.selectById(resiId);
IcUserChangeRecordEntity changeRecord = fillChangeRecord(loginUserUtil.getLoginUserCustomerId(), resiId, resiInfo.getName(), null, loginUserUtil.getLoginUserId(),
IcUserChangeRecordEntity changeRecord = fillChangeRecord(loginUserUtil.getLoginUserCustomerId(), resiId, resiInfoMap.get("NAME"), null, loginUserUtil.getLoginUserId(),
operator.getRealName() , descBefore, descAfter, "category", "类别", "", now);
icUserChangeRecordDao.insert(changeRecord);
for (Map.Entry<String, String> columnEntry : newCategories.entrySet()) {
String newValue = columnEntry.getValue();
String oldValue = oldCategories.get(columnEntry.getKey());
oldValue = oldValue == null ? "0" : oldValue;
if (newValue.equals(oldValue)) {
// 新旧值相等,跳过
continue;
}
int value = newValue.equals("1") && oldValue.equals("0") ? 1 : -1;
String agencyId = newData.getAgencyId();
String gridId = newData.getGridId();
String villageId = newData.getVillageId();
@ -1363,17 +1316,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String unitId = newData.getUnitId();
String homeId = newData.getHomeId();
// 如果只有附加表信息,但是没有主表信息,并且附加表基础信息很多空着的,此处需要从主表获取了然后填充一下该信息
if (agencyId == null) agencyId = resiInfo.getAgencyId();
if (gridId == null) gridId = resiInfo.getGridId();
if (villageId == null) villageId = resiInfo.getVillageId();
if (buildId == null) buildId = resiInfo.getBuildId();
if (unitId == null) unitId = resiInfo.getUnitId();
if (homeId == null) homeId = resiInfo.getHomeId();
IcUserChangeDetailedEntity newDetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), resiId, changeRecord.getId(), agencyId,
gridId, villageId, buildId, unitId,
homeId, "category", "类别", columnEntry.getKey(), value, resiInfo.getPids());
homeId, "category", "类别", columnEntry.getKey(), 1, resiInfoMap.get("PIDS"));
icUserChangeDetailedDao.insert(newDetail);
}
@ -1431,10 +1376,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
icUserChangeRecordDao.insert(changeRecord);
// 插入changeDetail
for (Map.Entry<String, String> column : newResiInfoObj.getCategories().entrySet()) {
for (Map.Entry<String, String> mainTableColumn : newResiInfoObj.getCategories().entrySet()) {
IcUserChangeDetailedEntity changedetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), newResiInfoObj.getResiId(), changeRecord.getId(), newResiInfoObj.getAgencyId(),
newResiInfoObj.getGridId(), newResiInfoObj.getVillageId(), newResiInfoObj.getBuildId(), newResiInfoObj.getUnitId(),
newResiInfoObj.getHomeId(), "add", "新增", column.getKey(), 1, resiInfo.getPids());
newResiInfoObj.getHomeId(), "add", "新增", mainTableColumn.getKey(), 1, resiInfo.getPids());
icUserChangeDetailedDao.insert(changedetail);
changedetail = null;
@ -1457,11 +1402,15 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
for (Map.Entry<String, ResiImportChangedData> resi : transferedResis.entrySet()) {
String resiId = resi.getKey();
Map<String, String> resiInfoMap = icResiUserDao.selectResiInfoMap(null, resiId);
String resiName = resiInfoMap.get("NAME");
String pids = resiInfoMap.get("PIDS");
ResiImportCategoryData oldData = resi.getValue().getOldData();
ResiImportCategoryData newData = resi.getValue().getNewData();
// 把附加表的旧数据填充到新数据中
fillResiSubCategoryInfo4TransferAndCategoryChange(oldData, newData);
fillResiSubCategoryInfo4TransferAndCategoryChange(oldData, newData, resiInfoMap);
StringBuilder sbBefore = new StringBuilder();
StringBuilder sbAfter = new StringBuilder();
@ -1472,7 +1421,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String oldBuildId = oldData.getBuildId();
String oldUnitId = oldData.getUnitId();
String oldHomeId = oldData.getHomeId();
//
String newAgencyId = newData.getAgencyId();
String newGridId = newData.getGridId();
String newvillageId = newData.getVillageId();
@ -1482,22 +1431,22 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
IcResiUserOrgMsgFormDTO oldOrgFormDTO = new IcResiUserOrgMsgFormDTO();
oldOrgFormDTO.setCustomerId(customerId);
oldOrgFormDTO.setAgencyId(oldData.getAgencyId());
oldOrgFormDTO.setGridId(oldData.getGridId());
oldOrgFormDTO.setNeighborHoodId(oldData.getVillageId());
oldOrgFormDTO.setBuildingId(oldData.getBuildId());
oldOrgFormDTO.setBuildingUnitId(oldData.getUnitId());
oldOrgFormDTO.setHouseId(oldData.getHomeId());
oldOrgFormDTO.setAgencyId(oldAgencyId);
oldOrgFormDTO.setGridId(oldGridId);
oldOrgFormDTO.setNeighborHoodId(oldvillageId);
oldOrgFormDTO.setBuildingId(oldBuildId);
oldOrgFormDTO.setBuildingUnitId(oldUnitId);
oldOrgFormDTO.setHouseId(oldHomeId);
Result<IcResiUserOrgMsgResultDTO> oldOrgInfoRst = govOrgOpenFeignClient.icResiUserOrgMsg(oldOrgFormDTO);
IcResiUserOrgMsgFormDTO newOrgInfo = new IcResiUserOrgMsgFormDTO();
newOrgInfo.setCustomerId(customerId);
newOrgInfo.setAgencyId(newData.getAgencyId());
newOrgInfo.setGridId(newData.getGridId());
newOrgInfo.setNeighborHoodId(newData.getVillageId());
newOrgInfo.setBuildingId(newData.getBuildId());
newOrgInfo.setBuildingUnitId(newData.getUnitId());
newOrgInfo.setHouseId(newData.getHomeId());
newOrgInfo.setAgencyId(newAgencyId);
newOrgInfo.setGridId(newGridId);
newOrgInfo.setNeighborHoodId(newvillageId);
newOrgInfo.setBuildingId(newBuildId);
newOrgInfo.setBuildingUnitId(newUnitId);
newOrgInfo.setHouseId(newHomeId);
Result<IcResiUserOrgMsgResultDTO> newOrgInfoRst = govOrgOpenFeignClient.icResiUserOrgMsg(newOrgInfo);
IcResiUserOrgMsgResultDTO oldOrg = null;
@ -1560,16 +1509,14 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
}
IcResiUserEntity resiInfo = icResiUserDao.selectById(resiId);
// 保存 transferRecord
IcUserTransferRecordEntity transferRecord = fillTransferRecord(resiInfo, operator, customerId, oldAgencyId, oldGridId,
oldvillageId, oldBuildId, oldUnitId, oldHomeId, customerId,
IcUserTransferRecordEntity transferRecord = fillTransferRecord(resiId, resiName, operator, customerId,
oldAgencyId, oldGridId, oldvillageId, oldBuildId, oldUnitId, oldHomeId, customerId,
newAgencyId, newGridId, newvillageId, newBuildId, newUnitId, newHomeId, oldOrg, newOrg);
icUserTransferRecordDao.insert(transferRecord);
// 保存 调动changeRecord
IcUserChangeRecordEntity transferChangeRecord = fillChangeRecord(customerId, resiId, resiInfo.getName(), transferRecord.getId(), operator.getStaffId(),
IcUserChangeRecordEntity transferChangeRecord = fillChangeRecord(customerId, resiId, resiName, transferRecord.getId(), operator.getStaffId(),
operator.getRealName(), sbBefore.toString(), sbAfter.toString(), "transfer", "调动", "", now);
icUserChangeRecordDao.insert(transferChangeRecord);
@ -1578,17 +1525,14 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
sbAfter = new StringBuilder();
// 过滤居民类别的key并集
Set<String> bingji = new HashSet<>();
newData.getCategories().keySet().forEach((k) -> bingji.add(k));
oldData.getCategories().keySet().forEach((k) -> bingji.add(k));
// Set<String> bingji = new HashSet<>();
// newData.getCategories().keySet().forEach((k) -> bingji.add(k));
// oldData.getCategories().keySet().forEach((k) -> bingji.add(k));
for (String category : bingji) {
for (String category : newData.getCategories().keySet()) {
String newColumnValue = newData.getCategories().get(category);
String oldColumnValue = oldData.getCategories().get(category);
if (oldColumnValue == null) oldColumnValue = "0";
if (newColumnValue == null) newColumnValue = "0";
if (newColumnValue.equals(oldColumnValue)) {
continue;
}
@ -1606,7 +1550,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String categoryDescAfter = sbAfter.toString();
if (!StringUtils.isAllBlank(categoryDescBefore, categoryDescAfter)) {
IcUserChangeRecordEntity categoryChangeRecord = fillChangeRecord(customerId, resiId, resiInfo.getName(), transferRecord.getId(), operator.getStaffId(),
IcUserChangeRecordEntity categoryChangeRecord = fillChangeRecord(customerId, resiId, resiName, transferRecord.getId(), operator.getStaffId(),
operator.getRealName(), categoryDescBefore, categoryDescAfter , "category", "类别", "", now);
icUserChangeRecordDao.insert(categoryChangeRecord);
}
@ -1619,9 +1563,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
// 之前是这个类型,那这个类型需要-1
String oldValue = oldCategories.getValue();
if ("1".equals(oldValue)) {
IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, transferChangeRecord.getId(), oldData.getAgencyId(),
oldData.getGridId(), oldData.getVillageId(), oldData.getBuildId(), oldData.getUnitId(),
oldData.getHomeId(), transferChangeRecord.getType(), transferChangeRecord.getTypeName(), key, -1, resiInfo.getPids());
IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, transferChangeRecord.getId(), oldAgencyId,
oldGridId, oldvillageId, oldBuildId, oldUnitId,
oldHomeId, transferChangeRecord.getType(), transferChangeRecord.getTypeName(), key, -1, pids);
icUserChangeDetailedDao.insert(changeDetail);
}
}
@ -1633,9 +1577,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
// 现在是这个类型,这个类型要+1
if ("1".equals(newValue)) {
IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, transferChangeRecord.getId(), newData.getAgencyId(),
newData.getGridId(), newData.getVillageId(), newData.getBuildId(), newData.getUnitId(),
newData.getHomeId(), transferChangeRecord.getType(), transferChangeRecord.getTypeName(), key, 1, resiInfo.getPids());
IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, transferChangeRecord.getId(), newAgencyId,
newGridId, newvillageId, newBuildId, newUnitId,
newHomeId, transferChangeRecord.getType(), transferChangeRecord.getTypeName(), key, 1, pids);
icUserChangeDetailedDao.insert(changeDetail);
}
}
@ -1648,18 +1592,43 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* @param oldData
* @param newData
*/
private void fillResiSubCategoryInfo4TransferAndCategoryChange(ResiImportCategoryData oldData, ResiImportCategoryData newData) {
for (String category : oldData.getCategories().keySet()) {
String newValue = newData.getCategories().get(category);
String oldValue = oldData.getCategories().get(category);
// 如果新数据中没有或者是0,并且是附加表信息,并且旧数据是1, 拿旧数据的过来
if ((newValue == null || "0".equals(newValue))
&& "1".equals(oldValue)
&& IcResiUserTableEnum.existsColumn(category)) {
newData.getCategories().put(category, "1");
private void fillResiSubCategoryInfo4TransferAndCategoryChange(ResiImportCategoryData oldData, ResiImportCategoryData newData, Map<String, String> resiInfoMap) {
Map<String, String> oldCates = oldData.getCategories();
Map<String, String> newCates = newData.getCategories();
for (IcResiUserTableEnum c : IcResiUserTableEnum.values()) {
// 主表,跳过
String mainTableColumnName = c.getMainTableFlagColumnName();
if (mainTableColumnName == null) {
return;
}
// 不为空,说明本次导入含有该居民的类别信息,不需要补充
String oldValue = oldCates.get(mainTableColumnName);
if (StringUtils.isNotBlank(oldValue)) {
return;
}
// 本次导入不含有该居民类别信息,db中存储的数据,如果是1,newValue和oldValue都应该为1
oldValue = resiInfoMap.get(mainTableColumnName);
if ("1".equals(oldValue)) {
oldCates.put(mainTableColumnName, oldValue);
newCates.put(mainTableColumnName, oldValue);
}
}
// for (String category : oldData.getCategories().keySet()) {
// String newValue = newData.getCategories().get(category);
// String oldValue = oldData.getCategories().get(category);
//
// // 如果新数据中没有或者是0,并且是附加表信息,并且旧数据是1, 拿旧数据的过来
// if ((newValue == null || "0".equals(newValue))
// && "1".equals(oldValue)
// && IcResiUserTableEnum.existsColumn(category)) {
// newData.getCategories().put(category, "1");
// }
// }
}
/**
@ -1739,7 +1708,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
/**
* 填充调动记录
* @param resiInfo
* @param operator
* @param oldCustomerId
* @param oldAgencyId
@ -1757,15 +1725,15 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* @param newHomeId
* @return
*/
private IcUserTransferRecordEntity fillTransferRecord(IcResiUserEntity resiInfo, CustomerStaffInfoCacheResult operator, String oldCustomerId, String oldAgencyId, String oldGridId,
private IcUserTransferRecordEntity fillTransferRecord(String resiId, String resiName, CustomerStaffInfoCacheResult operator, String oldCustomerId, String oldAgencyId, String oldGridId,
String oldVillageId, String oldBuildId, String oldUnitId, String oldHomeId, String newCustomerId,
String newAgencyId, String newGridId, String newVillageId, String newBuildId, String newUnitId,
String newHomeId, IcResiUserOrgMsgResultDTO oldOrg, IcResiUserOrgMsgResultDTO newOrg) {
IcUserTransferRecordEntity recordEntity = new IcUserTransferRecordEntity();
recordEntity.setIcUserId(resiInfo.getId());
recordEntity.setIcUserId(resiId);
recordEntity.setOperatorId(operator.getStaffId());
recordEntity.setIcUserName(resiInfo.getName());
recordEntity.setIcUserName(resiName);
recordEntity.setOperatorName(operator.getRealName());
recordEntity.setOldCustomerId(oldCustomerId);
recordEntity.setOldAgencyId(oldAgencyId);

13
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

@ -644,7 +644,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
}
List<String> nameList=new ArrayList<>();
for(String codePath:demandCodePath){
if(codePath.contains(StrConstant.COMMA)){
if (StringUtils.isNotBlank(codePath) && codePath.contains(StrConstant.COMMA)) {
String[] codeAtt=codePath.split(StrConstant.COMMA);
String code=codeAtt[codeAtt.length-1];
if(StringUtils.isNotBlank(code)&&demandDictMap.containsKey(code)){
@ -1204,6 +1204,17 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
return result;
}
/**
* Desc: 根据房屋IDs查询房屋下是否有存在居民的
* @param ids
* @author zxc
* @date 2022/3/2 10:32 上午
*/
@Override
public List<String> getExistUserByHouseIds(List<String> ids) {
return baseDao.getExistUserByHouseIds(ids);
}
/**
* @Description 居民分类 网格名 处理
* @param list

19
epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

@ -552,8 +552,12 @@
<select id="selectResiInfoMap" resultType="java.util.Map">
select * from ic_resi_user
<where>
DEL_FLAG='0'
<if test="idCard != null and idCard != ''">
ID_CARD=#{idCard}
AND ID_CARD=#{idCard}
</if>
<if test="resiId != null and resiId != ''">
AND ID=#{resiId}
</if>
</where>
</select>
@ -624,4 +628,17 @@
)
</if>
</select>
<!-- 根据房屋IDs查询房屋下是否有存在居民的 -->
<select id="getExistUserByHouseIds" resultType="java.lang.String">
SELECT
DISTINCT home_id
FROM ic_resi_user
WHERE DEL_FLAG = '0'
AND home_id IN (
<foreach collection="ids" item="id" separator=",">
#{id}
</foreach>
)
</select>
</mapper>

Loading…
Cancel
Save