package com.panzhihua.sangeshenbian.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.sangeshenbian.SystemUserVo;
import com.panzhihua.sangeshenbian.model.dto.ComplaintCompletionDTO;
import com.panzhihua.sangeshenbian.model.dto.ComplaintProcessDTO;
import com.panzhihua.sangeshenbian.model.dto.*;
import com.panzhihua.sangeshenbian.model.entity.Complaint;
import com.baomidou.mybatisplus.extension.service.IService;
import com.panzhihua.sangeshenbian.model.entity.ComplaintAuditRecord;
import com.panzhihua.sangeshenbian.model.entity.ComplaintProgress;
import com.panzhihua.sangeshenbian.model.query.AnalyticStatisticsQuery;
import com.panzhihua.sangeshenbian.model.query.AppStaticsQuery;
import com.panzhihua.sangeshenbian.model.query.BasePage;
import com.panzhihua.sangeshenbian.model.query.ComplaintQuery;
import com.panzhihua.sangeshenbian.model.vo.*;
import com.panzhihua.sangeshenbian.warpper.MgtComplaintQuery;
import javax.validation.Valid;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
/**
*
* 问题报告表 服务类
*
*
* @author
* @since 2025-02-22
*/
public interface IComplaintService extends IService {
void saveComplaint(Complaint complaint,LoginUserInfoVO loginUserInfoVO);
/**
* 诉求列表
*
* @param query
* @param loginUserInfoVO
* @return
*/
Page complaintList(ComplaintQuery query, LoginUserInfoVO loginUserInfoVO);
/**
* 工单详情
* @param id
* @return
*/
ComplaintVO detail(Long id, LoginUserInfoVO loginUserInfoVO);
/**
* 保存办理进度
*
* @param dto
* @param loginUserInfoVO
*/
void saveProcess(ComplaintProcessDTO dto, LoginUserInfoVO loginUserInfoVO);
/**
* 办理结果录入
*
* @param dto
* @param loginUserInfoVO
*/
void saveResult(ComplaintCompletionDTO dto, LoginUserInfoVO loginUserInfoVO);
/**
* 办理进度列表
* @param complaintId
* @return
*/
List progress(Long complaintId);
void saveAndReport(ComplaintVO complaintVO, LoginUserInfoVO loginUserInfo);
/**
* 诉求上报
*/
void saveReport(ComplaintReportDTO dto, LoginUserInfoVO loginUserInfoVO);
void saveAndComplete(@Valid ComplaintSaveAndCompleteDTO complaintVO, LoginUserInfoVO loginUserInfo);
/**
* 诉求上报撤回
*/
void reportWithdraw(ComplaintReportWithdrawDTO dto, LoginUserInfoVO loginUserInfoVO);
/**
* 诉求下派
*/
void saveDispatch(ComplaintDispatch dto, LoginUserInfoVO loginUserInfoVO);
/**
* 上报审核
* @param complaintReporAuditDTO
* @param loginUserInfoVO
*/
void reportAudit(ComplaintReporAuditDTO complaintReporAuditDTO, LoginUserInfoVO loginUserInfoVO);
/**
* 延期申请
*/
void saveDelay(ComplaintDelayDTO dto, LoginUserInfoVO loginUserInfoVO);
/**
* 延期审核
*/
void delayAudit(ComplaintDelayAuditDTO complaintDelayAuditDTO, LoginUserInfoVO loginUserInfoVO);
List getDispatchList(LoginUserInfoVO loginUserInfoVO);
/**
* 获取待办诉求
* @param page
* @param loginUserInfo
* @return
*/
Page getTodoList(BasePage page, LoginUserInfoVO loginUserInfo);
/**
* 延期情况说明
* @param complaintId
* @return
*/
ComplaintAuditRecord delayDetail(Long complaintId);
/**
* 管理后台-诉求列表
*
* @param query
* @param loginUserInfo
* @return
*/
Page pageList(MgtComplaintQuery query, SystemUserVo loginUserInfo);
/**
* 管理后台-诉求详情
* @param id
* @return
*/
ComplaintVO getDetailMgt(Long id);
/**
* 诉求列表导出
* @param query
* @param loginUserInfo
*/
void export(MgtComplaintQuery query, SystemUserVo loginUserInfo) throws IOException;
/**
* 社区问题单、问题处理单、协调通知单 下载
*
* @param id
* @param loginUserInfo
*/
String downloadFile(Long id, Integer type, SystemUserVo loginUserInfo) throws IOException;
/**
* 获取超时未评价的数据
* @return
*/
List getTimeoutAndNotComment();
/**
* 修改办理进度
* @param dto
*/
void updateProgress(ComplaintProcessUpdateDto dto);
/**
* 删除办理进度
* @param id
*/
void delProgress(Long id);
/**
* 数据统计第一部分
* @param query
* @return
*/
AnalyticStatisticsOneVo analyticStatisticsOne(AnalyticStatisticsQuery query,List complaints, SimpleDateFormat simpleDateFormat);
/**
* 数据统计第二部分
*
* @param time
* @param complaints
* @param simpleDateFormat
* @return
*/
List analyticStatisticsTwo(String time, List complaints, SimpleDateFormat simpleDateFormat);
/**
* +
* 数据统计第三部分
*
* @param rank
* @param complaints
* @return
*/
List analyticStatisticsThree(Integer rank, List complaints);
/**
* 数据统计第四部分
* @param complaints
* @return
*/
AnalyticStatisticsFourVo analyticStatisticsFour(List complaints);
/**
* 查询党员或上级对应的诉求列表
* @param query
* @param loginUserInfo
* @return
*/
List queryCompliantList(AppStaticsQuery query, LoginUserInfoVO loginUserInfo);
}