package com.zd.laboratory.service;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.zd.common.core.domain.R;
import com.zd.laboratory.domain.LabBlacklist;
import com.zd.laboratory.domain.LabNegativelistHistory;
import com.zd.laboratory.domain.LabViolation;
import com.zd.laboratory.domain.dto.LabViolationDTO;
import com.zd.laboratory.domain.vo.*;
import org.apache.commons.collections4.map.LinkedMap;

/**
 * 违规记录Service接口
 *
 * @author zd
 * @date 2021-09-01
 */
public interface ILabViolationService {
    /**
     * 查询违规记录
     *
     * @param id 违规记录主键
     * @return 违规记录
     */
    public LabViolation selectLabViolationById(Long id);

    /**
     * 查询违规记录列表
     *
     * @param labViolation 违规记录
     * @return 违规记录集合
     */
    public List<LabViolationVO> selectLabViolationList(LabViolationVO labViolation);

    /**
     * 查询违规记录详细列表
     *
     * @param labViolation 违规记录
     * @return 违规记录集合
     */
    public List<LabViolationVO> getDetailList(LabViolationVO labViolation);

    /**
     * 查询违规记录列表VO
     *
     * @param labViolation
     * @return
     */
    public List<LabViolationVO> selectLabViolationVOList(LabViolationDTO labViolation);
    /**
     * 查询自己的违规记录
     *
     * @param labViolation
     * @return
     */

    public List<LabViolationVO> selectMyLabViolationVOList(LabViolationDTO labViolation);

    /**
     * 新增违规记录
     *
     * @return 结果
     */
    public int insertLabViolation(LabViolationVO labViolationVO);

    /**
     * 修改违规记录
     *
     * @param labViolation 违规记录
     * @return 结果
     */
    public int updateLabViolation(LabViolation labViolation);

    /**
     * 批量删除违规记录
     *
     * @param ids 需要删除的违规记录主键集合
     * @return 结果
     */
    public int deleteLabViolationByIds(Long[] ids);

    /**
     * 删除违规记录信息
     *
     * @param id 违规记录主键
     * @return 结果
     */
    public int deleteLabViolationById(Long id);


    /**
     * 小程序工作台，查询违规记录统计
     *
     * @param labViolation 违规记录
     * @return 小程序工作台，查询违规记录统计
     */
    public Map<String, Object> myViolationCount(LabViolation labViolation);

    /**
     * 小程序查询违规记录列表
     *
     * @param labViolation 违规记录
     * @return 违规记录集合
     */
    public List<LabViolationVO> mylist(LabViolationVO labViolation);

    /**
     * 大屏 人员违规统计
     *
     * @param labViolation 违规记录
     * @return 违规记录集合
     */
    List<Map<String, Object>> statistics(LabViolation labViolation);

    /**
     * 大屏 人员违规统计
     *
     * @param labViolation 违规记录
     * @return 违规记录集合
     */
    LinkedHashMap <String,Object> newStatistics(LabViolation labViolation);

    /**
     * 大屏详情 人员违规柱状图统计
     *
     * @param labViolationVO 违规记录
     * @return 违规记录集合
     */
    List<Object> columnar(LabViolationVO labViolationVO);

    /**
     * 大屏详情 实验室人员违规统计列表（校级）
     *
     * @param labViolationVO 违规记录
     * @return 违规记录集合
     */
    List<LabViolationColumnarVO> subListBySchool(LabViolationVO labViolationVO);


    /**
     * 大屏详情 实验室人员违规统计列表（院级）
     *
     * @param labViolationVO 违规记录
     * @return 违规记录集合
     */
    List<LabViolationSubListVO> subList(LabViolationVO labViolationVO);

    List<LabViolationVO> pageList(LabViolationVO labViolation);

    R removeNegativelist(LabViolationVO labViolation);

    R addViolationHistory(ViolationNewVo vo);

    int updateStatus(Long joinUserId, Long i);

    R updateNegiveStatus(LabNegativeListRecordsVO vo);

    R updateNegiveStatusByPc(LabNegativeListRecordsVO vo);

    R blackAdd(LabBlacklistVO labBlacklistVO);

    /**
     * 0：正常,1:负面清单，2：黑名单
     * @param userId
     * @return
     */
    R userexist(Long userId);

    /**
     * 根据用户id或数据id更新:1:正常，2：负面清单,3,黑名单
     * @param userId
     * @return
     */
    int updateTabs(Long userId,Long id);

    R delBlacklist(LabBlacklist labBlacklist);

    R delBlacklistByPc(LabBlacklist labBlacklist);

    public Integer getScore();

    public void resetCreditScore(Long userId);

    public R getPersonInfo();

    R exist();

    /**
     * 从黑名单移除后恢复用户状态
     * @param userId
     * @param reason
     * @return
     */
    public R resetUserStatus(Long userId,String reason);

    /**
     * 从黑名单移除后此用户变为以恢复
     * @param userId
     * @param reason
     * @return
     */
    public R resetUserRecovery(Long userId,String reason);
}
