@ -30,6 +30,7 @@ import com.biutag.supervision.pojo.enums.supDict.SupDictEnum;
import com.biutag.supervision.pojo.model.UserAuth ;
import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionExistParam ;
import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionQueryParam ;
import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionRepeatQueryParam ;
import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionUpdateParam ;
import com.biutag.supervision.pojo.param.DataCaseVerifQueryParam ;
import com.biutag.supervision.pojo.param.DataPetitionComplaintQueryParam ;
@ -353,11 +354,11 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic
@Override
public Result < ComplaintCollectionMailRepeattVo > maileRepeatt ( ComplaintCollectionMailRepeattRequest request ) {
List < ComplaintCollectionRepeatDTO > sfssList = buildSfss ( request ) ;
List < ComplaintCollectionRepeatDTO > xfsjList = buildXfsj ( request ) ;
List < ComplaintCollectionRepeatDTO > ajhcList = buildAjhc ( request ) ;
List < ComplaintCollectionRepeatDTO > jzxxList = buildJzxx ( request ) ;
// List<ComplaintCollectionRepeatDTO> xfsjList = buildXfsj(request);
// List<ComplaintCollectionRepeatDTO> ajhcList = buildAjhc(request);
// List<ComplaintCollectionRepeatDTO> jzxxList = buildJzxx(request);
AtomicInteger seqNo = new AtomicInteger ( 1 ) ;
List < ComplaintCollectionRepeatDTO > complaintCollectionRepeatDTOS = Stream . of ( sfssList , xfsjList , ajhcList , jzxxList )
List < ComplaintCollectionRepeatDTO > complaintCollectionRepeatDTOS = Stream . of ( sfssList )
. flatMap ( Collection : : stream )
. filter ( dto - > StrUtil . isNotBlank ( dto . getOriginId ( ) ) )
. collect ( Collectors . toMap (
@ -780,13 +781,14 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic
private List < ComplaintCollectionRepeatDTO > buildSfss (
ComplaintCollectionMailRepeattRequest request ) {
ComplaintCollectionQueryParam param = new ComplaintCollectionQueryParam ( ) ;
// 转换为查重专用参数
ComplaintCollectionRepeatQueryParam param = new ComplaintCollectionRepeatQueryParam ( ) ;
param . setResponderIdCode ( request . getResponderIdCode ( ) ) ;
param . setResponderName ( request . getResponderName ( ) ) ;
param . setResponderPhone ( request . getResponderPhone ( ) ) ;
Map < String , String > sourceDict = buildDictLabelMap ( SupDictEnum . SFSS_SOURCE_TABLE . getCode ( ) ) ;
return complaintCollectionResourceService . query ( param )
. stream ( )
// 调用新的查重方法
return complaintCollectionResourceService . queryForRepeatCheck ( param ) . stream ( )
. map ( item - > {
ComplaintCollectionRepeatDTO dto = new ComplaintCollectionRepeatDTO ( ) ;
BeanUtil . copyProperties ( item , dto ) ;
@ -1414,5 +1416,90 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic
log . info ( "【局长信箱迁移】迁移完成: 成功={}, 跳过={}, 失败={}" , successCount , skipCount , failCount ) ;
}
@Override
@Transactional ( rollbackFor = Exception . class )
public Result < Boolean > mergeComplaintCollection ( ComplaintCollectionMergeRequest request ) {
log . info ( "【合并投诉记录】开始合并: targetId={}, responderName={}" , request . getTargetId ( ) , request . getResponderName ( ) ) ;
// 1. 根据 targetId 查询目标记录
ComplaintCollectionQueryParam param = new ComplaintCollectionQueryParam ( ) ;
param . setId ( request . getTargetId ( ) ) ;
List < ComplaintCollection > targetList = complaintCollectionResourceService . query ( param ) ;
if ( CollectionUtil . isEmpty ( targetList ) ) {
throw new IllegalStateException ( "未找到目标记录: " + request . getTargetId ( ) ) ;
}
ComplaintCollection target = targetList . get ( 0 ) ;
// 2. 构建合并记录(包含所有步骤1字段)
Map < String , Object > mergeRecord = new HashMap < > ( ) ;
mergeRecord . put ( "mergeTime" , LocalDateTime . now ( ) . format ( DateTimeFormatter . ofPattern ( "yyyy-MM-dd HH:mm:ss" ) ) ) ;
mergeRecord . put ( "sourceTable" , request . getSourceTable ( ) ) ;
mergeRecord . put ( "sourceTableSubOne" , request . getSourceTableSubOne ( ) ) ;
mergeRecord . put ( "originId" , request . getOriginId ( ) ) ;
mergeRecord . put ( "discoveryTime" , request . getDiscoveryTime ( ) ) ;
mergeRecord . put ( "businessTypeCode" , request . getBusinessTypeCode ( ) ) ;
mergeRecord . put ( "responderName" , request . getResponderName ( ) ) ;
mergeRecord . put ( "responderIdCode" , request . getResponderIdCode ( ) ) ;
mergeRecord . put ( "responderPhone" , request . getResponderPhone ( ) ) ;
mergeRecord . put ( "secondDepartId" , request . getSecondDepartId ( ) ) ;
mergeRecord . put ( "secondDepartName" , request . getSecondDepartName ( ) ) ;
mergeRecord . put ( "thingDesc" , request . getThingDesc ( ) ) ;
// 3. 解析附件列表
List < Map < String , String > > fileList = new ArrayList < > ( ) ;
if ( StrUtil . isNotBlank ( request . getFiles ( ) ) ) {
try {
fileList = JSON . parseObject ( request . getFiles ( ) , new com . alibaba . fastjson2 . TypeReference < List < Map < String , String > > > ( ) { } ) ;
} catch ( Exception e ) {
log . warn ( "【合并投诉记录】解析附件列表失败: {}" , e . getMessage ( ) ) ;
}
}
mergeRecord . put ( "files" , fileList ) ;
// 4. 读取现有 merge_history,追加新记录
List < Map < String , Object > > merges = new ArrayList < > ( ) ;
if ( StrUtil . isNotBlank ( target . getMergeHistory ( ) ) ) {
try {
Map < String , Object > existingHistory = JSON . parseObject ( target . getMergeHistory ( ) , new com . alibaba . fastjson2 . TypeReference < Map < String , Object > > ( ) { } ) ;
if ( existingHistory ! = null & & existingHistory . get ( "merges" ) ! = null ) {
merges = ( List < Map < String , Object > > ) existingHistory . get ( "merges" ) ;
}
} catch ( Exception e ) {
log . warn ( "【合并投诉记录】解析 merge_history 失败,使用空列表: {}" , e . getMessage ( ) ) ;
}
}
merges . add ( mergeRecord ) ;
// 5. 使用 updateSelectiveById 更新目标记录
ComplaintCollectionUpdateParam updateParam = new ComplaintCollectionUpdateParam ( ) ;
updateParam . setId ( target . getId ( ) ) ;
updateParam . setMergeHistory ( JSON . toJSONString ( Map . of ( "merges" , merges ) ) ) ;
updateParam . setRepeatt ( "1" ) ; // 标记为重复件
updateParam . setUpdateTime ( LocalDateTime . now ( ) ) ;
updateParam . setUpdateBy ( UserContextHolder . getCurrentUser ( ) . getUserName ( ) ) ;
complaintCollectionResourceService . updateSelectiveById ( updateParam ) ;
log . info ( "【合并投诉记录】合并成功: targetId={}, 当前合并次数={}" , target . getId ( ) , merges . size ( ) ) ;
return Result . success ( true ) ;
}
@Override
public Result < String > getMergeHistory ( ComplaintCollectionDetailRequest request ) {
// 1. 查询主表数据
ComplaintCollectionQueryParam queryParam = new ComplaintCollectionQueryParam ( ) ;
queryParam . setId ( request . getId ( ) ) ;
queryParam . setNegativeId ( request . getNegativeId ( ) ) ;
List < ComplaintCollection > query = complaintCollectionResourceService . query ( queryParam ) ;
if ( CollectionUtil . isEmpty ( query ) ) {
throw new NoSuchElementException ( "未找到对应投诉举报数据,id:" + request . getId ( ) ) ;
}
ComplaintCollection complaintCollection = query . get ( 0 ) ;
// 2. 返回 merge_history 字段
return Result . success ( complaintCollection . getMergeHistory ( ) ) ;
}
}