Browse Source

Merge remote-tracking branch 'origin/dev_ic_diaodong' into develop

dev
yinzuomei 4 years ago
parent
commit
1b0741285d
  1. 2
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml
  2. 17
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ResiCategoryItemResultDTO.java
  3. 7
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java
  4. 5
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java
  5. 17
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormItemController.java
  6. 12
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormItemService.java
  7. 32
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormItemServiceImpl.java
  8. 20
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcUserChangeRecordInitFormDTO.java
  9. 51
      epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java
  10. 20
      epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportChangedData.java
  11. 30
      epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java
  12. 13
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcUserChangeRecordController.java
  13. 6
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java
  14. 8
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeDetailedDao.java
  15. 6
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeRecordDao.java
  16. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeDetailedService.java
  17. 9
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeRecordService.java
  18. 239
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java
  19. 9
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeDetailedServiceImpl.java
  20. 142
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeRecordServiceImpl.java
  21. 55
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml
  22. 8
      epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeDetailedDao.xml
  23. 10
      epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeRecordDao.xml

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

@ -1152,7 +1152,7 @@
and temp.result=1
</if>
<if test="type != null and type == 'qc'">
and temp.result !=1
and temp.result = -1
</if>
group by temp.orgId,temp.FIELD_NAME
</select>

17
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ResiCategoryItemResultDTO.java

@ -0,0 +1,17 @@
package com.epmet.dto.result;
import lombok.Data;
/**
* @ClassName ResiCategoryItemResultDTO
* @Description 居民类别item查询结果
* @Author wangxianzhang
* @Date 2022/1/18 4:43 下午
*/
@Data
public class ResiCategoryItemResultDTO {
private String columnName;
private String label;
}

7
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java

@ -145,4 +145,11 @@ public interface OperCustomizeOpenFeignClient {
@PostMapping("/oper/customize/icresicategorywarnconfig/categorywarnconfiglist/{customerId}")
Result<List<IcResiCategoryWarnConfigDTO>> categoryWarnConfigList(@PathVariable String customerId);
/**
* 查询客户下的居民类别item列表
* @param customerId
* @return
*/
@PostMapping("/oper/customize/icformitem/resi-category-items/list")
Result<List<ResiCategoryItemResultDTO>> listResiCategoryItems(@RequestParam("customer-id") String customerId);
}

5
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java

@ -119,4 +119,9 @@ public class OperCustomizeOpenFeignClientFallback implements OperCustomizeOpenFe
public Result<List<IcResiCategoryWarnConfigDTO>> categoryWarnConfigList(String customerId) {
return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "categoryWarnConfigList", customerId);
}
@Override
public Result<List<ResiCategoryItemResultDTO>> listResiCategoryItems(String customerId) {
return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "listResiCategoryItems", customerId);
}
}

17
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormItemController.java

@ -19,12 +19,10 @@ package com.epmet.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.result.ColumnTableNameResultDTO;
import com.epmet.dto.result.ResiCategoryItemResultDTO;
import com.epmet.service.IcFormItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -51,4 +49,15 @@ public class IcFormItemController {
return new Result<List<ColumnTableNameResultDTO>>().ok(icFormItemService.getMustColumn(customerId));
}
/**
* 查询客户下的居民类别item列表
* @param customerId
* @return
*/
@PostMapping("resi-category-items/list")
public Result<List<ResiCategoryItemResultDTO>> listResiCategoryItems(@RequestParam("customer-id") String customerId) {
List<ResiCategoryItemResultDTO> r = icFormItemService.listResiCategoryItems(customerId);
return new Result().ok(r);
}
}

12
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormItemService.java

@ -19,10 +19,7 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.dto.form.CustomerFormQueryDTO;
import com.epmet.dto.result.ColumnTableNameResultDTO;
import com.epmet.dto.result.ConditionResultDTO;
import com.epmet.dto.result.IcFormResColumnDTO;
import com.epmet.dto.result.TableHeaderResultDTO;
import com.epmet.dto.result.*;
import com.epmet.entity.IcFormItemEntity;
import java.util.List;
@ -58,4 +55,11 @@ public interface IcFormItemService extends BaseService<IcFormItemEntity> {
* @Description 居民信息新增查询各表必填字段
**/
List<ColumnTableNameResultDTO> getMustColumn(String customerId);
/**
* 查询
* @param customerId
* @return
*/
List<ResiCategoryItemResultDTO> listResiCategoryItems(String customerId);
}

32
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormItemServiceImpl.java

