diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dao/EpidemicUserInfoDao.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dao/EpidemicUserInfoDao.java index b5becd2..7db2287 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dao/EpidemicUserInfoDao.java +++ b/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 selectByIdCard(@Param("id") Long id); + /** + * 根据身份证号查询基础信息表信息 + * + * @return com.elink.esua.epdc.vaccine.epidemic.entity.EpidemicUserInfoEntity + * @author wk + * @date 2021-01-27 16:22 + */ + List selectByIdCards(@Param("idCards") List idCards); + /** * @return com.elink.esua.epdc.commons.tools.utils.Result> * @describe: 接种信息列表 @@ -108,4 +117,13 @@ public interface EpidemicUserInfoDao extends BaseDao { * @date 2021/4/30 10:06 */ 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 selectAllUserInfo(); } \ No newline at end of file diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dto/EpidemicUserInfoDTO.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dto/EpidemicUserInfoDTO.java index e4a2c30..9a4530a 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dto/EpidemicUserInfoDTO.java +++ b/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.ApiModelProperty; +import com.google.common.net.InternetDomainName; import lombok.Data; import java.io.Serializable; @@ -63,4 +64,6 @@ public class EpidemicUserInfoDTO implements Serializable { // @ApiModelProperty(value = "是否接种") private String isInoculate; + + private Integer maxDose; } \ No newline at end of file diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/service/impl/EpidemicUserInfoServiceImpl.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/service/impl/EpidemicUserInfoServiceImpl.java index efc0e7d..1c0f1ca 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/service/impl/EpidemicUserInfoServiceImpl.java +++ b/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 0) { // 如果还有接种记录那么就是接种中 // 虽然更新接种剂次为最大值-1,但实际上不一定能查到最大值-1条数据,数据不对应时需要补录 - userInfoDTO.setVaccinationNum(dto.getDose() - 1); + userInfoDTO.setVaccinationNum(dose - 1); userInfoDTO.setVaccinationState(1); } else { // 如果库里没有接种记录了,直接归为未接种,数据需要补录 diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/dto/result/VaccineDto.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/dto/result/VaccineDto.java index 79d7bbf..900af97 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/dto/result/VaccineDto.java +++ b/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 { private Long value; private String label; + + /** + * 疫苗信息导入使用字段 + */ + private Integer maxDose; } diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/service/impl/VaccinationInfoServiceImpl.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/service/impl/VaccinationInfoServiceImpl.java index 309d4f8..aa8da43 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/service/impl/VaccinationInfoServiceImpl.java +++ b/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.vaccine.common.base.BaseVimCurdServiceImpl; 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.utils.StreamUtils; import com.elink.esua.epdc.vaccine.vim.dao.VaccinationErrorDao; @@ -29,6 +32,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -55,6 +59,8 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl getWrapper(Map params) { @@ -85,10 +91,13 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl checkInfoList = checkVaccination(dto); + List checkInfoList = checkVaccination(checkDto); + + int dose = dto.getDose(); int maxDose = checkInfoList.stream().collect(Collectors.summarizingInt(VaccinationInfoEntity::getDose)).getMax(); return maxDose <= dose; } @@ -166,15 +175,20 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl addList = new ArrayList<>(); // 存储错误数据批量插入实体 List addErrorList = new ArrayList<>(); + // 记录单人最高剂次 + Map maxDoseMap = new HashMap<>(); log.info("准备进入Excel数据导入循环"); List vaccineList = vaccineTypeService.vaccineList(); List companyList = vaccineCompanyService.compantyList(); List siteList = vaccinationSiteService.getSiteList(); + List allUserList = epidemicUserInfoDao.selectAllUserInfo(); + List allUserIdCards = allUserList.stream().map(EpidemicUserInfoEntity::getIdCard).collect(Collectors.toList()); VaccinationInfoAllExcel epidemicReportUserInfoAllExcel; VaccinationInfoDTO vaccinationInfoDTO; String idCard; + Integer maxDose; for (int i = 0; i < recordList.size(); i++) { epidemicReportUserInfoAllExcel = recordList.get(i); vaccinationInfoDTO = ConvertUtils.sourceToTarget(epidemicReportUserInfoAllExcel, VaccinationInfoDTO.class); @@ -187,16 +201,14 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl company = companyList.stream().filter(item -> companyName.equals(item.getLabel())).collect(Collectors.toList()); if (company.size() > 0) { epidemicReportUserInfoAllExcel.setVaccineId(company.get(0).getValue()); + maxDose = company.get(0).getMaxDose(); } else { checkInfo += "第" + (i + 1) + "条、"; epidemicReportUserInfoAllExcel.setErrorInfo("不存在的疫苗生产商"); @@ -263,6 +276,20 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl 0) { baseDao.deleteDistinctDose(deleteIdCardArr); } + List idCards = new ArrayList<>(maxDoseMap.keySet()); + + List updateList = new ArrayList<>(); + if (!idCards.isEmpty()) { + + List 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 insertUserList = new ArrayList<>(); VaccinationInfoEntity userEntity; - for (int k = 0; k < addList.size(); k++) { - userEntity = ConvertUtils.sourceToTarget(addList.get(k), VaccinationInfoEntity.class); + for (VaccinationInfoAllExcel vaccinationInfoAllExcel : addList) { + userEntity = ConvertUtils.sourceToTarget(vaccinationInfoAllExcel, VaccinationInfoEntity.class); insertUserList.add(userEntity); } + // 更新人员的接种信息 + for (EpidemicUserInfoDTO dto : updateList) { + epidemicUserInfoDao.updateVaccinationInfo(dto); + } + insertBatch(insertUserList); // 批量插入错误数据 List insertErrorList = ConvertUtils.sourceToTarget(addErrorList, VaccinationErrorEntity.class); diff --git a/epdc-cloud-vim-yushan/src/main/resources/mapper/epidemic/EpidemicUserInfoDao.xml b/epdc-cloud-vim-yushan/src/main/resources/mapper/epidemic/EpidemicUserInfoDao.xml index a2a6376..81c0f16 100644 --- a/epdc-cloud-vim-yushan/src/main/resources/mapper/epidemic/EpidemicUserInfoDao.xml +++ b/epdc-cloud-vim-yushan/src/main/resources/mapper/epidemic/EpidemicUserInfoDao.xml @@ -269,6 +269,25 @@ DEL_FLAG = 0 AND ID_CARD = ( SELECT ID_CARD FROM epidemic_user_inout_record WHERE DEL_FLAG = 0 AND ID = #{id} ) + + + \ No newline at end of file diff --git a/epdc-cloud-vim-yushan/src/main/resources/mapper/vim/VaccineCompanyDao.xml b/epdc-cloud-vim-yushan/src/main/resources/mapper/vim/VaccineCompanyDao.xml index 7ddaee9..7aa5a01 100644 --- a/epdc-cloud-vim-yushan/src/main/resources/mapper/vim/VaccineCompanyDao.xml +++ b/epdc-cloud-vim-yushan/src/main/resources/mapper/vim/VaccineCompanyDao.xml @@ -6,7 +6,8 @@