Browse Source

Merge remote-tracking branch 'remotes/origin/dev_import' into develop

dev
jianjun 4 years ago
parent
commit
1eff8df866
  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/utils/HttpClientManager.java
  4. 24
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/DataAggregatorOpenFeignClient.java
  5. 19
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/impl/DataAggregatorOpenFeignClientFallback.java
  6. 17
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/impl/DataAggregatorOpenFeignClientFallbackFactory.java
  7. 6
      epmet-module/data-aggregator/data-aggregator-server/pom.xml
  8. 12
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovOrgController.java
  9. 19
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/excel/GridLivelyExcel.java
  10. 6
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/GovOrgService.java
  11. 97
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java
  12. 15
      epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/ImportTaskController.java
  13. 7
      epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/ImportTaskService.java
  14. 16
      epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/ImportTaskServiceImpl.java
  15. 1
      epmet-module/epmet-common-service/common-service-server/src/main/resources/db/migration/V0.0.13__ImportTaskCommentModify.sql
  16. 4
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/resi/ResiActDetailResultDTO.java
  17. 6
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/CommunitySelfOrgImportExcel.java
  18. 8
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/ImportCommunitySelfOrganization.java
  19. 39
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActInfoServiceImpl.java
  20. 51
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcCommunitySelfOrganizationServiceImpl.java
  21. 40
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/db/migration/V0.0.12__insert_ic_party_relation.sql
  22. 6
      epmet-module/epmet-job/epmet-job-server/pom.xml
  23. 26
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/controller/DemoController.java
  24. 68
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/ExportGridLiveResTask.java
  25. 21
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/UpdateBuildingHouseNumResultDTO.java
  26. 4
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java
  27. 4
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  28. 9
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java
  29. 25
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java
  30. 51
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java
  31. 98
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java
  32. 97
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java
  33. 38
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml
  34. 81
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleServiceImpl.java
  35. 2
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  36. 74
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java
  37. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java
  38. 62
      epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java
  39. 44
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiVirtualSheetImportListener.java
  40. 468
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java
  41. 6
      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/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);
}
}
}

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));
}
}
}

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;
}

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();

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

@ -269,10 +269,10 @@ 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<>();

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);
}

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));
}
}

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>

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()) {

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

@ -650,7 +650,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")

74
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;
@ -439,7 +440,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 +448,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 +461,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 +549,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");

2
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);

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();
}
}
}

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);

6
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>

Loading…
Cancel
Save