@ -17,6 +17,7 @@
package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
@ -27,10 +28,7 @@ import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.dao.IcFormItemDao;
import com.epmet.dto.IcFormItemDTO;
import com.epmet.dto.form.CustomerFormQueryDTO;
import com.epmet.dto.result.ColumnTableNameResultDTO;
import com.epmet.dto.result.ConditionResultDTO;
import com.epmet.dto.result.IcFormResColumnDTO;
import com.epmet.dto.result.TableHeaderResultDTO;
import com.epmet.dto.result.*;
import com.epmet.entity.IcFormItemEntity;
import com.epmet.service.IcFormItemService;
import org.apache.commons.lang3.StringUtils;
@ -39,6 +37,8 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 表单项
@ -118,4 +118,28 @@ public class IcFormItemServiceImpl extends BaseServiceImpl<IcFormItemDao, IcForm
return baseDao.getMustColumn(customerId);
}
@Override
public List<ResiCategoryItemResultDTO> listResiCategoryItems(String customerId) {
LambdaQueryWrapper<IcFormItemEntity> query = new LambdaQueryWrapper<>();
query.eq(IcFormItemEntity::getCustomerId, customerId);
query.eq(IcFormItemEntity::getDataAnalyse, 1);
List<IcFormItemEntity> categoryItems = baseDao.selectList(query);
// 如果该客户没配置,那么使用默认配置
if (CollectionUtils.isEmpty(categoryItems)) {
LambdaQueryWrapper<IcFormItemEntity> query1 = new LambdaQueryWrapper<>();
query1.eq(IcFormItemEntity::getDataAnalyse, 1);
query1.eq(IcFormItemEntity::getCustomerId, "default");
categoryItems = baseDao.selectList(query1);
}
return categoryItems.stream().map((e) -> {
ResiCategoryItemResultDTO d = new ResiCategoryItemResultDTO();
d.setColumnName(e.getColumnName());
d.setLabel(e.getLabel());
return d;
}).collect(Collectors.toList());
}
}

20
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcUserChangeRecordInitFormDTO.java

@ -0,0 +1,20 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 基础信息变更记录
* @Author sun
*/
@Data
public class IcUserChangeRecordInitFormDTO implements Serializable {
private static final long serialVersionUID = 9156247659994638103L;
/**
* 客户Id
*/
private String customerId;
}

51
epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java

@ -0,0 +1,51 @@
package com.epmet.bean;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* @ClassName ResiImportTransferOldDim
* @Description TODO
* @Author wangxianzhang
* @Date 2022/1/18 5:53 下午
*/
@Data
public class ResiImportCategoryData {
private String agencyId;
private String gridId;
private String villageId;
private String buildId;
private String unitId;
private String homeId;
/**
* key:居民类别在ic_resi_user表中的列名
* value:居民类别的值01
*/
private Map<String, String> categories = new HashMap<>();
public ResiImportCategoryData() {
}
public ResiImportCategoryData(String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId, Map<String, String> categories) {
this.agencyId = agencyId;
this.gridId = gridId;
this.villageId = villageId;
this.buildId = buildId;
this.unitId = unitId;
this.homeId = homeId;
this.categories = categories;
}
public ResiImportCategoryData(String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId) {
this.agencyId = agencyId;
this.gridId = gridId;
this.villageId = villageId;
this.buildId = buildId;
this.unitId = unitId;
this.homeId = homeId;
}
}

20
epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportChangedData.java

@ -0,0 +1,20 @@
package com.epmet.bean;
import lombok.Data;
/**
* @ClassName ResiImportTransferCache
* @Description TODO
* @Author wangxianzhang
* @Date 2022/1/18 5:51 下午
*/
@Data
public class ResiImportChangedData {
private ResiImportCategoryData oldData = new ResiImportCategoryData();
private ResiImportCategoryData newData = new ResiImportCategoryData();
public ResiImportChangedData(ResiImportCategoryData oldData, ResiImportCategoryData newData) {
this.oldData = oldData;
this.newData = newData;
}
}

30
epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java

@ -0,0 +1,30 @@
package com.epmet.bean;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* 导入操作中居民信息操作的分类bean
*/
@Data
public class ResiImportResiCategoryChangedCache {
/**
* 新增居民
* Map<resiId:<ResiImportCategoryData>>
*/
private Map<String, ResiImportCategoryData> newResis = new HashMap<>();
/**
* 调动的居民
*/
private Map<String, ResiImportChangedData> transferedResis = new HashMap<>();
/**
* 类别变更的居民
*/
private Map<String, ResiImportChangedData> categoryChangedResis = new HashMap<>();
}

