11 changed files with 472 additions and 14 deletions
@ -0,0 +1,48 @@ |
|||
package com.epmet.excel.data; |
|||
|
|||
import com.alibaba.excel.annotation.ExcelProperty; |
|||
import com.alibaba.excel.annotation.write.style.ColumnWidth; |
|||
import lombok.Data; |
|||
|
|||
import javax.validation.constraints.NotBlank; |
|||
|
|||
/** |
|||
* @Description |
|||
* @Author yzm |
|||
* @Date 2022/9/27 9:41 |
|||
*/ |
|||
@Data |
|||
public class IcNatCompareRecordExcelData { |
|||
@NotBlank(message = "姓名为必填项") |
|||
@ExcelProperty("姓名") |
|||
private String name; |
|||
|
|||
@NotBlank(message = "身份证号为必填项") |
|||
@ExcelProperty("身份证号") |
|||
private String idCard; |
|||
|
|||
@NotBlank(message = "手机号为必填项") |
|||
@ExcelProperty("手机号") |
|||
private String mobile; |
|||
|
|||
@Data |
|||
public static class ErrorRow { |
|||
|
|||
@ExcelProperty("姓名") |
|||
@ColumnWidth(20) |
|||
private String name; |
|||
|
|||
@ColumnWidth(20) |
|||
@ExcelProperty("身份证号") |
|||
private String idCard; |
|||
|
|||
@ExcelProperty("手机号") |
|||
@ColumnWidth(20) |
|||
private String mobile; |
|||
|
|||
@ColumnWidth(60) |
|||
@ExcelProperty("错误信息") |
|||
private String errorInfo; |
|||
} |
|||
} |
|||
|
@ -0,0 +1,152 @@ |
|||
package com.epmet.excel.handler; |
|||
|
|||
import com.alibaba.excel.context.AnalysisContext; |
|||
import com.alibaba.excel.read.listener.ReadListener; |
|||
import com.epmet.commons.tools.constant.NumConstant; |
|||
import com.epmet.commons.tools.constant.StrConstant; |
|||
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; |
|||
import com.epmet.commons.tools.dto.result.YtHsjcResDTO; |
|||
import com.epmet.commons.tools.dto.result.YtHsjcResDetailDTO; |
|||
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; |
|||
import com.epmet.commons.tools.utils.DateUtils; |
|||
import com.epmet.commons.tools.utils.ObjectUtil; |
|||
import com.epmet.commons.tools.utils.YtHsResUtils; |
|||
import com.epmet.commons.tools.validator.ValidatorUtils; |
|||
import com.epmet.entity.IcNatCompareRecordEntity; |
|||
import com.epmet.excel.data.IcNatCompareRecordExcelData; |
|||
import com.epmet.service.impl.IcNatCompareRecordServiceImpl; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.apache.commons.collections4.CollectionUtils; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @Description |
|||
* @Author yzm |
|||
* @Date 2022/9/27 9:42 |
|||
*/ |
|||
@Slf4j |
|||
public class IcNatCompareRecordExcelImportListener implements ReadListener<IcNatCompareRecordExcelData> { |
|||
|
|||
/** |
|||
* 最大条数阈值 |
|||
*/ |
|||
public static final int MAX_THRESHOLD = 200; |
|||
/** |
|||
* 当前操作用户 |
|||
*/ |
|||
private CustomerStaffInfoCacheResult staffInfo; |
|||
private String customerId; |
|||
private IcNatCompareRecordServiceImpl icNatCompareRecordService; |
|||
/** |
|||
* 数据 |
|||
*/ |
|||
private List<IcNatCompareRecordEntity> datas = new ArrayList<>(); |
|||
|
|||
/** |
|||
* 错误项列表 |
|||
*/ |
|||
private List<IcNatCompareRecordExcelData.ErrorRow> errorRows = new ArrayList<>(); |
|||
private Date importTime; |
|||
private String importDate; |
|||
public IcNatCompareRecordExcelImportListener(String customerId, CustomerStaffInfoCacheResult staffInfo,String importDate,Date importTime, IcNatCompareRecordServiceImpl icNatCompareRecordService) { |
|||
this.customerId = customerId; |
|||
this.staffInfo = staffInfo; |
|||
this.icNatCompareRecordService = icNatCompareRecordService; |
|||
this.importDate=importDate; |
|||
this.importTime=importTime; |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void invoke(IcNatCompareRecordExcelData data, AnalysisContext analysisContext) { |
|||
try { |
|||
// log.warn("有数据吗?"+JSON.toJSONString(data));
|
|||
// 不能为空先校验数据
|
|||
ValidatorUtils.validateEntity(data); |
|||
// 去除空格
|
|||
ObjectUtil.objectToTrim(data); |
|||
IcNatCompareRecordEntity compareRecordEntity = ConvertUtils.sourceToTarget(data, IcNatCompareRecordEntity.class); |
|||
compareRecordEntity.setCustomerId(customerId); |
|||
compareRecordEntity.setLatestNatTime(null); |
|||
compareRecordEntity.setNatAddress(StrConstant.EPMETY_STR); |
|||
compareRecordEntity.setNatResult(StrConstant.EPMETY_STR); |
|||
// 调用烟台api获取核酸检测结果
|
|||
YtHsjcResDTO hsjcResDTO = YtHsResUtils.hsjc(data.getIdCard(), 1, 1); |
|||
if (null != hsjcResDTO && CollectionUtils.isNotEmpty(hsjcResDTO.getData()) && null != hsjcResDTO.getData().get(0)) { |
|||
YtHsjcResDetailDTO ytHsjcResDetailDTO = hsjcResDTO.getData().get(0); |
|||
String testTime = ytHsjcResDetailDTO.getTest_time(); |
|||
compareRecordEntity.setLatestNatTime(DateUtils.parse(testTime, DateUtils.DATE_PATTERN)); |
|||
compareRecordEntity.setNatAddress(StringUtils.isNotBlank(ytHsjcResDetailDTO.getSampling_org_pcr()) ? ytHsjcResDetailDTO.getSample_result_pcr() : StrConstant.EPMETY_STR); |
|||
|
|||
// "sample_result_pcr":"2",// 核酸检测结果 1:阳性,2:阴性
|
|||
String sample_result_pcr = ytHsjcResDetailDTO.getSample_result_pcr(); |
|||
if (NumConstant.ONE_STR.equals(sample_result_pcr)) { |
|||
compareRecordEntity.setNatResult(NumConstant.ONE_STR); |
|||
} else if (NumConstant.TWO_STR.equals(sample_result_pcr)) { |
|||
compareRecordEntity.setNatResult(NumConstant.ZERO_STR); |
|||
} |
|||
compareRecordEntity.setContactAddress(StringUtils.isNotBlank(ytHsjcResDetailDTO.getAddress()) ? ytHsjcResDetailDTO.getAddress() : StrConstant.EPMETY_STR); |
|||
} |
|||
datas.add(compareRecordEntity); |
|||
|
|||
if (datas.size() == MAX_THRESHOLD) { |
|||
execPersist(); |
|||
} |
|||
} catch (Exception e) { |
|||
String errorMsg = null; |
|||
if (e instanceof ValidateException) { |
|||
errorMsg = ((ValidateException) e).getMsg(); |
|||
} else if (e instanceof EpmetException) { |
|||
errorMsg = ((EpmetException) e).getMsg(); |
|||
} else { |
|||
errorMsg = "未知错误"; |
|||
log.error("【未做核酸比对导入】出错:{}", ExceptionUtils.getErrorStackTrace(e)); |
|||
} |
|||
IcNatCompareRecordExcelData.ErrorRow errorRow = new IcNatCompareRecordExcelData.ErrorRow(); |
|||
errorRow.setIdCard(data.getIdCard()); |
|||
errorRow.setName(data.getName()); |
|||
errorRow.setMobile(data.getMobile()); |
|||
errorRow.setErrorInfo(errorMsg); |
|||
errorRows.add(errorRow); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void doAfterAllAnalysed(AnalysisContext analysisContext) { |
|||
// 最后几条达不到阈值,这里必须再调用一次
|
|||
execPersist(); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 执行持久化 |
|||
*/ |
|||
private void execPersist() { |
|||
// ic_nat_compare_record、ic_nat_compare_rec_relation
|
|||
try { |
|||
if (datas != null && datas.size() > 0) { |
|||
icNatCompareRecordService.batchPersist(datas, staffInfo, this); |
|||
} |
|||
} finally { |
|||
datas.clear(); |
|||
} |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 获取错误行 |
|||
* |
|||
* @return |
|||
*/ |
|||
public List<IcNatCompareRecordExcelData.ErrorRow> getErrorRows() { |
|||
return errorRows; |
|||
} |
|||
} |
|||
|
Loading…
Reference in new issue