Browse Source

完善导入更新用户信息逻辑

feature/yujt_vim
zhangyuan 5 years ago
parent
commit
fe192f32e4
  1. 18
      epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dao/EpidemicUserInfoDao.java
  2. 3
      epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dto/EpidemicUserInfoDTO.java
  3. 4
      epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/service/impl/EpidemicUserInfoServiceImpl.java
  4. 5
      epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/dto/result/VaccineDto.java
  5. 86
      epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/service/impl/VaccinationInfoServiceImpl.java
  6. 29
      epdc-cloud-vim-yushan/src/main/resources/mapper/epidemic/EpidemicUserInfoDao.xml
  7. 3
      epdc-cloud-vim-yushan/src/main/resources/mapper/vim/VaccineCompanyDao.xml

18
epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dao/EpidemicUserInfoDao.java

@ -70,6 +70,15 @@ public interface EpidemicUserInfoDao extends BaseDao<EpidemicUserInfoEntity> {
*/ */
EpidemicUserInfoEntity selectByIdCard(@Param("id") Long id); EpidemicUserInfoEntity selectByIdCard(@Param("id") Long id);
/**
* 根据身份证号查询基础信息表信息
*
* @return com.elink.esua.epdc.vaccine.epidemic.entity.EpidemicUserInfoEntity
* @author wk
* @date 2021-01-27 16:22
*/
List<EpidemicUserInfoDTO> selectByIdCards(@Param("idCards") List<String> idCards);
/** /**
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.commons.tools.page.PageData < com.elink.esua.epdc.vaccine.epidemic.dto.result.EpidemicPageResultDTO>> * @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.commons.tools.page.PageData < com.elink.esua.epdc.vaccine.epidemic.dto.result.EpidemicPageResultDTO>>
* @describe: 接种信息列表 * @describe: 接种信息列表
@ -108,4 +117,13 @@ public interface EpidemicUserInfoDao extends BaseDao<EpidemicUserInfoEntity> {
* @date 2021/4/30 10:06 * @date 2021/4/30 10:06
*/ */
EpidemicUserInfoEntity checkCompleteInfo(@Param("idCard") Long idCard, @Param("vaccinationState") String vaccinationState); EpidemicUserInfoEntity checkCompleteInfo(@Param("idCard") Long idCard, @Param("vaccinationState") String vaccinationState);
/**
* 查询全部人员信息
*
* @return com.elink.esua.epdc.vaccine.epidemic.dto.result.VaccinationInfoResultDTO
* @author zhy
* @date 2021/4/30 10:06
*/
List<EpidemicUserInfoEntity> selectAllUserInfo();
} }

3
epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dto/EpidemicUserInfoDTO.java

@ -2,6 +2,7 @@ package com.elink.esua.epdc.vaccine.epidemic.dto;
// import io.swagger.annotations.ApiModel; // import io.swagger.annotations.ApiModel;
// import io.swagger.annotations.ApiModelProperty; // import io.swagger.annotations.ApiModelProperty;
import com.google.common.net.InternetDomainName;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
@ -63,4 +64,6 @@ public class EpidemicUserInfoDTO implements Serializable {
// @ApiModelProperty(value = "是否接种") // @ApiModelProperty(value = "是否接种")
private String isInoculate; private String isInoculate;
private Integer maxDose;
} }

4
epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/service/impl/EpidemicUserInfoServiceImpl.java