13
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcUserChangeRecordController.java

@ -22,6 +22,7 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.IcResiUserChangeRecordFormDTO;
import com.epmet.dto.form.IcResiUserTransferFormDTO;
import com.epmet.dto.form.IcUserChangeRecordInitFormDTO;
import com.epmet.dto.form.IcUsercategoryAnalysisFormDTO;
import com.epmet.dto.result.IcUserChangeRecordResultDTO;
import com.epmet.dto.result.IcUsercategoryAnalysisResultDTO;
@ -32,6 +33,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
/**
* 居民变更记录表
@ -67,4 +70,14 @@ public class IcUserChangeRecordController {
ValidatorUtils.validateEntity(formDTO,IcUsercategoryAnalysisFormDTO.AddUserShowGroup.class,IcUsercategoryAnalysisFormDTO.AddUserInternalGroup.class);
return new Result<PageData<IcUsercategoryAnalysisResultDTO>>().ok(icUserChangeRecordService.categoryAnalysisList(formDTO));
}
/**
* @Author sun
* @Description 历史居民数据生成变更记录和变更明细数据
**/
@PostMapping("icuserchangerecordinit")
public Result icUserChangeRecordInit(@RequestBody IcUserChangeRecordInitFormDTO formDTO) throws ParseException {
icUserChangeRecordService.icUserChangeRecordInit(formDTO);
return new Result();
}
}

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

@ -232,5 +232,11 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
Map<String, String> getCategoryListMap(@Param("icUserId") String icUserId);
Map<String, String> selectResiInfoMap(@Param("idCard") String idCard);
List<Map<String,Object>> selectResiUsers(@Param("types")List<String> types,@Param("orgId")String orgId);
List<String> icUserCustomerIds();
List<Map<String, String>> getIcUserList(@Param("customerId") String customerId);
}

8
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeDetailedDao.java

@ -20,6 +20,7 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.IcUserChangeDetailedEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 变更明细表
@ -30,5 +31,10 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface IcUserChangeDetailedDao extends BaseDao<IcUserChangeDetailedEntity> {
/**
* @Author sun
* @Description 删除客户是新增类型的变更明细历史数据
**/
void delByCustomerId(@Param("customerId") String customerId, @Param("type") String type);
}

6
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeRecordDao.java

@ -43,4 +43,10 @@ public interface IcUserChangeRecordDao extends BaseDao<IcUserChangeRecordEntity>
List<IcUserChangeRecordDTO> getList(@Param("icUserId") String icUserId);
List<IcUsercategoryAnalysisResultDTO> categoryAnalysisList(IcUsercategoryAnalysisFormDTO formDTO);
/**
* @Author sun
* @Description 删除客户是新增类型的变更历史数据
**/
void delByCustomerId(@Param("customerId") String customerId, @Param("type") String type);
}

5
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeDetailedService.java

@ -29,4 +29,9 @@ import com.epmet.entity.IcUserChangeDetailedEntity;
*/
public interface IcUserChangeDetailedService extends BaseService<IcUserChangeDetailedEntity> {
/**
* @Author sun
* @Description 删除客户是新增类型的变更明细历史数据
**/
void delByCustomerId(String customerId, String type);
}

9
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeRecordService.java

@ -20,11 +20,14 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.form.IcResiUserChangeRecordFormDTO;
import com.epmet.dto.form.IcUserChangeRecordInitFormDTO;
import com.epmet.dto.form.IcUsercategoryAnalysisFormDTO;
import com.epmet.dto.result.IcUserChangeRecordResultDTO;
import com.epmet.dto.result.IcUsercategoryAnalysisResultDTO;
import com.epmet.entity.IcUserChangeRecordEntity;
import java.text.ParseException;
/**
* 居民变更记录表
*
@ -45,4 +48,10 @@ public interface IcUserChangeRecordService extends BaseService<IcUserChangeRecor
* @return
*/
PageData<IcUsercategoryAnalysisResultDTO> categoryAnalysisList(IcUsercategoryAnalysisFormDTO formDTO);
/**
* @Author sun
* @Description 历史居民数据生成变更记录和变更明细数据
**/
void icUserChangeRecordInit(IcUserChangeRecordInitFormDTO formDTO) throws ParseException;
}

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

