From e3f264144fb60deb5b610dc3d202ca1bf7fe91d5 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Wed, 6 Apr 2022 16:51:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E5=85=A5=E7=96=AB?= =?UTF-8?q?=E8=8B=97=E6=8E=A5=E7=A7=8D=E4=BF=A1=E6=81=AF-?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/constants/ImportTaskConstants.java | 5 + .../epmet/controller/IcVaccineController.java | 11 +- .../excel/data/IcVaccineImportExcelData.java | 19 ++-- .../handler/IcVaccineExcelImportListener.java | 34 ++---- .../service/impl/IcVaccineServiceImpl.java | 106 +++++++++--------- .../src/main/resources/excel/ic_vaccine.xlsx | Bin 0 -> 9141 bytes 6 files changed, 82 insertions(+), 93 deletions(-) create mode 100644 epmet-user/epmet-user-server/src/main/resources/excel/ic_vaccine.xlsx diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java index e15f7f5057..05832141a4 100644 --- a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java @@ -41,4 +41,9 @@ public interface ImportTaskConstants { * 处理状态:完成,但未完全成功 */ String PROCESS_STATUS_FINISHED_FAIL = "finished_fail"; + + /** + * 疫苗接种 + */ + String BIZ_TYPE_IC_VACCINE = "vaccine"; } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcVaccineController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcVaccineController.java index 65f19fc3df..2a2aa2621d 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcVaccineController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcVaccineController.java @@ -196,11 +196,11 @@ public class IcVaccineController implements ResultDataResolver { Path fileSavePath; try { - Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_nat", "import"); + Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_vaccine", "import"); fileSavePath = importPath.resolve(UUID.randomUUID().toString().concat(extName)); } catch (IOException e) { String errorMsg = ExceptionUtils.getErrorStackTrace(e); - log.error("【核酸检测导入】创建临时存储文件失败:{}", errorMsg); + log.error("【疫苗接种导入】创建临时存储文件失败:{}", errorMsg); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "文件上传失败", "文件上传失败"); } @@ -221,14 +221,14 @@ public class IcVaccineController implements ResultDataResolver { // 2.生成导入任务记录 ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO(); importTaskForm.setOperatorId(userId); - importTaskForm.setBizType(ImportTaskConstants.BIZ_TYPE_IC_NAT); + importTaskForm.setBizType(ImportTaskConstants.BIZ_TYPE_IC_VACCINE); importTaskForm.setOriginFileName(originalFilename); ImportTaskCommonResultDTO rstData = getResultDataOrThrowsException(commonServiceOpenFeignClient.createImportTask(importTaskForm), ServiceConstant.EPMET_COMMON_SERVICE, EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), - "excel导入核酸检测信息错误", - "导入居民核酸检测信息失败"); + "excel导入疫苗接种信息错误", + "导入居民疫苗接种信息失败"); // 3.执行导入 icVaccineService.execAsyncExcelImport(fileSavePath, rstData.getTaskId()); @@ -315,5 +315,4 @@ public class IcVaccineController implements ResultDataResolver { } - } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcVaccineImportExcelData.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcVaccineImportExcelData.java index 3c10ff69b7..6dca8bc4bb 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcVaccineImportExcelData.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcVaccineImportExcelData.java @@ -11,7 +11,7 @@ import java.io.Serializable; import java.util.Date; /** - * 核酸检测信息导入excel数据 + * 疫苗接种信息导入excel数据 */ @Data public class IcVaccineImportExcelData implements Serializable { @@ -30,16 +30,17 @@ public class IcVaccineImportExcelData implements Serializable { @Length(max = 18, message = "身份证号长度不正确,应小于18位") private String idCard; - @NotNull(message = "检测时间为必填项") - @ExcelProperty("检测时间") - private Date natTime; + @NotNull(message = "接种时间为必填项") + @ExcelProperty("接种时间") + private Date inoculateTime; - @ExcelProperty("检测地点") - private String natAddress; + @NotBlank(message = "接种地点为必填项") + @ExcelProperty("接种地点") + private String inoculateAddress; - @NotBlank(message = "检测结果为必填项") - @ExcelProperty("检测结果") - private String natResultZh; + @NotBlank(message = "疫苗厂家为必填项") + @ExcelProperty("疫苗厂家") + private String manufacturer; @Data public static class RowRemarkMessage { diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcVaccineExcelImportListener.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcVaccineExcelImportListener.java index 027040871e..e12d4549a9 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcVaccineExcelImportListener.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcVaccineExcelImportListener.java @@ -46,11 +46,11 @@ public class IcVaccineExcelImportListener implements ReadListener errorRows = new ArrayList<>(); + private List errorRows = new ArrayList<>(); /** * 其他被标记出来的列表列表 */ - private List otherRows = new ArrayList<>(); + private List otherRows = new ArrayList<>(); private IcVaccineServiceImpl icVaccineService; @@ -68,35 +68,23 @@ public class IcVaccineExcelImportListener implements ReadListener getErrorRows() { + public List getErrorRows() { return errorRows; } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcVaccineServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcVaccineServiceImpl.java index f6cab4ae48..63e092940f 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcVaccineServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcVaccineServiceImpl.java @@ -18,10 +18,7 @@ import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache; import com.epmet.commons.tools.utils.*; import com.epmet.constants.ImportTaskConstants; -import com.epmet.dao.IcNatRelationDao; -import com.epmet.dao.IcResiUserDao; -import com.epmet.dao.IcVaccineDao; -import com.epmet.dao.UserBaseInfoDao; +import com.epmet.dao.*; import com.epmet.dto.IcNatDTO; import com.epmet.dto.IcNoticeDTO; import com.epmet.dto.form.AddIcNatFormDTO; @@ -32,8 +29,9 @@ import com.epmet.dto.result.*; import com.epmet.entity.IcNatRelationEntity; import com.epmet.entity.IcResiUserEntity; import com.epmet.entity.IcVaccineEntity; +import com.epmet.entity.IcVaccineRelationEntity; import com.epmet.excel.data.IcNatImportExcelData; -import com.epmet.excel.handler.IcNatExcelImportListener; +import com.epmet.excel.data.IcVaccineImportExcelData; import com.epmet.excel.handler.IcVaccineExcelImportListener; import com.epmet.feign.EpmetCommonServiceOpenFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient; @@ -85,6 +83,10 @@ public class IcVaccineServiceImpl extends BaseServiceImpl otherRows = listener.getOtherRows(); + public void persisVaccine(IcVaccineEntity e, String customerId, String currentUserId, IcVaccineExcelImportListener listener) { + List otherRows = listener.getOtherRows(); String agencyPids = listener.getCurrentAgencyPids(); String agencyId = listener.getCurrentAgencyId(); - Date natTime = e.getNatTime(); String idCard = e.getIdCard(); String name = e.getName(); String mobile = e.getMobile(); - String natResult = e.getNatResult(); - String natAddress = e.getNatAddress(); + String manufacturer = e.getManufacturer(); + Date inoculateTime = e.getInoculateTime(); + String inoculateAddress = e.getInoculateAddress(); //1.先看客户下有没有这个人 - IcVaccineEntity resiNat = getResiNat(customerId, idCard, natTime); - if (resiNat != null && !"import".equals(resiNat.getUserType())) { + IcVaccineEntity resiVaccine = getResiVaccine(customerId, idCard, inoculateTime); + if (resiVaccine != null && !"import".equals(resiVaccine.getUserType())) { // 有这个人,并且不是导入的 - String message = "已存在该次核酸检测录入记录,请到系统中修改"; + String message = "已存在该次疫苗接种录入记录,请到系统中修改"; - IcNatImportExcelData.RowRemarkMessage errorRow = new IcNatImportExcelData.RowRemarkMessage(); + IcVaccineImportExcelData.RowRemarkMessage errorRow = new IcVaccineImportExcelData.RowRemarkMessage(); errorRow.setName(name); errorRow.setMobile(mobile); errorRow.setIdCard(idCard); @@ -504,39 +506,35 @@ public class IcVaccineServiceImpl extends BaseServiceImpl changedFieldNames = new ArrayList<>(); - if (!name.equals(resiNat.getName())) { - changedFieldNames.add("姓名"); - resiNat.setName(name); + Boolean isNameChanged = false; + if (!name.equals(resiVaccine.getName())) { + isNameChanged = true; + resiVaccine.setName(name); needUpdate = true; } - if (!natResult.equals(resiNat.getNatResult())) { - changedFieldNames.add("检测结果"); - resiNat.setNatResult(natResult); + if (!inoculateAddress.equals(resiVaccine.getInoculateAddress())) { + resiVaccine.setInoculateAddress(inoculateAddress); needUpdate = true; } - // 检测地点和手机号先不提示,说需要提示再提示。需要考虑两个都不为空&&不相等 || 两个中一个为空一个不为空 - if ((com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(natAddress) && com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(resiNat.getNatAddress())) - || (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(natAddress) && com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(resiNat.getNatAddress())) - || (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(natAddress) && com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(resiNat.getNatAddress()) && !natAddress.equals(resiNat.getNatAddress()))) { - resiNat.setNatAddress(natAddress); + if (!manufacturer.equals(resiVaccine.getManufacturer())) { + resiVaccine.setManufacturer(manufacturer); needUpdate = true; } - if (!mobile.equals(resiNat.getMobile())) { - resiNat.setMobile(mobile); + if (!mobile.equals(resiVaccine.getMobile())) { + resiVaccine.setMobile(mobile); needUpdate = true; } - if (changedFieldNames.size() > 0) { - String fieldsStr = String.join(",", changedFieldNames); - String message = "该次核酸检测记录已存在,执行更新动作," + fieldsStr + "已成功更新"; - IcNatImportExcelData.RowRemarkMessage errorRow = new IcNatImportExcelData.RowRemarkMessage(); + if (isNameChanged) { + String message = "平台存在相同记录身份证号与姓名不一致,已更新最新姓名"; + IcVaccineImportExcelData.RowRemarkMessage errorRow = new IcVaccineImportExcelData.RowRemarkMessage(); errorRow.setName(name); errorRow.setMobile(mobile); errorRow.setIdCard(idCard); @@ -545,19 +543,18 @@ public class IcVaccineServiceImpl extends BaseServiceImpl query = new LambdaQueryWrapper<>(); query.eq(IcVaccineEntity::getCustomerId, customerId); query.eq(IcVaccineEntity::getIdCard, idCard); - query.eq(IcVaccineEntity::getNatTime, natTime); + query.eq(IcVaccineEntity::getInoculateTime, natTime); return baseDao.selectOne(query); } /** - * 创建nat关系 - * @param natId + * 创建关系 + * @param vaccineId * @param currentUserAgencyId */ - private void createNatRelation(String natId, String currentUserAgencyId, String agencyPids) { + private void createVaccineRelation(String vaccineId, String currentUserAgencyId, String agencyPids) { // 没有关系创建关系,有关系就跳过 - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(IcNatRelationEntity::getIcNatId, natId); - query.eq(IcNatRelationEntity::getAgencyId, currentUserAgencyId); - if (icNatRelationDao.selectCount(query) > 0) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(IcVaccineRelationEntity::getIcVaccineId, vaccineId); + query.eq(IcVaccineRelationEntity::getAgencyId, currentUserAgencyId); + if (icVaccineRelationDao.selectCount(query) > 0) { return; } - IcNatRelationEntity relation = new IcNatRelationEntity(); + IcVaccineRelationEntity relation = new IcVaccineRelationEntity(); relation.setAgencyId(currentUserAgencyId); relation.setPids(String.join(":", Arrays.asList(agencyPids, currentUserAgencyId))); - relation.setIcNatId(natId); + relation.setIcVaccineId(vaccineId); relation.setUserType("import"); - icNatRelationDao.insert(relation); + icVaccineRelationDao.insert(relation); } } diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_vaccine.xlsx b/epmet-user/epmet-user-server/src/main/resources/excel/ic_vaccine.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b1d0b56179529c7d2e1f078ca749a6ad8a8ee4e3 GIT binary patch literal 9141 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 U1^pvf(I0Puz&^?)5I^btKNm-)nE(I) literal 0 HcmV?d00001