@ -1,5 +1,7 @@
package com.epmet.service.impl ;
import cn.afterturn.easypoi.excel.ExcelExportUtil ;
import cn.afterturn.easypoi.excel.entity.ExportParams ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper ;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper ;
import com.baomidou.mybatisplus.core.metadata.IPage ;
@ -8,26 +10,48 @@ import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant ;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult ;
import com.epmet.commons.tools.exception.EpmetException ;
import com.epmet.commons.tools.exception.ExceptionUtils ;
import com.epmet.commons.tools.page.PageData ;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis ;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis ;
import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache ;
import com.epmet.commons.tools.security.dto.TokenDto ;
import com.epmet.commons.tools.utils.ConvertUtils ;
import com.epmet.commons.tools.utils.ExcelPoiUtils ;
import com.epmet.commons.tools.utils.Result ;
import com.epmet.constants.ImportTaskConstants ;
import com.epmet.dao.IcEpidemicSpecialAttentionDao ;
import com.epmet.dto.IcEpidemicSpecialAttentionDTO ;
import com.epmet.dto.form.CancelAttentionPackageFormDTO ;
import com.epmet.dto.form.VaccinationAddFormDTO ;
import com.epmet.dto.form.VaccinationListFormDTO ;
import com.epmet.dto.form.* ;
import com.epmet.dto.result.UploadImgResultDTO ;
import com.epmet.dto.result.VaccinationListResultDTO ;
import com.epmet.entity.IcEpidemicSpecialAttentionEntity ;
import com.epmet.enums.ChannelEnum ;
import com.epmet.excel.ImportEpidemicSpecialAttention ;
import com.epmet.excel.error.EpidemicSpecialAttentionErrorModel ;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient ;
import com.epmet.feign.OssFeignClient ;
import com.epmet.service.IcEpidemicSpecialAttentionService ;
import com.epmet.service.IcNoticeService ;
import com.github.pagehelper.PageHelper ;
import com.github.pagehelper.PageInfo ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.collections4.CollectionUtils ;
import org.apache.commons.fileupload.FileItem ;
import org.apache.commons.fileupload.FileItemFactory ;
import org.apache.commons.fileupload.disk.DiskFileItemFactory ;
import org.apache.commons.lang3.StringUtils ;
import org.apache.http.entity.ContentType ;
import org.apache.poi.ss.usermodel.Workbook ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.scheduling.annotation.Async ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.web.multipart.commons.CommonsMultipartFile ;
import java.io.IOException ;
import java.io.InputStream ;
import java.io.OutputStream ;
import java.util.* ;
import java.util.stream.Collectors ;
@ -38,8 +62,16 @@ import java.util.stream.Collectors;
* @since v1 . 0 . 0 2022 - 03 - 28
* /
@Service
@Slf4j
public class IcEpidemicSpecialAttentionServiceImpl extends BaseServiceImpl < IcEpidemicSpecialAttentionDao , IcEpidemicSpecialAttentionEntity > implements IcEpidemicSpecialAttentionService {
@Autowired
private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient ;
@Autowired
private OssFeignClient ossFeignClient ;
@Autowired
private IcNoticeService noticeService ;
@Override
public PageData < IcEpidemicSpecialAttentionDTO > page ( Map < String , Object > params ) {
IPage < IcEpidemicSpecialAttentionEntity > page = baseDao . selectPage (
@ -106,7 +138,7 @@ public class IcEpidemicSpecialAttentionServiceImpl extends BaseServiceImpl<IcEpi
throw new EpmetException ( "未查询到工作人员信息" + formDTO . getUserId ( ) ) ;
}
formDTO . setOrgId ( staffInfo . getAgencyId ( ) ) ;
// 关注类型,核酸检测:2,疫苗接种:1
// 关注类型,核酸检测:2,疫苗接种:1,行程上报:0
if ( formDTO . getAttentionType ( ) . equals ( NumConstant . ONE ) ) {
if ( formDTO . isPage ( ) ) {
PageInfo < VaccinationListResultDTO > pageInfo = PageHelper . startPage ( formDTO . getPageNo ( ) , formDTO . getPageSize ( ) ) . doSelectPageInfo ( ( ) - > baseDao . vaccinationList ( formDTO ) ) ;
@ -175,7 +207,19 @@ public class IcEpidemicSpecialAttentionServiceImpl extends BaseServiceImpl<IcEpi
e . setCustomerId ( formDTO . getCustomerId ( ) ) ;
} ) ;
insertBatch ( entities ) ;
//TODO 发送通知
//新增通知表信息
List < IcEpidemicSpecialAttentionDTO > needSedNotice = formDTO . getList ( ) . stream ( ) . filter ( l - > CollectionUtils . isNotEmpty ( l . getChannel ( ) ) ) . collect ( Collectors . toList ( ) ) ;
if ( CollectionUtils . isNotEmpty ( needSedNotice ) ) {
SendNoticeFormDTO dto = new SendNoticeFormDTO ( ) ;
List < SendNoticeFormDTO . UserListBean > userListBeans = ConvertUtils . sourceToTarget ( needSedNotice , SendNoticeFormDTO . UserListBean . class ) ;
dto . setCustomerId ( formDTO . getCustomerId ( ) ) ;
dto . setUserList ( userListBeans ) ;
dto . setChannel ( needSedNotice . get ( NumConstant . ZERO ) . getChannel ( ) ) ;
dto . setOrigin ( needSedNotice . get ( NumConstant . ZERO ) . getAttentionType ( ) . toString ( ) ) ;
dto . setContent ( needSedNotice . get ( NumConstant . ZERO ) . getContent ( ) ) ;
dto . setStaffId ( formDTO . getUserId ( ) ) ;
noticeService . sendNotice ( dto ) ;
}
}
/ * *
@ -188,7 +232,7 @@ public class IcEpidemicSpecialAttentionServiceImpl extends BaseServiceImpl<IcEpi
* /
@Override
@Transactional ( rollbackFor = Exception . class )
public void vaccinationUpdate ( IcEpidemicSpecialAttentionDTO formDTO ) {
public void vaccinationUpdate ( IcEpidemicSpecialAttentionDTO formDTO , TokenDto tokenDto ) {
LambdaQueryWrapper < IcEpidemicSpecialAttentionEntity > w = new LambdaQueryWrapper < > ( ) ;
IcEpidemicSpecialAttentionEntity e = new IcEpidemicSpecialAttentionEntity ( ) ;
w . eq ( IcEpidemicSpecialAttentionEntity : : getIdCard , formDTO . getIdCard ( ) )
@ -197,7 +241,17 @@ public class IcEpidemicSpecialAttentionServiceImpl extends BaseServiceImpl<IcEpi
e . setReason ( formDTO . getReason ( ) ) ;
e . setRemark ( formDTO . getRemark ( ) ) ;
update ( e , w ) ;
//TODO 通知
if ( CollectionUtils . isNotEmpty ( formDTO . getChannel ( ) ) ) {
SendNoticeFormDTO dto = new SendNoticeFormDTO ( ) ;
SendNoticeFormDTO . UserListBean userListBean = ConvertUtils . sourceToTarget ( formDTO , SendNoticeFormDTO . UserListBean . class ) ;
dto . setCustomerId ( tokenDto . getCustomerId ( ) ) ;
dto . setUserList ( Arrays . asList ( userListBean ) ) ;
dto . setChannel ( formDTO . getChannel ( ) ) ;
dto . setOrigin ( formDTO . getAttentionType ( ) . toString ( ) ) ;
dto . setContent ( formDTO . getContent ( ) ) ;
dto . setStaffId ( tokenDto . getUserId ( ) ) ;
noticeService . sendNotice ( dto ) ;
}
}
/ * *
@ -214,6 +268,163 @@ public class IcEpidemicSpecialAttentionServiceImpl extends BaseServiceImpl<IcEpi
}
}
/ * *
* Desc : 【 疫苗接种关注名单 , 核酸检测关注名单 】 导入
* @param tokenDto
* @param inputStream
* @param attentionType
* @param taskId
* @author zxc
* @date 2022 / 3 / 29 15 : 35
* /
@Override
@Async
public void importFile ( TokenDto tokenDto , InputStream inputStream , Integer attentionType , String taskId ) {
List < EpidemicSpecialAttentionErrorModel > errorInfo = new ArrayList < > ( ) ;
try {
List < ImportEpidemicSpecialAttention > list = ExcelPoiUtils . importExcel ( inputStream , 0 , 1 , ImportEpidemicSpecialAttention . class ) ;
if ( CollectionUtils . isEmpty ( list ) ) {
closeTask ( taskId , tokenDto . getUserId ( ) , ImportTaskConstants . PROCESS_STATUS_FINISHED_FAIL , "" ) ;
return ;
}
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis . getStaffInfo ( tokenDto . getCustomerId ( ) , tokenDto . getUserId ( ) ) ;
if ( null = = staffInfo ) {
throw new EpmetException ( "未查询到工作人员信息" + tokenDto . getUserId ( ) ) ;
}
AgencyInfoCache agencyInfo = CustomerOrgRedis . getAgencyInfo ( staffInfo . getAgencyId ( ) ) ;
if ( null = = agencyInfo ) {
throw new EpmetException ( "未查询到组织信息" + staffInfo . getAgencyId ( ) ) ;
}
for ( int i = 0 ; i < list . size ( ) ; i + + ) {
list . get ( i ) . setNum ( i + 1 ) ;
list . get ( i ) . setAttentionType ( attentionType ) ;
// list.get(i).setChannel(getChannel(list.get(i).getChannelString()));
if ( StringUtils . isBlank ( list . get ( i ) . getName ( ) ) & & ! list . get ( i ) . getAddStatus ( ) ) {
errorInfo . add ( getErrorInfo ( list . get ( i ) , "姓名不能为空" , i + 1 ) ) ;
list . get ( i ) . setAddStatus ( true ) ;
continue ;
}
if ( StringUtils . isBlank ( list . get ( i ) . getIdCard ( ) ) & & ! list . get ( i ) . getAddStatus ( ) ) {
errorInfo . add ( getErrorInfo ( list . get ( i ) , "身份证号不能为空" , i + 1 ) ) ;
list . get ( i ) . setAddStatus ( true ) ;
continue ;
}
if ( StringUtils . isBlank ( list . get ( i ) . getMobile ( ) ) & & ! list . get ( i ) . getAddStatus ( ) ) {
errorInfo . add ( getErrorInfo ( list . get ( i ) , "电话不能为空" , i + 1 ) ) ;
list . get ( i ) . setAddStatus ( true ) ;
continue ;
}
}
if ( list . size ( ) > errorInfo . size ( ) ) {
Map < String , Long > groupByIdCard = list . stream ( ) . collect ( Collectors . groupingBy ( ImportEpidemicSpecialAttention : : getIdCard , Collectors . counting ( ) ) ) ;
groupByIdCard . forEach ( ( idCard , count ) - > {
if ( Integer . valueOf ( count . toString ( ) ) . compareTo ( 1 ) ! = 0 ) {
for ( ImportEpidemicSpecialAttention i : list ) {
if ( idCard . equals ( i . getIdCard ( ) ) & & ! i . getAddStatus ( ) ) {
errorInfo . add ( getErrorInfo ( i , "数据重复" , i . getNum ( ) ) ) ;
i . setAddStatus ( true ) ;
}
}
}
} ) ;
List < String > idCards = list . stream ( ) . map ( m - > m . getIdCard ( ) ) . collect ( Collectors . toList ( ) ) ;
List < String > existList = baseDao . getExistList ( attentionType , idCards ) ;
if ( CollectionUtils . isNotEmpty ( existList ) ) {
for ( String s : existList ) {
for ( int i = NumConstant . ZERO ; i < list . size ( ) ; i + + ) {
if ( s . equals ( list . get ( i ) . getIdCard ( ) ) & & ! list . get ( i ) . getAddStatus ( ) ) {
errorInfo . add ( getErrorInfo ( list . get ( i ) , "数据已存在" , list . get ( i ) . getNum ( ) ) ) ;
list . get ( i ) . setAddStatus ( true ) ;
continue ;
}
}
}
}
}
Map < Boolean , List < ImportEpidemicSpecialAttention > > groupByStatus = list . stream ( ) . collect ( Collectors . groupingBy ( ImportEpidemicSpecialAttention : : getAddStatus ) ) ;
List < ImportEpidemicSpecialAttention > needInsert = groupByStatus . get ( false ) ;
if ( CollectionUtils . isNotEmpty ( needInsert ) ) {
List < IcEpidemicSpecialAttentionEntity > entities = ConvertUtils . sourceToTarget ( needInsert , IcEpidemicSpecialAttentionEntity . class ) ;
entities . forEach ( e - > {
e . setIsAttention ( NumConstant . ONE ) ;
e . setOrgId ( agencyInfo . getId ( ) ) ;
e . setPid ( agencyInfo . getPid ( ) ) ;
e . setPids ( agencyInfo . getPids ( ) ) ;
e . setCustomerId ( tokenDto . getCustomerId ( ) ) ;
} ) ;
insertBatch ( entities ) ;
// send msg 产品说导入不用发通知
/ * List < ImportEpidemicSpecialAttention > needSendList = needInsert . stream ( ) . filter ( l - > CollectionUtils . isNotEmpty ( l . getChannel ( ) ) ) . collect ( Collectors . toList ( ) ) ;
if ( CollectionUtils . isNotEmpty ( needSendList ) ) {
SendNoticeFormDTO dto = new SendNoticeFormDTO ( ) ;
List < SendNoticeFormDTO . UserListBean > userListBeans = ConvertUtils . sourceToTarget ( needSendList , SendNoticeFormDTO . UserListBean . class ) ;
dto . setCustomerId ( tokenDto . getCustomerId ( ) ) ;
dto . setUserList ( userListBeans ) ;
dto . setChannel ( needSendList . get ( NumConstant . ZERO ) . getChannel ( ) ) ;
dto . setOrigin ( needSendList . get ( NumConstant . ZERO ) . getAttentionType ( ) . toString ( ) ) ;
dto . setContent ( needSendList . get ( NumConstant . ZERO ) . getContent ( ) ) ;
dto . setStaffId ( tokenDto . getUserId ( ) ) ;
noticeService . sendNotice ( dto ) ;
} * /
}
if ( CollectionUtils . isNotEmpty ( errorInfo ) ) {
String url = importOssUpload ( errorInfo , EpidemicSpecialAttentionErrorModel . class ) ;
closeTask ( taskId , tokenDto . getUserId ( ) , ImportTaskConstants . PROCESS_STATUS_FINISHED_FAIL , url ) ;
} else {
closeTask ( taskId , tokenDto . getUserId ( ) , ImportTaskConstants . PROCESS_STATUS_FINISHED_SUCCESS , "" ) ;
}
} catch ( Exception e ) {
log . error ( e . getMessage ( ) ) ;
closeTask ( taskId , tokenDto . getUserId ( ) , ImportTaskConstants . PROCESS_STATUS_FINISHED_FAIL , "" ) ;
}
}
public List < String > getChannel ( String channelString ) {
List < String > result = new ArrayList < > ( ) ;
if ( StringUtils . isBlank ( channelString ) ) {
return result ;
}
String [ ] split = channelString . split ( "," ) ;
for ( String s : split ) {
result . add ( ChannelEnum . getKeyByValue ( s ) ) ;
}
return result ;
}
/ * *
* Desc : 关闭任务
* @param taskId
* @param userId
* @param status
* @param url
* @author zxc
* @date 2022 / 3 / 30 09 : 05
* /
public void closeTask ( String taskId , String userId , String status , String url ) {
ImportTaskCommonFormDTO input = new ImportTaskCommonFormDTO ( ) ;
input . setOperatorId ( userId ) ;
input . setTaskId ( taskId ) ;
input . setProcessStatus ( status ) ;
input . setResultDescFilePath ( url ) ;
commonServiceOpenFeignClient . finishImportTask ( input ) ;
}
/ * *
* Desc : 构造错误信息
* @param dto
* @param info
* @param num
* @author zxc
* @date 2022 / 3 / 29 17 : 17
* /
public EpidemicSpecialAttentionErrorModel getErrorInfo ( ImportEpidemicSpecialAttention dto , String info , Integer num ) {
EpidemicSpecialAttentionErrorModel result = ConvertUtils . sourceToTarget ( dto , EpidemicSpecialAttentionErrorModel . class ) ;
result . setErrorMsg ( info ) ;
result . setNum ( num ) ;
return result ;
}
/ * *
* 传入身份证集合 , 返回已经关注的身份证号列表
*
@ -221,12 +432,58 @@ public class IcEpidemicSpecialAttentionServiceImpl extends BaseServiceImpl<IcEpi
* @return
* /
@Override
public List < String > getHeSuanIdCardList ( String customerId , Se t< String > idCardSet ) {
public List < String > getHeSuanIdCardList ( String customerId , Lis t< String > idCardSet ) {
if ( CollectionUtils . isEmpty ( idCardSet ) ) {
return new ArrayList < > ( ) ;
}
//关注类型,核酸检测:2,疫苗接种:1
return baseDao . getIdCardList ( customerId , idCardSet , NumConstant . TWO ) ;
//关注类型,核酸检测:2,疫苗接种:1,行程上报:0
return baseDao . getIdCardList ( customerId , idCardSet , NumConstant . ZERO ) ;
}
/ * *
* Desc : 文件上传并返回url
* @param errorRows
* @param tClass
* @author zxc
* @date 2022 / 3 / 30 09 : 16
* /
public < T > String importOssUpload ( Collection < ? > errorRows , Class < T > tClass ) throws IOException {
Workbook workbook = ExcelExportUtil . exportExcel ( new ExportParams ( "导入失败的数据列表" , "导入失败的数据列表" ) ,
tClass , errorRows ) ;
// 文件名
String resultDescFileName = UUID . randomUUID ( ) . toString ( ) . concat ( ".xls" ) ;
FileItemFactory factory = new DiskFileItemFactory ( 16 , null ) ;
FileItem fileItem = factory . createItem ( "file" , ContentType . APPLICATION_OCTET_STREAM . toString ( ) , true , resultDescFileName ) ;
OutputStream os = fileItem . getOutputStream ( ) ;
Result < UploadImgResultDTO > uploadResult = null ;
try {
workbook . write ( os ) ;
uploadResult = ossFeignClient . uploadImportTaskDescFile ( new CommonsMultipartFile ( fileItem ) ) ;
} catch ( Exception e ) {
String errormsg = ExceptionUtils . getErrorStackTrace ( e ) ;
log . error ( "上传错误描述文件:{}" , errormsg ) ;
} finally {
try {
os . close ( ) ;
} catch ( IOException e ) {
String errormsg = ExceptionUtils . getErrorStackTrace ( e ) ;
log . error ( "上传错误描述文件关闭输出流:{}" , errormsg ) ;
}
try {
fileItem . delete ( ) ;
} catch ( Exception e ) {
String errormsg = ExceptionUtils . getErrorStackTrace ( e ) ;
log . error ( "上传错误描述文件删除临时文件:{}" , errormsg ) ;
}
}
if ( uploadResult = = null | | ! uploadResult . success ( ) ) {
log . error ( "调用OSS上传结果描述文件失败" ) ;
return null ;
}
return uploadResult . getData ( ) . getUrl ( ) ;
}
}