@ -6,6 +6,9 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.EasyExcelFactory;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.bean.ResiImportCategoryData;
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.dto.result.OptionResultDTO;
@ -22,12 +25,14 @@ import com.epmet.dto.form.LoginUserDetailsFormDTO;
import com.epmet.dto.result.FormItemResult;
import com.epmet.dto.result.LoginUserDetailsResultDTO;
import com.epmet.dto.result.OptionDTO;
import com.epmet.dto.result.ResiCategoryItemResultDTO;
import com.epmet.entity.IcResiUserEntity;
import com.epmet.enums.IcResiUserTableEnum;
import com.epmet.excel.handler.DynamicEasyExcelListener;
import com.epmet.feign.EpmetAdminOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.feign.OperCustomizeOpenFeignClient;
import com.epmet.service.IcResiUserImportService;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
@ -61,6 +66,16 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
public static final ThreadLocal<Map<String, List<ErrorRow>>> errorRows = new ThreadLocal<>();
public static final ThreadLocal<Map<String, List<SkipedRow>>> skipedRows = new ThreadLocal<>();
/**
* 类别发生变更的居民
*/
public static final ThreadLocal<ResiImportResiCategoryChangedCache> categoryChangedResi = new ThreadLocal<>();
/**
* 居民类别items列表
*/
public static final ThreadLocal<List<String>> resiCategoryItemsCache = new ThreadLocal<>();
/**
* key: itemId
* value:
@ -85,6 +100,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
@Autowired
private IcResiUserDao icResiUserDao;
@Autowired
private OperCustomizeOpenFeignClient operCustomizeOpenFeignClient;
/**
* @description 列信息封装
*
@ -168,6 +186,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
*/
@Override
public void importIcResiInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, HttpServletResponse response) {
String loginUserId = loginUserUtil.getLoginUserId();
String loginUserApp = loginUserUtil.getLoginUserApp();
String loginUserClient = loginUserUtil.getLoginUserClient();
@ -185,7 +204,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String customerId = agencyInfo.getCustomerId();
try {
initThreadLocalRowsStorage();
initImportThreadLocal(customerId);
// 上传主表信息
importIcResiBaseInfoFromExcel(formItemList,excelPathName, IcResiUserTableEnum.IC_RESI_USER.getSheetNo(), IcResiUserTableEnum.IC_RESI_USER.getHeadRowNo(),
@ -209,11 +228,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
}
//String errors = JSON.toJSONString(errorRows.get());
//String skipeds = JSON.toJSONString(skipedRows.get());
//log.error(errors);
//log.error(skipeds);
// 执行人员类别变更记录
Map<String, ResiImportCategoryData> newResis = categoryChangedResi.get().getNewResis();
Map<String, ResiImportChangedData> categoryChangedResis = categoryChangedResi.get().getCategoryChangedResis();
Map<String, ResiImportChangedData> transferedResis = categoryChangedResi.get().getTransferedResis();
try {
downLoadResults(response);
@ -223,25 +241,42 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
} finally {
skipedRows.remove();
errorRows.remove();
categoryChangedResi.remove();
resiCategoryItemsCache.remove();
itemIdAndOptionsCache.invalidateAll();
}
}
/**
* 暂存rows信息初始化
* threadLocal初始化
*/
private void initThreadLocalRowsStorage() {
private void initImportThreadLocal(String customerId) {
// 跳过的,不导入的行
Map<String, List<SkipedRow>> skipedRowsMap = new LinkedHashMap<>();
for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) {
skipedRowsMap.put(e.getTableName(), new LinkedList<>());
}
skipedRows.set(skipedRowsMap);
// 错误信息
Map<String, List<ErrorRow>> errorRowsMap = new LinkedHashMap<>();
for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) {
errorRowsMap.put(e.getTableName(), new LinkedList<>());
}
errorRows.set(errorRowsMap);
// 居民类别信息
ResiImportResiCategoryChangedCache c = new ResiImportResiCategoryChangedCache();
categoryChangedResi.set(c);
List<ResiCategoryItemResultDTO> resiCategoryItems = getResultDataOrThrowsException(operCustomizeOpenFeignClient.listResiCategoryItems(customerId),
ServiceConstant.OPER_CUSTOMIZE_SERVER,
EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),
String.format("【居民信息导入】查询居民类别items失败,customerId:%s", customerId),
"居民信息导入失败");
List<String> l = resiCategoryItems.stream().map(ResiCategoryItemResultDTO::getColumnName).collect(Collectors.toList());
resiCategoryItemsCache.set(l);
}
/**
@ -374,26 +409,45 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String idCard = columnAndValues.get("ID_CARD");
LambdaQueryWrapper<IcResiUserEntity> idCardQuery = new LambdaQueryWrapper<>();
idCardQuery.eq(IcResiUserEntity::getIdCard, idCard);
IcResiUserEntity resiBaseInfo = icResiUserDao.selectOne(idCardQuery);
//IcResiUserEntity resiBaseInfo = icResiUserDao.selectOne(idCardQuery);
Map<String, String> existingResiMap = icResiUserDao.selectResiInfoMap(idCard);
if (existingResiMap != null) {
// 修改居民信息
icResiUserDao.upTable(tableName, existingResiMap.get("ID"), columnAndValues);
if (resiBaseInfo != null) {
icResiUserDao.upTable(tableName, resiBaseInfo.getId(), columnAndValues);
// 任意组织维度一个发生变化,则放到调动居民缓存中
ResiImportChangedData transferData;
if ((transferData = this.getResiImportTrasferData(existingResiMap, columnAndValues)) != null) {
categoryChangedResi.get().getTransferedResis().put(existingResiMap.get("ID"), transferData);
} else {
// 组织维度没有发生变化,看是否有居民类型变更
ResiImportChangedData d = getResiImportCategoryChangedData(existingResiMap, columnAndValues);
if (d != null) {
categoryChangedResi.get().getCategoryChangedResis().put(existingResiMap.get("ID"), d);
}
}
} else {
// 新增居民
columnAndValues.put("CREATED_BY", currentUserId);
columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", ""));
icResiUserDao.add(tableName, columnAndValues);
}
//if (icResiUserDao.selectCount(idCardQuery) > 0) {
// //log.info("身份证号为【{}】的居民信息已存在,跳过导入", idCard);
// SkipedRow skipedRow = new SkipedRow();
// skipedRow.setName(columnAndValues.get("NAME"));
// skipedRow.setIdCard(idCard);
// skipedRow.setInfo("身份证号已存在,跳过导入");
// skipedRow.setTableName(tableName);
// skipedRows.get().get(IcResiUserTableEnums.IC_RESI_USER.getTableName()).add(skipedRow);
// continue;
//}
Map<String, String> categories = resiCategoryItemsCache.get()
.stream()
.filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName)))
.collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k)));
categoryChangedResi.get().getNewResis().put(columnAndValues.get("ID"),
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"),
categories));
}
} catch (Exception e) {
String errorMsg;
@ -950,4 +1004,145 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
workbook.write(response.getOutputStream());
}
public ResiImportCategoryData generateResiImportChangeData(String agencyId, String gridId, String villageId, String buildId, String unitId,
String homeId , Map<String, String> categories) {
ResiImportCategoryData ricd = new ResiImportCategoryData();
ricd.setAgencyId(agencyId);
ricd.setBuildId(buildId);
ricd.setGridId(gridId);
ricd.setVillageId(villageId);
ricd.setUnitId(unitId);
ricd.setHomeId(homeId);
ricd.setCategories(categories);
return ricd;
}
///**
// * 判断是否有组织维度的变化
// * @param existingResiMap
// * @param newResiMap
// * @return
// */
//public boolean isOrgDimChanged(Map<String, String> existingResiMap, Map<String, String> newResiMap) {
// return !existingResiMap.get("AGENCY_ID").equals(newResiMap.get("AGENCY_ID"))
// || !existingResiMap.get("GRID_ID").equals(newResiMap.get("GRID_ID"))
// || !existingResiMap.get("VILLAGE_ID").equals(newResiMap.get("VILLAGE_ID"))
// || !existingResiMap.get("BUILD_ID").equals(newResiMap.get("BUILD_ID"))
// || !existingResiMap.get("UNIT_ID").equals(newResiMap.get("UNIT_ID"))
// || !existingResiMap.get("HOME_ID").equals(newResiMap.get("HOME_ID"))
//}
/**
* 生成导入调动数据
* @param existingResiMap
* @param newResiMap
* @return
*/
private ResiImportChangedData getResiImportTrasferData(Map<String, String> existingResiMap, Map<String, String> newResiMap) {
// 维度未变化,则返回null
if (existingResiMap.get("AGENCY_ID").equals(newResiMap.get("AGENCY_ID"))
&& existingResiMap.get("GRID_ID").equals(newResiMap.get("GRID_ID"))
&& existingResiMap.get("VILLAGE_ID").equals(newResiMap.get("VILLAGE_ID"))
&& existingResiMap.get("BUILD_ID").equals(newResiMap.get("BUILD_ID"))
&& existingResiMap.get("UNIT_ID").equals(newResiMap.get("UNIT_ID"))
&& existingResiMap.get("HOME_ID").equals(newResiMap.get("HOME_ID"))) {
return null;
}
HashMap<String, String> existingResiCategories = new HashMap<>();
HashMap<String, String> newResiCategories = new HashMap<>();
for (String categoryColumnName : resiCategoryItemsCache.get()) {
String oldCategoryValue = existingResiMap.get(categoryColumnName);
String newCategoryValue = newResiMap.get(categoryColumnName);
if (StringUtils.isNotBlank(oldCategoryValue) && "1".equals(oldCategoryValue)) {
existingResiCategories.put(categoryColumnName, oldCategoryValue);
}
if (StringUtils.isNotBlank(newCategoryValue) && "1".equals(newCategoryValue)) {
newResiCategories.put(categoryColumnName, newResiMap.get(categoryColumnName));
}
}
ResiImportCategoryData oldOne = new ResiImportCategoryData(
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(existingResiMap.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);
}
/**
* 类别变更的居民信息封装
* @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<>();
List<String> categoryColumnNames = resiCategoryItemsCache.get();
for (String categoryColumnName : categoryColumnNames) {
String existingColumnValue = existingResiMap.get(categoryColumnName);
String newColumnValue = newResiMap.get(categoryColumnName);
if (StringUtils.isAllBlank(existingColumnValue, newColumnValue)) {
// 都为空,则没发生变化
continue;
} else if (StringUtils.isNoneBlank(existingColumnValue, newColumnValue)) {
// 都不为空,则执行比较
if (!existingColumnValue.equals(newColumnValue)) {
oldCategories.put(categoryColumnName, existingColumnValue);
newCategories.put(categoryColumnName, newColumnValue);
continue;
}
} else {
// 一个为空一个不为空,则发生变化
oldCategories.put(categoryColumnName, existingColumnValue);
newCategories.put(categoryColumnName, newColumnValue);
}
}
if (oldCategories.size() == 0) {
return null;
}
ResiImportCategoryData oldOne = new ResiImportCategoryData(
existingResiMap.get("AGENCY_ID"),
existingResiMap.get("GRID_ID"),
existingResiMap.get("VILLAGE_ID"),
existingResiMap.get("BUILD_ID"),
existingResiMap.get("UNIT_ID"),
existingResiMap.get("HOME_ID"),
oldCategories);
ResiImportCategoryData newOne = new ResiImportCategoryData(existingResiMap.get("AGENCY_ID"),
newResiMap.get("GRID_ID"),
newResiMap.get("VILLAGE_ID"),
newResiMap.get("BUILD_ID"),
newResiMap.get("UNIT_ID"),
newResiMap.get("HOME_ID"),
newCategories);
return new ResiImportChangedData(oldOne, newOne);
}
}

9
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeDetailedServiceImpl.java

@ -33,5 +33,12 @@ import org.springframework.stereotype.Service;
@Service
public class IcUserChangeDetailedServiceImpl extends BaseServiceImpl<IcUserChangeDetailedDao, IcUserChangeDetailedEntity> implements IcUserChangeDetailedService {
/**
* @Author sun
* @Description 删除客户是新增类型的变更明细历史数据
**/
@Override
public void delByCustomerId(String customerId, String type) {
baseDao.delByCustomerId(customerId, type);
}
}