@ -374,11 +374,13 @@ public class EpidemicUserInfoServiceImpl extends CrudServiceImpl<EpidemicUserInf
} else { } else {
// 如果是删除操作 // 如果是删除操作
// 检查还有没有接种记录 // 检查还有没有接种记录
int dose =dto.getDose();
dto.setDose(null);
int vaccinationNum = vaccinationInfoService.checkVaccination(dto).size(); int vaccinationNum = vaccinationInfoService.checkVaccination(dto).size();
if (vaccinationNum > 0) { if (vaccinationNum > 0) {
// 如果还有接种记录那么就是接种中 // 如果还有接种记录那么就是接种中
// 虽然更新接种剂次为最大值-1,但实际上不一定能查到最大值-1条数据,数据不对应时需要补录 // 虽然更新接种剂次为最大值-1,但实际上不一定能查到最大值-1条数据,数据不对应时需要补录
userInfoDTO.setVaccinationNum(dto.getDose() - 1); userInfoDTO.setVaccinationNum(dose - 1);
userInfoDTO.setVaccinationState(1); userInfoDTO.setVaccinationState(1);
} else { } else {
// 如果库里没有接种记录了,直接归为未接种,数据需要补录 // 如果库里没有接种记录了,直接归为未接种,数据需要补录

5
epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/dto/result/VaccineDto.java

@ -14,4 +14,9 @@ import lombok.ToString;
public class VaccineDto { public class VaccineDto {
private Long value; private Long value;
private String label; private String label;
/**
* 疫苗信息导入使用字段
*/
private Integer maxDose;
} }

86
epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/service/impl/VaccinationInfoServiceImpl.java

@ -9,6 +9,9 @@ import com.elink.esua.epdc.commons.tools.utils.FileUtils;
import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.vaccine.common.base.BaseVimCurdServiceImpl; import com.elink.esua.epdc.vaccine.common.base.BaseVimCurdServiceImpl;
import com.elink.esua.epdc.vaccine.epidemic.constant.StrConstant; import com.elink.esua.epdc.vaccine.epidemic.constant.StrConstant;
import com.elink.esua.epdc.vaccine.epidemic.dao.EpidemicUserInfoDao;
import com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserInfoDTO;
import com.elink.esua.epdc.vaccine.epidemic.entity.EpidemicUserInfoEntity;
import com.elink.esua.epdc.vaccine.epidemic.service.EpidemicUserInfoService; import com.elink.esua.epdc.vaccine.epidemic.service.EpidemicUserInfoService;
import com.elink.esua.epdc.vaccine.epidemic.utils.StreamUtils; import com.elink.esua.epdc.vaccine.epidemic.utils.StreamUtils;
import com.elink.esua.epdc.vaccine.vim.dao.VaccinationErrorDao; import com.elink.esua.epdc.vaccine.vim.dao.VaccinationErrorDao;
@ -29,6 +32,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -55,6 +59,8 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
private VaccinationErrorService vaccinationErrorService; private VaccinationErrorService vaccinationErrorService;
@Resource @Resource
private VaccinationErrorDao vaccinationErrorDao; private VaccinationErrorDao vaccinationErrorDao;
@Resource
private EpidemicUserInfoDao epidemicUserInfoDao;
@Override @Override
public QueryWrapper<VaccinationInfoEntity> getWrapper(Map<String, Object> params) { public QueryWrapper<VaccinationInfoEntity> getWrapper(Map<String, Object> params) {
@ -85,10 +91,13 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
@Override @Override
public boolean beforeDelete(VaccinationInfoDTO dto) { public boolean beforeDelete(VaccinationInfoDTO dto) {
int dose = dto.getDose(); VaccinationInfoDTO checkDto = new VaccinationInfoDTO();
checkDto.setIdentityNo(dto.getIdentityNo());
// 根据身份证查询处该人员的所有接种记录 // 根据身份证查询处该人员的所有接种记录
dto.setDose(null); List<VaccinationInfoEntity> checkInfoList = checkVaccination(checkDto);
List<VaccinationInfoEntity> checkInfoList = checkVaccination(dto);
int dose = dto.getDose();
int maxDose = checkInfoList.stream().collect(Collectors.summarizingInt(VaccinationInfoEntity::getDose)).getMax(); int maxDose = checkInfoList.stream().collect(Collectors.summarizingInt(VaccinationInfoEntity::getDose)).getMax();
return maxDose <= dose; return maxDose <= dose;
} }
@ -166,15 +175,20 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
List<VaccinationInfoAllExcel> addList = new ArrayList<>(); List<VaccinationInfoAllExcel> addList = new ArrayList<>();
// 存储错误数据批量插入实体 // 存储错误数据批量插入实体
List<VaccinationInfoAllExcel> addErrorList = new ArrayList<>(); List<VaccinationInfoAllExcel> addErrorList = new ArrayList<>();
// 记录单人最高剂次
Map<String, EpidemicUserInfoDTO> maxDoseMap = new HashMap<>();
log.info("准备进入Excel数据导入循环"); log.info("准备进入Excel数据导入循环");
List<VaccineDto> vaccineList = vaccineTypeService.vaccineList(); List<VaccineDto> vaccineList = vaccineTypeService.vaccineList();
List<VaccineDto> companyList = vaccineCompanyService.compantyList(); List<VaccineDto> companyList = vaccineCompanyService.compantyList();
List<VaccineDto> siteList = vaccinationSiteService.getSiteList(); List<VaccineDto> siteList = vaccinationSiteService.getSiteList();
List<EpidemicUserInfoEntity> allUserList = epidemicUserInfoDao.selectAllUserInfo();
List<String> allUserIdCards = allUserList.stream().map(EpidemicUserInfoEntity::getIdCard).collect(Collectors.toList());
VaccinationInfoAllExcel epidemicReportUserInfoAllExcel; VaccinationInfoAllExcel epidemicReportUserInfoAllExcel;
VaccinationInfoDTO vaccinationInfoDTO; VaccinationInfoDTO vaccinationInfoDTO;
String idCard; String idCard;
Integer maxDose;
for (int i = 0; i < recordList.size(); i++) { for (int i = 0; i < recordList.size(); i++) {
epidemicReportUserInfoAllExcel = recordList.get(i); epidemicReportUserInfoAllExcel = recordList.get(i);
vaccinationInfoDTO = ConvertUtils.sourceToTarget(epidemicReportUserInfoAllExcel, VaccinationInfoDTO.class); vaccinationInfoDTO = ConvertUtils.sourceToTarget(epidemicReportUserInfoAllExcel, VaccinationInfoDTO.class);
@ -187,16 +201,14 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
} }
idCard = epidemicReportUserInfoAllExcel.getIdentityNo(); idCard = epidemicReportUserInfoAllExcel.getIdentityNo();
// 校验excel中身份证号是否存在重复
if (checkIdCardList.contains(idCard)) { // 人员校验
if (!allUserIdCards.contains(idCard)) {
checkInfo += "第" + (i + 1) + "条、"; checkInfo += "第" + (i + 1) + "条、";
epidemicReportUserInfoAllExcel.setErrorInfo("身份证号存在重复"); epidemicReportUserInfoAllExcel.setErrorInfo("查无此人");
addErrorList.add(epidemicReportUserInfoAllExcel); addErrorList.add(epidemicReportUserInfoAllExcel);
continue; continue;
} }
if (!StringUtils.isBlank(idCard)) {
checkIdCardList.add(idCard);
}
// 校验身份证号是否合法 // 校验身份证号是否合法
if (StringUtils.isBlank(idCard) || idCard.length() != 18) { if (StringUtils.isBlank(idCard) || idCard.length() != 18) {
@ -231,6 +243,7 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
List<VaccineDto> company = companyList.stream().filter(item -> companyName.equals(item.getLabel())).collect(Collectors.toList()); List<VaccineDto> company = companyList.stream().filter(item -> companyName.equals(item.getLabel())).collect(Collectors.toList());
if (company.size() > 0) { if (company.size() > 0) {
epidemicReportUserInfoAllExcel.setVaccineId(company.get(0).getValue()); epidemicReportUserInfoAllExcel.setVaccineId(company.get(0).getValue());
maxDose = company.get(0).getMaxDose();
} else { } else {
checkInfo += "第" + (i + 1) + "条、"; checkInfo += "第" + (i + 1) + "条、";
epidemicReportUserInfoAllExcel.setErrorInfo("不存在的疫苗生产商"); epidemicReportUserInfoAllExcel.setErrorInfo("不存在的疫苗生产商");
@ -263,6 +276,20 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
continue; continue;
} }
// map用来记录身份证号的最大剂次
if (maxDoseMap.containsKey(epidemicReportUserInfoAllExcel.getIdentityNo())) {
if (maxDoseMap.get(epidemicReportUserInfoAllExcel.getIdentityNo()).getVaccinationNum() < epidemicReportUserInfoAllExcel.getDose()) {
EpidemicUserInfoDTO dto = new EpidemicUserInfoDTO();
dto.setVaccinationNum(epidemicReportUserInfoAllExcel.getDose());
dto.setMaxDose(maxDose);
maxDoseMap.put(epidemicReportUserInfoAllExcel.getIdentityNo(), dto);
}
} else {
EpidemicUserInfoDTO dto = new EpidemicUserInfoDTO();
dto.setVaccinationNum(epidemicReportUserInfoAllExcel.getDose());
dto.setMaxDose(maxDose);
maxDoseMap.put(epidemicReportUserInfoAllExcel.getIdentityNo(), dto);
}
addList.add(epidemicReportUserInfoAllExcel); addList.add(epidemicReportUserInfoAllExcel);
@ -272,20 +299,55 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
} }
} }
log.info("循环结束,进入人员数据处理");
// 对规范数据,根据身份证号进行逻辑删除 // 对规范数据,根据身份证号进行逻辑删除
if (deleteIdCardArr.size() > 0) { if (deleteIdCardArr.size() > 0) {
baseDao.deleteDistinctDose(deleteIdCardArr); baseDao.deleteDistinctDose(deleteIdCardArr);
} }
List<String> idCards = new ArrayList<>(maxDoseMap.keySet());
List<EpidemicUserInfoDTO> updateList = new ArrayList<>();
if (!idCards.isEmpty()) {
List<EpidemicUserInfoDTO> existUserList = epidemicUserInfoDao.selectByIdCards(idCards);
existUserList.forEach(item -> {
EpidemicUserInfoDTO updateDto = new EpidemicUserInfoDTO();
if (item.getVaccinationState() == 2) {
// 已经接种完的不需要处理
} else {
if (item.getVaccinationNum() > maxDoseMap.get(item.getIdCard()).getVaccinationNum()) {
// excel的剂次数据小于数据库时不需要处理
} else {
updateDto.setIdCard(item.getIdCard());
updateDto.setVaccinationNum(maxDoseMap.get(item.getIdCard()).getVaccinationNum());
if (maxDoseMap.get(item.getIdCard()).getVaccinationNum().equals(maxDoseMap.get(item.getIdCard()).getMaxDose())) {
// 如果最大剂次同于excel的剂次就是接种完成,否则是接种中
updateDto.setVaccinationState(2);
} else {
updateDto.setVaccinationState(1);
}
updateList.add(updateDto);
}
}
});
}
log.info("需要更新的人员信息数量为:" + updateList.size());
// 插入数据----需改为批量插入 // 插入数据----需改为批量插入
List<VaccinationInfoEntity> insertUserList = new ArrayList<>(); List<VaccinationInfoEntity> insertUserList = new ArrayList<>();
VaccinationInfoEntity userEntity; VaccinationInfoEntity userEntity;
for (int k = 0; k < addList.size(); k++) { for (VaccinationInfoAllExcel vaccinationInfoAllExcel : addList) {
userEntity = ConvertUtils.sourceToTarget(addList.get(k), VaccinationInfoEntity.class); userEntity = ConvertUtils.sourceToTarget(vaccinationInfoAllExcel, VaccinationInfoEntity.class);
insertUserList.add(userEntity); insertUserList.add(userEntity);
} }
// 更新人员的接种信息
for (EpidemicUserInfoDTO dto : updateList) {
epidemicUserInfoDao.updateVaccinationInfo(dto);
}
insertBatch(insertUserList); insertBatch(insertUserList);
// 批量插入错误数据 // 批量插入错误数据
List<VaccinationErrorEntity> insertErrorList = ConvertUtils.sourceToTarget(addErrorList, VaccinationErrorEntity.class); List<VaccinationErrorEntity> insertErrorList = ConvertUtils.sourceToTarget(addErrorList, VaccinationErrorEntity.class);

29
epdc-cloud-vim-yushan/src/main/resources/mapper/epidemic/EpidemicUserInfoDao.xml

@ -269,6 +269,25 @@
DEL_FLAG = 0 DEL_FLAG = 0
AND ID_CARD = ( SELECT ID_CARD FROM epidemic_user_inout_record WHERE DEL_FLAG = 0 AND ID = #{id} ) AND ID_CARD = ( SELECT ID_CARD FROM epidemic_user_inout_record WHERE DEL_FLAG = 0 AND ID = #{id} )
</select> </select>
<select id="selectByIdCards" resultType="com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserInfoDTO">
SELECT
ui.ID,
ui.ID_CARD,
ui.VACCINATION_NUM,
ui.VACCINATION_STATE,
vc.MAX_DOSE
FROM
epidemic_user_info ui
LEFT JOIN vaccination_info vi ON vi.IDENTITY_NO = ui.ID_CARD
AND vi.DEL_FLAG = '0'
LEFT JOIN vaccine_company vc ON vc.id = vi.COMPANY_ID
AND vi.DEL_FLAG = '0'
WHERE ui.DEL_FLAG = '0'
AND ui.ID_CARD IN
<foreach collection="idCards" index="index" item="idCard" open="(" separator="," close=")">
#{idCard}
</foreach>
</select>
<select id="getEpidemicPage" resultType="com.elink.esua.epdc.vaccine.epidemic.dto.result.EpidemicPageResultDTO"> <select id="getEpidemicPage" resultType="com.elink.esua.epdc.vaccine.epidemic.dto.result.EpidemicPageResultDTO">
select i.id as infoId, select i.id as infoId,
r.id as inoutId, r.id as inoutId,
@ -371,4 +390,14 @@
AND ID_CARD = #{idCard} AND ID_CARD = #{idCard}
LIMIT 1 LIMIT 1
</select> </select>
<select id="selectAllUserInfo" resultType="com.elink.esua.epdc.vaccine.epidemic.entity.EpidemicUserInfoEntity">
SELECT
ui.id,
ui.ID_CARD
FROM
epidemic_user_info ui
WHERE
ui.DEL_FLAG = '0'
</select>
</mapper> </mapper>

3
epdc-cloud-vim-yushan/src/main/resources/mapper/vim/VaccineCompanyDao.xml

@ -6,7 +6,8 @@
<select id="selectCompantyList" resultType="com.elink.esua.epdc.vaccine.vim.dto.result.VaccineDto"> <select id="selectCompantyList" resultType="com.elink.esua.epdc.vaccine.vim.dto.result.VaccineDto">
SELECT SELECT
vc.ID 'value', vc.ID 'value',
vc.COMPANY_NAME label vc.COMPANY_NAME label,
vc.MAX_DOSE
FROM FROM
vaccine_company vc vaccine_company vc
WHERE WHERE

Loading…
Cancel
Save