java 메시지 답장 기능 구현(무한 답장 귀속 가능)

java 메시지 답장 기능 구현(무한 답장 귀속 가능)


오늘 한 항목의 수요에 부딪히면 댓글의 피드백에 답장을 하는 기능을 추가해야 한다. 처음에는 좀 복잡하게 생각했지만 마지막에 생각을 훑어보니 거의 두 시간 만에 드디어 썼다.사실 모든 데이터를 한 번만 조회한 다음에 귀속 조작을 하면 된다.
먼저 실체 클래스 피드백 메시지를 보십시오: FeedbackMessage(BaseDomain은 기본적인 실체 클래스일 뿐입니다)
@Entity
@Getter
@Setter
@Accessors(chain = true)
@Table(name = "jl_supervision_proc_feedback")
public class FeedbackMessage extends BaseDomain {
    private static final long serialVersionUID = -8595377684297725344L;

    @ApiModelProperty(" ")
    @Lob
    @Column(columnDefinition = "TEXT")
    private String info;

    /**
     *  id
     */
    @Column(name = "fileIds")
    @ApiModelProperty(" id, &&& ")
    private String fileIds;

    @ApiModelProperty(" id  ")
    private Long parentId;
}

응답 클래스: FeedbackMessageResponse
@ApiModel
@Data
@Accessors(chain = true)
public class FeedbackMessageResponse {
    @ApiModelProperty(" id")
    private Long id;

    @ApiModelProperty(" ")
    private String info;

    @ApiModelProperty(" : ")
    private List> listMap = new ArrayList<>();

    @ApiModelProperty(" ")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;

    @ApiModelProperty(value = " 、 id")
    private Long operatorId;

    @ApiModelProperty(value = " ")
    private String operatorName;

    @ApiModelProperty(value = " id")
    private Long parentId;

    @ApiModelProperty(" ")
    List childen = new ArrayList<>();
}

이전 클래스와의 차이는 단지 코드를 한 줄 추가했을 수도 있다
	@ApiModelProperty(" ")
    List childen = new ArrayList<>();

핵심 코드만 붙이면 다른 업무 논리는 자신의 업무에 따라 추가할 수 있다
			List treeResponseArrayList = new ArrayList<>();
	        List responses;
			//  jpa 
			page = feedbackMessageRepository.findAll(specification, pageRequest)
                                            .map(this::getBean);
            //  
            page.getContent().forEach(o -> {
                FeedbackMessageResponse treeResponse = new FeedbackMessageResponse();
                ObjectUtil.copyNotNullBean(o,treeResponse);
                treeResponseArrayList.add(treeResponse);
            });
            responses = this.getTreeReponse(treeResponseArrayList);

패키지 트리 구조:getTreeReponse
	/**
     *  
     * @param treeResponseArrayList  
     * @return  
     */
    private List getTreeReponse(List treeResponseArrayList) {
        //  、 
        List listParentRecord = new ArrayList<>();
        List listNotParentRecord = new ArrayList<>();
        //  、 
        treeResponseArrayList.forEach(o -> {
            if (o.getParentId() == null){
                //  
                listParentRecord.add(o);
            }else {
                //  
                listNotParentRecord.add(o);
            }
        });

        //  
        if (CollectionUtil.isNotEmpty(listParentRecord)){
            listParentRecord.forEach(parent -> {
                parent.setChilden(this.getChilden(parent.getId(),listNotParentRecord));
            });
        }
        return listParentRecord;
    }

모든 하위 노드 쿼리 반복: getChilden
	/**
     *  
     * @param parentId  id
     * @param childenList  
     * @return  
     */
    private List getChilden(Long parentId, List childenList) {
        //  、 
        List listParentRecord = new ArrayList<>();
        List listNotParentRecord = new ArrayList<>();
        //  childenList 、 
        childenList.forEach(record -> {
            if (ObjectUtil.equal(parentId,record.getParentId())){
                listParentRecord.add(record);
            }else {
                listNotParentRecord.add(record);
            }
        });

        //  
        if (CollectionUtil.isNotEmpty(listParentRecord)){
            listParentRecord
                    .forEach(record -> record.setChilden(this.getChilden(record.getId(),listNotParentRecord)));
        }

        return listParentRecord;
    }

주석은 매우 상세하게 썼을 것이니, 모두가 자세히 보면 모두 이해할 수 있을 것이다.이것은 실제 프로젝트에서 사용하는 것이기 때문에 코드가 틀림없이 맞을 것이다.모르는 게 있으면 질문도 환영합니다.

좋은 웹페이지 즐겨찾기