package com.goldenwater.slaj.hidd.service;

import java.util.List;
import java.util.Map;
import com.goldenwater.slaj.hidd.domain.BisOrgMonRepPeri;
/**
 * 月报期间 服务层
 */
public interface IBisOrgMonRepPeriService {

    /**
     * 查询月报期间信息
     * @param guid 查询条件
     * @return 月报期间信息
     */
    BisOrgMonRepPeri selectBisOrgMonRepPeriByGuid(String guid);

    /**
     * 查询月报期间列表
     * @param bisOrgMonRepPeri 月报期间查询条件
     * @return 月报期间集合
     */
    List<BisOrgMonRepPeri> selectBisOrgMonRepPeriList(BisOrgMonRepPeri bisOrgMonRepPeri);

    /**
     * 新增月报期间
     * @param bisOrgMonRepPeri 月报期间信息
     * @return 影响行数
     */
    int insertBisOrgMonRepPeri(BisOrgMonRepPeri bisOrgMonRepPeri);

    /**
     * 修改月报期间
     * @param bisOrgMonRepPeri 月报期间信息
     * @return 影响行数
     */
    int updateBisOrgMonRepPeri(BisOrgMonRepPeri bisOrgMonRepPeri);

    /**
     * 删除月报期间
     * @param guid 月报期间主键
     * @return 影响行数
     */
    int deleteBisOrgMonRepPeriByGuid(String guid);

    /**
     * 批量删除月报期间
     * @param guids 月报期间主键数组
     * @return 影响行数
     */
    int deleteBisOrgMonRepPeriByGuids(String[] guids);

    /**
     * 月报树形数据
     * @param parentGuid 父节点GUID
     * @return 树形数据
     */
    List<Map<String, Object>> selectRepTreeData(String parentGuid);

    /**
     * 查询月报汇总
     * @param params 查询参数
     * @return 月报汇总列表
     */
    List<Map<String, Object>> selectMonthTotalList(Map<String, Object> params);

    /**
     * 查询月报列表统计（按单位分组）
     * @param params 查询参数（repTime, repOrgGuid, unitType）
     * @return 月报列表统计
     */
    List<Map<String, Object>> selectMonthListStats(Map<String, Object> params);

    /**
     * 提交月报
     * @param guid 月报ID
     * @param hiddGuids 隐患ID数组
     */
    void submitMonth(String guid, String[] hiddGuids);

    /**
     * 退回月报
     * @param guid 月报ID
     * @param returnDesc 退回说明
     * @return 结果
     */
    int returnMonth(String guid, String returnDesc);

    /**
     * 撤销月报
     * @param guid 月报ID
     * @param revocDesc 撤销原因
     * @return 结果
     */
    int revokeMonth(String guid, String revocDesc);

    /**
     * 审核撤销
     * @param guid 月报ID
     * @param approved 是否通过
     * @param opinion 审批意见
     * @return 结果
     */
    int approveRevoke(String guid, boolean approved, String opinion);

    /**
     * 批量解锁月报
     * @param guids 月报ID数组
     * @return 结果
     */
    int batchUnlock(String[] guids);

    /**
     * 督促上报
     * @param orgGuids 组织机构ID数组（逗号分隔）
     * @param repName 上报期间
     */
    void urgeReport(String orgGuids, String repName);

    /**
     * 检查是否可以撤销上报
     * @param month 月份
     * @param type 类型
     * @return 是否可以撤销
     */
    boolean checkCanRevoke(String month, String type);
}