142
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeRecordServiceImpl.java

@ -20,29 +20,39 @@ package com.epmet.service.impl;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dao.IcResiUserDao;
import com.epmet.dao.IcUserChangeRecordDao;
import com.epmet.dto.IcResiCategoryWarnConfigDTO;
import com.epmet.dto.IcUserChangeRecordDTO;
import com.epmet.dto.form.IcResiUserChangeRecordFormDTO;
import com.epmet.dto.form.IcUserChangeRecordInitFormDTO;
import com.epmet.dto.form.IcUsercategoryAnalysisFormDTO;
import com.epmet.dto.result.AllGridsByUserIdResultDTO;
import com.epmet.dto.result.BuildingResultDTO;
import com.epmet.dto.result.IcUserChangeRecordResultDTO;
import com.epmet.dto.result.IcUsercategoryAnalysisResultDTO;
import com.epmet.entity.IcUserChangeDetailedEntity;
import com.epmet.entity.IcUserChangeRecordEntity;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.feign.OperCustomizeOpenFeignClient;
import com.epmet.service.IcUserChangeDetailedService;
import com.epmet.service.IcUserChangeRecordService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -53,9 +63,18 @@ import java.util.stream.Collectors;
* @since v1.0.0 2022-01-14
*/
@Service
@Slf4j
public class IcUserChangeRecordServiceImpl extends BaseServiceImpl<IcUserChangeRecordDao, IcUserChangeRecordEntity> implements IcUserChangeRecordService {
@Autowired
private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Autowired
private IcResiUserDao icResiUserDao;
@Autowired
private OperCustomizeOpenFeignClient operCustomizeOpenFeignClient;
@Autowired
private IcUserChangeRecordService icUserChangeRecordService;
@Autowired
private IcUserChangeDetailedService icUserChangeDetailedService;
/**
@ -118,4 +137,119 @@ public class IcUserChangeRecordServiceImpl extends BaseServiceImpl<IcUserChangeR
return new PageData<>(list, pageInfo.getTotal());
}
/**
* @Author sun
* @Description 历史居民数据生成变更记录和变更明细数据
**/
@Override
public void icUserChangeRecordInit(IcUserChangeRecordInitFormDTO formDTO) throws ParseException {
//1.有客户id按客户执行,没有的按ic_resi_user表有效客户执行
//入参有客户Id的则按客户Id执行,没有的则全部客户都执行
if (null != formDTO && StringUtils.isNotBlank(formDTO.getCustomerId())) {
initIcUserChange(formDTO.getCustomerId());
} else {
List<String> customerIdList = icResiUserDao.icUserCustomerIds();
for (String customerId : customerIdList) {
try {
//遍历统计每一个客户数据
initIcUserChange(customerId);
} catch (Exception e) {
log.error("初始客户居民变更记录数据失败,对应客户Id:" + customerId, e);
log.error("Error creating model JSON", e);
}
}
}
}
/**
* @Author sun
* @Description 按客户初始化客户下居民的变更记录变更明细数据
**/
@Transactional(rollbackFor = Exception.class)
public void initIcUserChange(String customerId) throws ParseException {
log.info("开始初始客户下居民的变更记录和变更明细数据,客户Id->"+customerId);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//1.获取客户居民类别预警配置表数据
Result<List<IcResiCategoryWarnConfigDTO>> resultList = operCustomizeOpenFeignClient.categoryWarnConfigList(customerId);
if (!resultList.success()) {
throw new RuntimeException("居民信息修改,获取客户居民类别预警配置表数据失败");
}
List<IcUserChangeRecordEntity> changeList = new ArrayList<>();
IcUserChangeRecordEntity change = null;
List<IcUserChangeDetailedEntity> detailedList = new ArrayList<>();
IcUserChangeDetailedEntity detailed = null;
//存放工作人员姓名
Map<String, String> hash = new HashMap<>();
//2.分批处理客户下居民数据
int pageNo = NumConstant.ONE;
List<Map<String, String>> icUserList = new ArrayList<>();
do {
//一千条一循环查询客户下居民数据
PageHelper.startPage(pageNo, NumConstant.ONE_THOUSAND);
icUserList = icResiUserDao.getIcUserList(customerId);
pageNo++;
//3.遍历封装数据
for (Map<String,String> map : icUserList){
//存放一个人的类别为是的变更明细数据
List<IcUserChangeDetailedEntity> subList = new ArrayList<>();
String changeId = UUID.randomUUID().toString().replaceAll("-", "");
for (IcResiCategoryWarnConfigDTO dto : resultList.getData()){
if(map.containsKey(dto.getColumnName())&&"1".equals(map.get(dto.getColumnName()))){
detailed = new IcUserChangeDetailedEntity();
detailed.setCustomerId(customerId);
detailed.setIcUserChangeRecordId(changeId);
detailed.setPids(map.get("PIDS"));
detailed.setAgencyId(map.get("AGENCY_ID"));
detailed.setGridId(map.get("GRID_ID"));
detailed.setNeighborHoodId(map.get("VILLAGE_ID"));
detailed.setBuildingId(map.get("BUILD_ID"));
detailed.setBuildingUnitId(map.get("UNIT_ID"));
detailed.setHouseId(map.get("HOME_ID"));
detailed.setIcUserId(map.get("HOME_ID"));
detailed.setType("add");
detailed.setTypeName("新增");
detailed.setFieldName(dto.getColumnName());
detailed.setValue(1);
detailed.setCreatedBy(map.get("CREATED_BY"));
detailed.setCreatedTime(sdf.parse(map.get("CREATED_TIME")));
detailed.setUpdatedBy("APP_USER");
detailed.setUpdatedTime(new Date());
subList.add(detailed);
}
}
if (subList.size() > NumConstant.ZERO) {
detailedList.addAll(subList);
if (!hash.containsKey(map.get("CREATED_BY"))) {
CustomerStaffInfoCacheResult staffInfoCache = CustomerStaffRedis.getStaffInfo(customerId, map.get("CREATED_BY"));
//被删除或被移除的工作人员,名字为空
hash.put(map.get("CREATED_BY"), null != staffInfoCache ? staffInfoCache.getRealName() : "");
}
change = new IcUserChangeRecordEntity();
change.setId(changeId);
change.setCustomerId(customerId);
change.setOperatorId(map.get("CREATED_BY"));
change.setIcUserId(map.get("ID"));
change.setOperatorName(hash.get(map.get("CREATED_BY")));
change.setIcUserName(map.get("NAME"));
change.setType("add");
change.setTypeName("新增");
change.setBeforeChangeName("-");
change.setAfterChangeName("-");
change.setChangeTime(sdf.parse(map.get("CREATED_TIME")));
change.setCreatedBy(map.get("CREATED_BY"));
change.setCreatedTime(sdf.parse(map.get("CREATED_TIME")));
change.setUpdatedBy("APP_USER");
change.setUpdatedTime(new Date());
changeList.add(change);
}
}
} while (icUserList.size() == NumConstant.ONE_THOUSAND);
//4.批量新增数据,先删后增【只删除新增节点的历史数据】
baseDao.delByCustomerId(customerId, "add");
icUserChangeDetailedService.delByCustomerId(customerId, "add");
icUserChangeRecordService.insertBatch(changeList);
icUserChangeDetailedService.insertBatch(detailedList);
}
}

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

