From 858daf7b12bf1890ddf412c289c2bf34cb2565e9 Mon Sep 17 00:00:00 2001 From: zxc <1272811460@qq.com> Date: Fri, 14 Oct 2022 16:26:27 +0800 Subject: [PATCH] user --- .../tools/exception/EpmetErrorCode.java | 4 +++ .../src/main/java/com/epmet/dto/IcNatDTO.java | 6 +++++ .../com/epmet/dto/form/AddIcNatFormDTO.java | 7 ++++- .../com/epmet/dto/form/MyNatListFormDTO.java | 6 +++++ .../epmet/dto/result/NatListResultDTO.java | 5 ++++ .../DataSyncRecordDisabilityController.java | 2 ++ .../src/main/java/com/epmet/dao/IcNatDao.java | 4 ++- .../java/com/epmet/entity/IcNatEntity.java | 5 ++++ .../excel/data/IcNatImportExcelData.java | 7 +++-- .../handler/IcNatExcelImportListener.java | 14 +++++++++- .../epmet/service/impl/IcNatServiceImpl.java | 25 +++++++++++++++--- .../db/migration/V0.0.76__alter_ic_nat.sql | 6 ++++- .../src/main/resources/excel/ic_nat.xlsx | Bin 9220 -> 9203 bytes .../src/main/resources/mapper/IcNatDao.xml | 22 ++++++++++++++- 14 files changed, 103 insertions(+), 10 deletions(-) diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java index 64688c8990..ec9ee8c209 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java @@ -263,6 +263,10 @@ public enum EpmetErrorCode { UNIT_EXIST_HOUSES_ERROR(8928,"单元下存在房屋,不可修改单元数"), IC_VACCINE(8929,"已存在相同记录,请去修改原有记录"), NOT_MATCH_IC_USER_ERROR(8930,"请联系社区工作人员"), + NAT_TIME_IS_NULL_ERROR(8931,"检测时间不能为空"), + NAT_RESULT_IS_NULL_ERROR(8932,"检测结果不能为空"), + SAMPLE_TIME_IS_NULL_ERROR(8933,"采样时间不能为空"), + SAMPLE_TIME_AND_RESULT_IS_NULL_ERROR(8934,"检测时间或结果不能为空"), MISMATCH(10086,"人员与房屋信息不匹配,请与工作人员联系。"), diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatDTO.java index dbd32f4463..66c9828dfd 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatDTO.java @@ -67,6 +67,12 @@ public class IcNatDTO implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") private Date natTime; + /** + * 采样时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") + private Date sampleTime; + /** * 检测结果(0:阴性 1:阳性) */ diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java index 258f28c66b..1d7ba24673 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java @@ -61,9 +61,14 @@ public class AddIcNatFormDTO implements Serializable { /** * 检测时间 */ - @NotNull(message = "检测时间不能为空", groups = Nat.class) +// @NotNull(message = "检测时间不能为空", groups = Nat.class) @JsonFormat(pattern="yyyy-MM-dd HH:mm") private Date natTime; + +// @NotNull(message = "采样时间不能为空", groups = Nat.class) + @JsonFormat(pattern="yyyy-MM-dd HH:mm") + private Date sampleTime; + /** * 检测结果 */ diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/MyNatListFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/MyNatListFormDTO.java index 0272a30799..88f8359222 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/MyNatListFormDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/MyNatListFormDTO.java @@ -51,6 +51,12 @@ public class MyNatListFormDTO extends PageFormDTO { */ private String endTime; + /** + * 采样开始/结束时间yyyy-MM-dd HH:mm + */ + private String sampleStartTime; + private String sampleEndTime; + /** * 核酸记录Id */ diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatListResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatListResultDTO.java index cbeb66e482..43f9582b8c 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatListResultDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatListResultDTO.java @@ -71,6 +71,11 @@ public class NatListResultDTO implements Serializable { @ExcelProperty(value = "检测时间",order = 4) private Date natTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") + @ColumnWidth(25) + @ExcelProperty(value = "采样时间",order = 4) + private Date sampleTime; + /** * 检测结果 */ diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncRecordDisabilityController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncRecordDisabilityController.java index 55a2fe580a..d890ff812c 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncRecordDisabilityController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncRecordDisabilityController.java @@ -1,6 +1,7 @@ package com.epmet.controller; import com.epmet.commons.tools.annotation.LoginUser; +import com.epmet.commons.tools.annotation.MaskResponse; import com.epmet.commons.tools.aop.NoRepeatSubmit; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; @@ -35,6 +36,7 @@ public class DataSyncRecordDisabilityController { private DataSyncRecordDisabilityService dataSyncRecordDisabilityService; @PostMapping("page") + @MaskResponse(fieldNames = { "mobile", "idCard" }, fieldsMaskType = { MaskResponse.MASK_TYPE_MOBILE, MaskResponse.MASK_TYPE_ID_CARD }) public Result> page(@LoginUser TokenDto tokenDto,@RequestBody DataSyncRecordDisabilityFormDTO formDTO){ formDTO.setCustomerId(tokenDto.getCustomerId()); formDTO.setUserId(tokenDto.getUserId()); diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatDao.java index 3507473187..b2419b09f5 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatDao.java @@ -49,7 +49,9 @@ public interface IcNatDao extends BaseDao { * @Author sun * @Description 按条件查询业务数据 **/ - IcNatDTO getNatDTO(@Param("customerId") String customerId, @Param("icNatId") String icNatId, @Param("idCard") String idCard, @Param("natTime") String natTime, @Param("natResult") String natResult); + IcNatDTO getNatDTO(@Param("customerId") String customerId, @Param("icNatId") String icNatId, + @Param("idCard") String idCard, @Param("natTime") String natTime, + @Param("natResult") String natResult, @Param("sampleTime") String sampleTime); /** * desc:根据客户id 更新是否居民状态 diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatEntity.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatEntity.java index 50a9eed8e7..7cbe8cdd66 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatEntity.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatEntity.java @@ -64,6 +64,11 @@ public class IcNatEntity extends BaseEpmetEntity { */ private Date natTime; + /** + * 采样时间 + */ + private Date sampleTime; + /** * 检测结果(0:阴性 1:阳性) */ diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatImportExcelData.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatImportExcelData.java index 052b0cb1eb..ae0cb210d7 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatImportExcelData.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatImportExcelData.java @@ -29,14 +29,17 @@ public class IcNatImportExcelData { @Length(max = 18, message = "身份证号长度不正确,应小于18位") private String idCard; - @NotNull(message = "检测时间为必填项") +// @NotNull(message = "检测时间为必填项") @ExcelProperty("检测时间") private Date natTime; + @ExcelProperty("采样时间") + private Date sampleTime; + @ExcelProperty("检测地点") private String natAddress; - @NotBlank(message = "检测结果为必填项") +// @NotBlank(message = "检测结果为必填项") @ExcelProperty("检测结果") private String natResultZh; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatExcelImportListener.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatExcelImportListener.java index 1f09a5142f..59f5eaab7b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatExcelImportListener.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatExcelImportListener.java @@ -2,6 +2,8 @@ package com.epmet.excel.handler; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.read.listener.ReadListener; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.ValidateException; import com.epmet.commons.tools.utils.ConvertUtils; @@ -66,6 +68,16 @@ public class IcNatExcelImportListener implements ReadListener imp //@Autowired //private UserService userService; + public void disposeIsNull(AddIcNatFormDTO formDTO){ + /** + * 根据产品要求 不同情况提示不同错误 + * 1.采样时间为空,检测时间和结果有一个为空就报错 + * 2.采样时间不为空,检测时间和结果可以为空【如果不为空 检测时间和结果都不为空】 + */ + if ((null == formDTO.getSampleTime() && null == formDTO.getNatTime() || org.apache.commons.lang3.StringUtils.isBlank(formDTO.getNatResult()))){ + throw new EpmetException(EpmetErrorCode.SAMPLE_TIME_AND_RESULT_IS_NULL_ERROR.getCode()); + } + if(null != formDTO.getSampleTime() && org.apache.commons.lang3.StringUtils.isNotBlank(formDTO.getNatResult()) && null == formDTO.getNatTime()){ + throw new EpmetException(EpmetErrorCode.NAT_TIME_IS_NULL_ERROR.getCode()); + } + if (null != formDTO.getSampleTime() && org.apache.commons.lang3.StringUtils.isBlank(formDTO.getNatResult()) && null != formDTO.getNatTime()){ + throw new EpmetException(EpmetErrorCode.NAT_RESULT_IS_NULL_ERROR.getCode()); + } + } + /** * @Author sun * @Description 核酸检测-上报核酸记录 @@ -95,8 +112,9 @@ public class IcNatServiceImpl extends BaseServiceImpl imp @Override @Transactional(rollbackFor = Exception.class) public void add(AddIcNatFormDTO formDTO) { + disposeIsNull(formDTO); //0.先根据身份证号和检查时间以及检测结果校验数据是否存在 - IcNatDTO icNatDTO = baseDao.getNatDTO(formDTO.getCustomerId(), null, formDTO.getIdCard(), DateUtils.format(formDTO.getNatTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE), null); + IcNatDTO icNatDTO = baseDao.getNatDTO(formDTO.getCustomerId(), null, formDTO.getIdCard(), null != formDTO.getNatTime() ? DateUtils.format(formDTO.getNatTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE) : null, null, null != formDTO.getSampleTime() ? DateUtils.format(formDTO.getSampleTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE) : null); //按身份证号核酸时间存在记录的 核酸结果相同的提示已存在相同记录核酸结果不同的提示已存在去修改【业务要求的】 if (null != icNatDTO && icNatDTO.getNatResult().equals(formDTO.getNatResult())) { throw new RenException(EpmetErrorCode.IC_NAT_IDCARD_NATTIME.getCode(), EpmetErrorCode.IC_NAT_IDCARD_NATTIME.getMsg()); @@ -216,8 +234,9 @@ public class IcNatServiceImpl extends BaseServiceImpl imp @Override @Transactional(rollbackFor = Exception.class) public void edit(AddIcNatFormDTO formDTO) { + disposeIsNull(formDTO); //0.先根据身份证号和检测时间以及检测结果校验除当前数据是否还存在相同数据 - IcNatDTO icNatDTO = baseDao.getNatDTO(formDTO.getCustomerId(), formDTO.getIcNatId(), formDTO.getIdCard(), DateUtils.format(formDTO.getNatTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE), formDTO.getNatResult()); + IcNatDTO icNatDTO = baseDao.getNatDTO(formDTO.getCustomerId(), formDTO.getIcNatId(), formDTO.getIdCard(), null != formDTO.getNatTime() ? DateUtils.format(formDTO.getNatTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE) : null, formDTO.getNatResult(), null != formDTO.getSampleTime() ? DateUtils.format(formDTO.getSampleTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE) : null); if (null != icNatDTO) { throw new RenException(EpmetErrorCode.IC_NAT.getCode(), EpmetErrorCode.IC_NAT.getMsg()); } @@ -464,7 +483,7 @@ public class IcNatServiceImpl extends BaseServiceImpl imp errorRow.setName(e.getName()); errorRow.setMobile(e.getMobile()); errorRow.setIdCard(e.getIdCard()); - errorRow.setErrorInfo("未知系统错误"); + errorRow.setErrorInfo(exception.getMessage()); listener.getErrorRows().add(errorRow); } }); diff --git a/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.76__alter_ic_nat.sql b/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.76__alter_ic_nat.sql index 4c58646746..136596160f 100644 --- a/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.76__alter_ic_nat.sql +++ b/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.76__alter_ic_nat.sql @@ -1,3 +1,7 @@ alter table ic_nat add COLUMN `SAMPLE_TIME` datetime COMMENT '采样时间'after ID_CARD; -ALTER TABLE ic_nat MODIFY COLUMN NAT_TIME datetime COMMENT '检测时间,精确到分钟'; \ No newline at end of file +ALTER TABLE ic_nat MODIFY COLUMN NAT_TIME datetime COMMENT '检测时间,精确到分钟'; + +UPDATE ic_nat +SET SAMPLE_TIME = NAT_TIME, + UPDATED_TIME = NOW(); \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_nat.xlsx b/epmet-user/epmet-user-server/src/main/resources/excel/ic_nat.xlsx index d9038bfdc4faa94007e45287efb4b4b9e34a099b..31cc19219bf74629dbeba6c13449990ad7f8208e 100644 GIT binary patch delta 5155 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 X(0_F~U?AWaw1{IC60Bv$e~|wH2aby? delta 5168 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 AND b.nat_time #{endTime} + + AND b.sample_time = ]]> #{sampleStartTime} + + + AND b.sample_time #{sampleEndTime} + AND b.is_resi_user = #{isResiUser} @@ -83,6 +90,7 @@ mobile mobile, id_card idCard, nat_time natTime, + sample_time sampleTime, nat_result natResult, nat_address natAddress FROM @@ -105,6 +113,12 @@ AND nat_time #{endTime} + + AND sample_time = ]]> #{sampleStartTime} + + + AND sample_time #{sampleEndTime} + ORDER BY nat_time DESC, id ASC @@ -117,6 +131,7 @@ mobile, id_card, nat_time, + sample_time, nat_result, nat_address FROM @@ -125,7 +140,12 @@ del_flag = '0' AND customer_id = #{customerId} AND id_card = #{idCard} - AND DATE_FORMAT(nat_time, '%Y-%m-%d %h:%i') = DATE_FORMAT(#{natTime}, '%Y-%m-%d %h:%i') + + AND DATE_FORMAT(nat_time, '%Y-%m-%d %h:%i') = DATE_FORMAT(#{natTime}, '%Y-%m-%d %h:%i') + + + AND DATE_FORMAT(sample_time, '%Y-%m-%d %h:%i') = DATE_FORMAT(#{sampleTime}, '%Y-%m-%d %h:%i') + AND nat_result = #{natResult}