|
|
@ -17,30 +17,47 @@ |
|
|
|
|
|
|
|
package com.elink.esua.epdc.vaccine.personroom.service.impl; |
|
|
|
|
|
|
|
import cn.afterturn.easypoi.excel.ExcelImportUtil; |
|
|
|
import cn.afterturn.easypoi.excel.entity.ImportParams; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import com.elink.esua.epdc.commons.mybatis.service.impl.CrudServiceImpl; |
|
|
|
import com.elink.esua.epdc.commons.tools.constant.FieldConstant; |
|
|
|
import com.elink.esua.epdc.commons.tools.constant.NumConstant; |
|
|
|
import com.elink.esua.epdc.commons.tools.exception.RenException; |
|
|
|
import com.elink.esua.epdc.commons.tools.page.PageData; |
|
|
|
import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; |
|
|
|
import com.elink.esua.epdc.commons.tools.utils.IdentityNoUtils; |
|
|
|
import com.elink.esua.epdc.commons.tools.utils.Result; |
|
|
|
import com.elink.esua.epdc.commons.tools.utils.StreamUtils; |
|
|
|
import com.elink.esua.epdc.dto.ParentAndAllDeptDTO; |
|
|
|
import com.elink.esua.epdc.dto.house.SysPopulationSimpleDictDTO; |
|
|
|
import com.elink.esua.epdc.dto.house.result.EpdcPopulationErrorResultDTO; |
|
|
|
import com.elink.esua.epdc.dto.personroom.EpidemicBuildingUnitDTO; |
|
|
|
import com.elink.esua.epdc.dto.personroom.EpidemicUnitOwnerDTO; |
|
|
|
import com.elink.esua.epdc.dto.personroom.result.EpidemicBuildingUnitDetailResultDTO; |
|
|
|
import com.elink.esua.epdc.dto.personroom.result.EpidemicPlotBuildingResultDTO; |
|
|
|
import com.elink.esua.epdc.dto.personroom.result.EpidemicUnitInfoResultDTO; |
|
|
|
import com.elink.esua.epdc.vaccine.epidemic.entity.EpidemicUserErrorEntity; |
|
|
|
import com.elink.esua.epdc.vaccine.epidemic.entity.EpidemicUserInfoEntity; |
|
|
|
import com.elink.esua.epdc.vaccine.epidemic.service.EpidemicUserErrorService; |
|
|
|
import com.elink.esua.epdc.vaccine.epidemic.service.EpidemicUserInfoService; |
|
|
|
import com.elink.esua.epdc.vaccine.feign.VimAdminFeignClient; |
|
|
|
import com.elink.esua.epdc.vaccine.house.excel.BaseResidentInformationUpdateExcel; |
|
|
|
import com.elink.esua.epdc.vaccine.personroom.dao.EpidemicBuildingUnitDao; |
|
|
|
import com.elink.esua.epdc.vaccine.personroom.entity.EpidemicBuildingUnitEntity; |
|
|
|
import com.elink.esua.epdc.vaccine.personroom.entity.EpidemicUnitOwnerEntity; |
|
|
|
import com.elink.esua.epdc.vaccine.personroom.redis.EpidemicBuildingUnitRedis; |
|
|
|
import com.elink.esua.epdc.vaccine.personroom.service.EpidemicBuildingUnitService; |
|
|
|
import com.elink.esua.epdc.vaccine.personroom.service.EpidemicPlotBuildingService; |
|
|
|
import com.elink.esua.epdc.vaccine.personroom.service.EpidemicUnitOwnerService; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
import java.util.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
@ -59,6 +76,18 @@ public class EpidemicBuildingUnitServiceImpl extends CrudServiceImpl<EpidemicBui |
|
|
|
@Autowired |
|
|
|
private EpidemicUnitOwnerService epidemicUnitOwnerService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private EpidemicUserErrorService epidemicUserErrorService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private EpidemicUserInfoService epidemicUserInfoService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private EpidemicPlotBuildingService epidemicPlotBuildingService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private VimAdminFeignClient adminVimFeignClient; |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageData<EpidemicBuildingUnitDTO> page(Map<String, Object> params) { |
|
|
|
IPage<EpidemicBuildingUnitDTO> page = getPage(params); |
|
|
@ -161,7 +190,7 @@ public class EpidemicBuildingUnitServiceImpl extends CrudServiceImpl<EpidemicBui |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<EpidemicUnitInfoResultDTO> listAllUnitInfo(){ |
|
|
|
public List<EpidemicUnitInfoResultDTO> listAllUnitInfo() { |
|
|
|
return baseDao.listAllUnitInfo(); |
|
|
|
} |
|
|
|
|
|
|
@ -198,6 +227,65 @@ public class EpidemicBuildingUnitServiceImpl extends CrudServiceImpl<EpidemicBui |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public Result importEpidemicHouse(MultipartFile file, String gridId) { |
|
|
|
ParentAndAllDeptDTO parentAndAllDeptDTO = null; |
|
|
|
if (StringUtils.isNotBlank(gridId)) { |
|
|
|
Result<ParentAndAllDeptDTO> parentAndAllDept = adminVimFeignClient.getParentAndAllDept(gridId); |
|
|
|
if (!parentAndAllDept.success() || parentAndAllDept.getData() == null) { |
|
|
|
return new Result().error("获取归属部门信息失败"); |
|
|
|
} |
|
|
|
parentAndAllDeptDTO = parentAndAllDept.getData(); |
|
|
|
} |
|
|
|
|
|
|
|
File f = StreamUtils.conversionFile(file); |
|
|
|
ImportParams importParams = new ImportParams(); |
|
|
|
try { |
|
|
|
//户主身份证和插入的ID,便于保存居住人信息时匹配户主信息
|
|
|
|
Map<String, String> populationIdNoAndIdMap = new HashMap<>(); |
|
|
|
//居民导入数据
|
|
|
|
List<BaseResidentInformationUpdateExcel> baseResidentInformationUpdateExcels; |
|
|
|
// 处理错误数据使用
|
|
|
|
List<BaseResidentInformationUpdateExcel> baseResidentInformationUpdateExcelsNew; |
|
|
|
//居民导入数据异常提示
|
|
|
|
List<EpdcPopulationErrorResultDTO> epdcPopulationErrorResultDTOS; |
|
|
|
|
|
|
|
// 存储批量插入实体
|
|
|
|
List<BaseResidentInformationUpdateExcel> addList = new ArrayList<>(); |
|
|
|
// 存储错误数据批量插入实体
|
|
|
|
List<BaseResidentInformationUpdateExcel> addErrorList = new ArrayList<>(); |
|
|
|
|
|
|
|
// 检验和新增居住人信息
|
|
|
|
baseResidentInformationUpdateExcels = ExcelImportUtil.importExcel(f, BaseResidentInformationUpdateExcel.class, importParams); |
|
|
|
baseResidentInformationUpdateExcelsNew = ExcelImportUtil.importExcel(f, BaseResidentInformationUpdateExcel.class, importParams); |
|
|
|
// 校验数据
|
|
|
|
epdcPopulationErrorResultDTOS = this.checkResidentsExcel(baseResidentInformationUpdateExcels, baseResidentInformationUpdateExcelsNew, null, addList, addErrorList); |
|
|
|
|
|
|
|
// 保存居住人信息
|
|
|
|
if (addList.size() > 0) { |
|
|
|
saveResidentList(addList, parentAndAllDeptDTO, populationIdNoAndIdMap); |
|
|
|
} |
|
|
|
// 批量插入错误数据
|
|
|
|
List<EpidemicUserErrorEntity> insertErrorList = ConvertUtils.sourceToTarget(addErrorList, EpidemicUserErrorEntity.class); |
|
|
|
Integer insertNo = epidemicUserErrorService.getMaxInsertNo(); |
|
|
|
for (EpidemicUserErrorEntity entity : insertErrorList) { |
|
|
|
entity.setInsertNo(insertNo); |
|
|
|
} |
|
|
|
epidemicUserErrorService.insertBatch(insertErrorList); |
|
|
|
|
|
|
|
// 校验居住人信息
|
|
|
|
if (epdcPopulationErrorResultDTOS.size() > 0) { |
|
|
|
return new Result().ok(epdcPopulationErrorResultDTOS); |
|
|
|
} |
|
|
|
|
|
|
|
} catch (Exception e1) { |
|
|
|
e1.printStackTrace(); |
|
|
|
throw new RenException("导入失败:请检查导入模板或导入数据!"); |
|
|
|
} |
|
|
|
return new Result(); |
|
|
|
} |
|
|
|
|
|
|
|
private void saveOrUpdateOwners(List<EpidemicUnitOwnerDTO> owners, Long unitId) { |
|
|
|
List<EpidemicUnitOwnerDTO> dtoList = owners.stream().filter(item -> StringUtils.isNotBlank(item.getIdCard())).collect(Collectors.toList()); |
|
|
|
List<EpidemicUnitOwnerEntity> list = ConvertUtils.sourceToTarget(dtoList, EpidemicUnitOwnerEntity.class); |
|
|
@ -208,4 +296,185 @@ public class EpidemicBuildingUnitServiceImpl extends CrudServiceImpl<EpidemicBui |
|
|
|
epidemicUnitOwnerService.insertBatch(list); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @return java.util.List<com.elink.esua.epdc.dto.epdc.result.EpdcPopulationErrorResultDTO> |
|
|
|
* @Description 校验居住人数据 |
|
|
|
* @Author songyunpeng |
|
|
|
* @Date 2020/8/31 |
|
|
|
* @Param [basePopulationInformationExcels, basePopulationInformationExcels1] |
|
|
|
**/ |
|
|
|
private List<EpdcPopulationErrorResultDTO> checkResidentsExcel(List<BaseResidentInformationUpdateExcel> basePopulationInformationExcels, |
|
|
|
List<BaseResidentInformationUpdateExcel> basePopulationInformationExcelsNew, |
|
|
|
List<SysPopulationSimpleDictDTO> sysPopulationSimpleDictDTOS, |
|
|
|
List<BaseResidentInformationUpdateExcel> addList, |
|
|
|
List<BaseResidentInformationUpdateExcel> addErrorList) { |
|
|
|
// 不匹配信息
|
|
|
|
List<EpdcPopulationErrorResultDTO> errorLineInfoList = new ArrayList<>(); |
|
|
|
EpdcPopulationErrorResultDTO errorLineInfoDto; |
|
|
|
BaseResidentInformationUpdateExcel errorBaseUserInfo; |
|
|
|
for (int i = 0; i < basePopulationInformationExcels.size(); i++) { |
|
|
|
String errorInfo = ""; |
|
|
|
BaseResidentInformationUpdateExcel baseResidentInformationUpdateExcel = basePopulationInformationExcels.get(i); |
|
|
|
errorBaseUserInfo = basePopulationInformationExcelsNew.get(i); |
|
|
|
String selfIdentityNo = baseResidentInformationUpdateExcel.getSelfIdentityNo() == null ? null : baseResidentInformationUpdateExcel.getSelfIdentityNo().trim(); |
|
|
|
String plot = baseResidentInformationUpdateExcel.getPlot() == null ? null : baseResidentInformationUpdateExcel.getPlot().trim(); |
|
|
|
String buildingNo = baseResidentInformationUpdateExcel.getBuildingNo() == null ? null : baseResidentInformationUpdateExcel.getBuildingNo().trim(); |
|
|
|
String unit = baseResidentInformationUpdateExcel.getUnit() == null ? null : baseResidentInformationUpdateExcel.getUnit().trim(); |
|
|
|
String roomNo = baseResidentInformationUpdateExcel.getRoomNo() == null ? null : baseResidentInformationUpdateExcel.getRoomNo().trim(); |
|
|
|
|
|
|
|
if (StringUtils.isBlank(selfIdentityNo)) { |
|
|
|
errorInfo += "本人身份证号为空;"; |
|
|
|
} else if (StringUtils.isNotBlank(selfIdentityNo)) { |
|
|
|
String result = IdentityNoUtils.IdentityNoVerification(selfIdentityNo); |
|
|
|
if (result != null) { |
|
|
|
errorInfo += "本人身份证号码有误;"; |
|
|
|
} else { |
|
|
|
baseResidentInformationUpdateExcel.setGender(IdentityNoUtils.getSex(selfIdentityNo)); |
|
|
|
baseResidentInformationUpdateExcel.setAge(IdentityNoUtils.getAge(selfIdentityNo)); |
|
|
|
baseResidentInformationUpdateExcel.setBirthday(IdentityNoUtils.getBirthday(selfIdentityNo)); |
|
|
|
baseResidentInformationUpdateExcel.setSelfIdentityNo(selfIdentityNo); |
|
|
|
} |
|
|
|
} |
|
|
|
if (StringUtils.isBlank(plot)||StringUtils.isBlank(buildingNo)||StringUtils.isBlank(unit)||StringUtils.isBlank(roomNo)) { |
|
|
|
errorInfo += "房屋信息不完整"; |
|
|
|
} |
|
|
|
|
|
|
|
//如果有错误信息
|
|
|
|
if (StringUtils.isNotBlank(errorInfo)) { |
|
|
|
errorLineInfoDto = new EpdcPopulationErrorResultDTO(); |
|
|
|
errorLineInfoDto.setErrorInfo(errorInfo); |
|
|
|
errorLineInfoDto.setErrorLine((i + 2) + ""); |
|
|
|
errorLineInfoList.add(errorLineInfoDto); |
|
|
|
|
|
|
|
// 设置错误信息
|
|
|
|
errorBaseUserInfo.setErrorInfo(errorInfo); |
|
|
|
// 加入错误列表
|
|
|
|
addErrorList.add(errorBaseUserInfo); |
|
|
|
|
|
|
|
} else { |
|
|
|
addList.add(baseResidentInformationUpdateExcel); |
|
|
|
} |
|
|
|
} |
|
|
|
return errorLineInfoList; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @return void |
|
|
|
* @Description 校验完成后插入居民信息 |
|
|
|
* @Author songyunpeng |
|
|
|
* @Date 2020/8/31 |
|
|
|
* @Param [baseResidentInformationExcels] |
|
|
|
**/ |
|
|
|
private void saveResidentList(List<BaseResidentInformationUpdateExcel> baseResidentInformationExcels, ParentAndAllDeptDTO parentAndAllDeptDTO, Map<String, String> populationIdNoAndIdMap) { |
|
|
|
|
|
|
|
List<EpidemicUserInfoEntity> addList = new ArrayList<>(); |
|
|
|
List<EpidemicUserInfoEntity> updateList = new ArrayList<>(); |
|
|
|
List<EpidemicUserInfoEntity> checkList = epidemicUserInfoService.listByIdCards(baseResidentInformationExcels.stream().map(BaseResidentInformationUpdateExcel::getSelfIdentityNo).collect(Collectors.toList())); |
|
|
|
|
|
|
|
for (BaseResidentInformationUpdateExcel baseResidentInformationExcel : baseResidentInformationExcels) { |
|
|
|
//插入居民信息
|
|
|
|
EpidemicUserInfoEntity epidemicUserInfoEntity = ConvertUtils.sourceToTarget(baseResidentInformationExcel, EpidemicUserInfoEntity.class); |
|
|
|
epidemicUserInfoEntity.setIdCard(baseResidentInformationExcel.getSelfIdentityNo()); |
|
|
|
|
|
|
|
// 已存在的居民信息进行更新,否则进行插入操作
|
|
|
|
Optional<EpidemicUserInfoEntity> optional = checkList.stream().filter(item -> item.getIdCard().equals(baseResidentInformationExcel.getSelfIdentityNo())).findFirst(); |
|
|
|
if (!optional.isPresent()) { |
|
|
|
addList.add(epidemicUserInfoEntity); |
|
|
|
} else { |
|
|
|
EpidemicUserInfoEntity check = optional.get(); |
|
|
|
check.setPlot(epidemicUserInfoEntity.getPlot()); |
|
|
|
check.setBuildingNo(epidemicUserInfoEntity.getBuildingNo()); |
|
|
|
check.setUnit(epidemicUserInfoEntity.getUnit()); |
|
|
|
check.setRoomNo(epidemicUserInfoEntity.getRoomNo()); |
|
|
|
check.setRelation(epidemicUserInfoEntity.getRelation()); |
|
|
|
updateList.add(check); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 改为批量插入和批量按ID更新
|
|
|
|
if (!addList.isEmpty()) { |
|
|
|
epidemicUserInfoService.insertBatch(addList); |
|
|
|
} |
|
|
|
if (!updateList.isEmpty()) { |
|
|
|
epidemicUserInfoService.updateBatchById(updateList); |
|
|
|
} |
|
|
|
|
|
|
|
// 补充人房关系
|
|
|
|
List<EpidemicPlotBuildingResultDTO> buildingList = epidemicPlotBuildingService.listAllBuildingInfo(); |
|
|
|
List<EpidemicUnitInfoResultDTO> unitList = listAllUnitInfo(); |
|
|
|
List<EpidemicUnitOwnerEntity> addOwner = new ArrayList<>(); |
|
|
|
List<EpidemicBuildingUnitEntity> addUnit = new ArrayList<>(); |
|
|
|
addList.forEach(item -> { |
|
|
|
// 只有信息完整的才进行匹配
|
|
|
|
if (StringUtils.isNotBlank(item.getPlot()) && StringUtils.isNotBlank(item.getBuildingNo()) && StringUtils.isNotBlank(item.getUnit())) { |
|
|
|
Optional<EpidemicUnitInfoResultDTO> unitOptional = unitList.stream().filter(unit -> unit.getPlotName().equals(item.getPlot()) && unit.getBuildingName().equals(item.getBuildingNo()) && unit.getUnit().equals(item.getUnit())).findFirst(); |
|
|
|
if (unitOptional.isPresent()) { |
|
|
|
EpidemicUnitOwnerEntity entity = new EpidemicUnitOwnerEntity(); |
|
|
|
entity.setIdCard(item.getIdCard()); |
|
|
|
entity.setUnitId(unitOptional.get().getUnitId()); |
|
|
|
entity.setOwnerName(item.getUserName()); |
|
|
|
entity.setMobile(item.getMobile()); |
|
|
|
addOwner.add(entity); |
|
|
|
} else { |
|
|
|
Optional<EpidemicPlotBuildingResultDTO> buildingOptional = buildingList.stream().filter(build -> build.getPlotName().equals(item.getPlot()) && build.getBuildingName().equals(item.getBuildingNo())).findFirst(); |
|
|
|
if (buildingOptional.isPresent()) { |
|
|
|
EpidemicBuildingUnitEntity unitEntity = new EpidemicBuildingUnitEntity(); |
|
|
|
unitEntity.setBuildingId(buildingOptional.get().getId()); |
|
|
|
unitEntity.setUnit(item.getUnit()); |
|
|
|
unitEntity.setRoomNo(item.getRoomNo()); |
|
|
|
unitEntity.setIdCard(item.getIdCard()); |
|
|
|
unitEntity.setOwnerName(item.getUserName()); |
|
|
|
unitEntity.setMobile(item.getMobile()); |
|
|
|
unitEntity.setRoomType(NumConstant.ONE_STR); |
|
|
|
addUnit.add(unitEntity); |
|
|
|
EpidemicUnitOwnerEntity entity = new EpidemicUnitOwnerEntity(); |
|
|
|
entity.setIdCard(item.getIdCard()); |
|
|
|
entity.setUnitId(unitEntity.getId()); |
|
|
|
entity.setOwnerName(item.getUserName()); |
|
|
|
entity.setMobile(item.getMobile()); |
|
|
|
addOwner.add(entity); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
updateList.forEach(item -> { |
|
|
|
// 只有信息完整的才进行匹配
|
|
|
|
if (StringUtils.isNotBlank(item.getPlot()) && StringUtils.isNotBlank(item.getBuildingNo()) && StringUtils.isNotBlank(item.getUnit())) { |
|
|
|
Optional<EpidemicUnitInfoResultDTO> unitOptional = unitList.stream().filter(unit -> unit.getPlotName().equals(item.getPlot()) && unit.getBuildingName().equals(item.getBuildingNo()) && unit.getUnit().equals(item.getUnit())).findFirst(); |
|
|
|
if (unitOptional.isPresent()) { |
|
|
|
EpidemicUnitOwnerEntity entity = new EpidemicUnitOwnerEntity(); |
|
|
|
entity.setIdCard(item.getIdCard()); |
|
|
|
entity.setUnitId(unitOptional.get().getUnitId()); |
|
|
|
entity.setOwnerName(item.getUserName()); |
|
|
|
entity.setMobile(item.getMobile()); |
|
|
|
// todo del?
|
|
|
|
addOwner.add(entity); |
|
|
|
} else { |
|
|
|
Optional<EpidemicPlotBuildingResultDTO> buildingOptional = buildingList.stream().filter(build -> build.getPlotName().equals(item.getPlot()) && build.getBuildingName().equals(item.getBuildingNo())).findFirst(); |
|
|
|
if (buildingOptional.isPresent()) { |
|
|
|
EpidemicBuildingUnitEntity unitEntity = new EpidemicBuildingUnitEntity(); |
|
|
|
unitEntity.setBuildingId(buildingOptional.get().getId()); |
|
|
|
unitEntity.setUnit(item.getUnit()); |
|
|
|
unitEntity.setRoomNo(item.getRoomNo()); |
|
|
|
unitEntity.setIdCard(item.getIdCard()); |
|
|
|
unitEntity.setOwnerName(item.getUserName()); |
|
|
|
unitEntity.setMobile(item.getMobile()); |
|
|
|
unitEntity.setRoomType(NumConstant.ONE_STR); |
|
|
|
addUnit.add(unitEntity); |
|
|
|
EpidemicUnitOwnerEntity entity = new EpidemicUnitOwnerEntity(); |
|
|
|
entity.setIdCard(item.getIdCard()); |
|
|
|
entity.setUnitId(unitEntity.getId()); |
|
|
|
entity.setOwnerName(item.getUserName()); |
|
|
|
entity.setMobile(item.getMobile()); |
|
|
|
// todo del?
|
|
|
|
addOwner.add(entity); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
insertBatch(addUnit); |
|
|
|
epidemicUnitOwnerService.insertBatch(addOwner); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|