@ -560,4 +560,59 @@
ORDER BY CREATED_TIME DESC
</select>
<!--查询居民信息(map格式)-->
<select id="selectResiInfoMap" resultType="java.util.Map">
select * from ic_resi_user
<where>
<if test="idCard != null and idCard != ''">
ID_CARD=#{idCard}
</if>
</where>
</select>
<select id="icUserCustomerIds" resultType="java.lang.String">
SELECT customer_id FROM ic_resi_user GROUP BY customer_id
</select>
<select id="getIcUserList" resultType="java.util.Map">
SELECT
id ID,
customer_id CUSTOMER_ID,
agency_id AGENCY_ID,
pids PIDS,
grid_id GRID_ID,
village_id VILLAGE_ID,
build_id BUILD_ID,
unit_id UNIT_ID,
home_id HOME_ID,
name NAME,
created_by CREATED_BY,
date_format(created_time, '%Y-%m-%d %h:%i:%s') CREATED_TIME,
IFNULL(is_kc,'0') IS_KC,
IFNULL(is_cj,'0') IS_CJ,
IFNULL(is_ylfn,'0') IS_YLFN,
IFNULL(is_sn,'0') IS_SN,
IFNULL(is_special,'0') IS_SPECIAL,
IFNULL(is_volunteer,'0') IS_VOLUNTEER,
IFNULL(is_unemployed,'0') IS_UNEMPLOYED,
IFNULL(is_mb,'0') IS_MB,
IFNULL(is_sz,'0') IS_SZ,
IFNULL(is_sd,'0') IS_SD,
IFNULL(is_veterans,'0') IS_VETERANS,
IFNULL(is_ensure_house,'0') IS_ENSURE_HOUSE,
IFNULL(is_party,'0') IS_PARTY,
IFNULL(is_old_people,'0') IS_OLD_PEOPLE,
IFNULL(is_xfry,'0')IS_XFRY,
IFNULL(is_united_front,'0') IS_UNITED_FRONT,
IFNULL(is_db,'0') IS_DB,
IFNULL(is_dbh,'0') IS_DBH
FROM
ic_resi_user
WHERE
del_flag = '0'
AND `status` = '0'
AND customer_id = #{customerId}
ORDER BY created_time ASC
</select>
</mapper>

8
epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeDetailedDao.xml

@ -3,5 +3,13 @@
<mapper namespace="com.epmet.dao.IcUserChangeDetailedDao">
<delete id="delByCustomerId">
DELETE
FROM
ic_user_change_detailed
WHERE
CUSTOMER_ID = #{customerId}
AND type = #{type}
</delete>
</mapper>

10
epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeRecordDao.xml

@ -58,4 +58,14 @@
<![CDATA[ AND DATE_FORMAT( d.CREATED_TIME, '%Y%m%d' ) <= #{endDate} ]]>
order by d.CREATED_TIME asc,d.id asc
</select>
<delete id="delByCustomerId">
DELETE
FROM
ic_user_change_record
WHERE
CUSTOMER_ID = #{customerId}
AND type = #{type}
</delete>
</mapper>
Loading…
Cancel
Save