@ -5,9 +5,6 @@ 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.YtHscyResDTO ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  com.epmet.commons.tools.dto.result.YtHsjcResDTO ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  com.epmet.commons.tools.dto.result.YtHsjcResDetailDTO ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  com.epmet.commons.tools.enums.EnvEnum ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  com.epmet.commons.tools.exception.EpmetException ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  com.epmet.commons.tools.exception.ExceptionUtils ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -15,18 +12,17 @@ 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.collections4.MapUtils ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  org.apache.commons.lang3.StringUtils ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  java.util.ArrayList ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  java.util.Date ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  java.util.List ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					import  java.util.* ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/ * *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					 *  @Description  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -60,16 +56,22 @@ public class IcNatCompareRecordExcelImportListener implements ReadListener<IcNat 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  导入日期 : yyyyMMdd  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     * /  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    private  String  importDate ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    public  IcNatCompareRecordExcelImportListener ( String  customerId ,  CustomerStaffInfoCacheResult  staffInfo , String  importDate , Date  importTime ,  IcNatCompareRecordServiceImpl  icNatCompareRecordService )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    private  NamedParameterJdbcTemplate  yantaiNamedParamLantuJdbcTemplate ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    public  IcNatCompareRecordExcelImportListener ( String  customerId ,  CustomerStaffInfoCacheResult  staffInfo , String  importDate , Date  importTime ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                                 IcNatCompareRecordServiceImpl  icNatCompareRecordService ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                                 NamedParameterJdbcTemplate  yantaiNamedParamLantuJdbcTemplate )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        this . customerId  =  customerId ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        this . staffInfo  =  staffInfo ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        this . icNatCompareRecordService  =  icNatCompareRecordService ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        this . importDate = importDate ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        this . importTime = importTime ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        this . yantaiNamedParamLantuJdbcTemplate = yantaiNamedParamLantuJdbcTemplate ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    @Override  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    / * @Override  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    public  void  invoke ( IcNatCompareRecordExcelData  data ,  AnalysisContext  analysisContext )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        try  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // log.warn("有数据吗?"+JSON.toJSONString(data));
  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -137,6 +139,110 @@ public class IcNatCompareRecordExcelImportListener implements ReadListener<IcNat 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            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  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 ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // 开发和测试没法测试,只能写死只有生产才去调用了 烟台客户id:1535072605621841922
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            EnvEnum  currentEnv  =  EnvEnum . getCurrentEnv ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( EnvEnum . PROD . getCode ( ) . equals ( currentEnv . getCode ( ) )  & &  "1535072605621841922" . equals ( customerId ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // 先查询最后一次采样记录
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                Map < String ,  Object >  args  =  new  HashMap < > ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                args . put ( "idcard" ,  data . getIdCard ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                List < Map < String ,  Object > >  hscyList  =  yantaiNamedParamLantuJdbcTemplate . queryForList (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        "select id, name,card_no, create_time, realname from hscyxxb where card_no =:idcard order by create_time desc limit 1" ,  args ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( CollectionUtils . isNotEmpty ( hscyList )  & &  MapUtils . isNotEmpty ( hscyList . get ( 0 ) ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    // 存在 最近一条采样记录
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    Map < String ,  Object >  latestCyMap  =  hscyList . get ( 0 ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    String  create_time  =  ( String )  latestCyMap . get ( "create_time" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( StringUtils . isBlank ( create_time ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        // 最近一次采样时间为空,说明这人好久不做核酸了
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        compareRecordEntity . setInternalRemark ( "采样时间create_time is null" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        // 赋值采样时间
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        compareRecordEntity . setLatestCyTime ( DateUtils . parse ( create_time ,  DateUtils . DATE_TIME_PATTERN ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        // 查询最后一次检测结果
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        List < Map < String ,  Object > >  hsjcResultList  =  yantaiNamedParamLantuJdbcTemplate . queryForList (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                "select name, telephone, card_no, test_time, SAMPLE_TIME, SAMPLE_RESULT_PCR, SAMPLING_ORG_PCR from hsjcxxb where card_no =:idcard order by test_time desc limit 1" ,  args ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        if  ( CollectionUtils . isNotEmpty ( hsjcResultList )  & &  MapUtils . isNotEmpty ( hsjcResultList . get ( 0 ) ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            Map < String ,  Object >  latestJcMap  =  hsjcResultList . get ( 0 ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            // 采样时间
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            String  sample_time  =  ( String )  latestJcMap . get ( "SAMPLE_TIME" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            // 检测时间
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            String  test_time  =  ( String )  latestJcMap . get ( "test_time" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            // 核酸采样机构
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            String  sampling_org_pcr  =  ( String )  latestJcMap . get ( "SAMPLING_ORG_PCR" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            // 核酸检测结果 1:阳性,2:阴性
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            String  sample_result_pcr  =  ( String )  latestJcMap . get ( "SAMPLE_RESULT_PCR" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            // 联系地址
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            String  address  =  ( String )  latestJcMap . get ( "address" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            // 最近一次采样时间,与最近一次检测结果的采样时间相比较
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            if  ( compareRecordEntity . getLatestCyTime ( ) . equals ( sample_time ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                // 一致说明出结果了
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                if  ( StringUtils . isNotBlank ( test_time ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                    // 赋值最近一次核酸时间
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                    compareRecordEntity . setLatestNatTime ( DateUtils . parse ( test_time ,  DateUtils . DATE_TIME_PATTERN ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                // 赋值检测地点
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                compareRecordEntity . setNatAddress ( StringUtils . isNotBlank ( sampling_org_pcr )  ?  sampling_org_pcr  :  StrConstant . EPMETY_STR ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                // 核酸检测结果 1:阳性,2:阴性
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                if  ( NumConstant . ONE_STR . equals ( sample_result_pcr ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                    // 检测结果(0:阴性  1:阳性):接口填入
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                    compareRecordEntity . setNatResult ( NumConstant . ONE_STR ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                }  else  if  ( NumConstant . TWO_STR . equals ( sample_result_pcr ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                    compareRecordEntity . setNatResult ( NumConstant . ZERO_STR ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                compareRecordEntity . setContactAddress ( StringUtils . isNotBlank ( address )  ?  address  :  StrConstant . EPMETY_STR ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                // 采样时间不一致,说明未出结果
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                compareRecordEntity . setInternalRemark ( String . format ( "采样时间不一致,采样视图最近一次采样时间:%s,检测结果视图的最近一次采样时间:%s" ,  compareRecordEntity . getLatestCyTime ( ) ,  sample_time ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            compareRecordEntity . setInternalRemark ( "最近一次检测结果为空" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    // 没有核酸采样记录
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    compareRecordEntity . setInternalRemark ( "最近一次采样结果为空" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            datas . add ( compareRecordEntity ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( datas . size ( )  = =  MAX_THRESHOLD )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                execPersist ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -159,6 +265,7 @@ public class IcNatCompareRecordExcelImportListener implements ReadListener<IcNat 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    @Override  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    public  void  doAfterAllAnalysed ( AnalysisContext  analysisContext )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // 最后几条达不到阈值,这里必须再调用一次