package com.securitycontrol.system.base.mapper;

import com.securitycontrol.entity.system.base.dto.GxPlanDto;
import com.securitycontrol.entity.system.base.dto.ProDto;
import com.securitycontrol.entity.system.base.dto.ProGxPlanDto;
import com.securitycontrol.entity.system.base.vo.GxPlanVo;
import com.securitycontrol.entity.system.base.vo.ProVo;
import com.securitycontrol.entity.system.vo.ResourceFileVo;
import org.apache.ibatis.annotations.MapKey;
import org.springframework.stereotype.Repository;

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

/**
 * @author：cwchen
 * @date：2024-03-11-10:11
 * @version：1.0
 * @description：工程管理-数据库交互
 */
@Repository(value = "IProMapper")
public interface IProMapper {
    /**
     * 获取工程列表
     *
     * @param dto
     * @return List<RoleVo>
     * @description 获取工程列表
     * @author cwchen
     * @date 2024/3/11 11:00
     */
    List<ProVo> getProLists(ProDto dto);

    /**
     * 工程图片/平面图数量
     *
     * @param proId
     * @return List<Integer>
     * @description
     * @author cwchen
     * @date 2024/3/11 13:45
     */
    List<Integer> getProFiles(String proId);

    /**
     * 新增/修改 工程
     *
     * @param vo
     * @description
     * @author cwchen
     * @date 2024/3/11 14:08
     */
    void addOrUpdatePro(ProVo vo);

    /**
     * 工程详情
     *
     * @param dto
     * @return
     * @description
     * @author cwchen
     * @date 2024/3/11 14:28
     */
    ProVo getProById(ProDto dto);

    /**
     * 删除工程
     *
     * @param dto
     * @description
     * @author cwchen
     * @date 2024/3/11 14:42
     */
    void delPro(ProDto dto);

    /**
     * 删除工程工序计划
     *
     * @param dto
     * @description
     * @author cwchen
     * @date 2024/3/11 14:47
     */
    void delProGxPlan(ProGxPlanDto dto);

    /**
     * 保存文件资源
     *
     * @param vo
     * @description
     * @author cwchen
     * @date 2024/3/12 9:27
     */
    void addFiles(ResourceFileVo vo);

    /**
     * 删除文件
     *
     * @param fileId
     * @description
     * @author cwchen
     * @date 2024/3/12 10:32
     */
    void delFile(String fileId);

    /**
     * 获取工程图片/平面图
     *
     * @param proId
     * @return List<ResourceFileVo>
     * @description
     * @author cwchen
     * @date 2024/3/12 10:55
     */
    List<ResourceFileVo> getFiles(String proId);

    /**
     * 工程完工
     *
     * @param vo
     * @description
     * @author cwchen
     * @date 2024/3/13 15:25
     */
    void editProStatus(ProVo vo);

    /**
     * 获取工序列表
     *
     * @param dto
     * @return List<GxPlanVo>
     * @description
     * @author cwchen
     * @date 2024/3/13 15:55
     */
    List<GxPlanVo> getGxPlanLists(GxPlanDto dto);

    /**
     * 新增/修改 工序计划
     *
     * @param vo
     * @description
     * @author cwchen
     * @date 2024/3/13 16:16
     */
    void addOrUpdateGxPlan(GxPlanVo vo);

    /**
     * 工序计划详情
     *
     * @param dto
     * @return GxPlanVo
     * @description
     * @author cwchen
     * @date 2024/3/13 16:27
     */
    GxPlanVo getGxPlanById(GxPlanDto dto);

    /**
     * 删除工序计划
     *
     * @param dto
     * @description
     * @author cwchen
     * @date 2024/3/13 16:32
     */
    void delGxPlanById(GxPlanDto dto);

    /**
     * 工程是否包含工序计划
     *
     * @param dto
     * @return int
     * @description
     * @author cwchen
     * @date 2024/3/13 16:34
     */
    int isHasGxPlan(ProDto dto);

    /**
     * 当前工序计划是否存在进度填报数据
     *
     * @param dto
     * @return int
     * @description
     * @author cwchen
     * @date 2024/3/16 15:56
     */
    int hasGxProgress(GxPlanDto dto);

    /**
     * 工程是否存在
     *
     * @param vo
     * @return int
     * @description
     * @author cwchen
     * @date 2024/3/16 18:20
     */
    int proIsExist(ProVo vo);

    /**
     * 获取工序计划作业权重占比
     *
     * @param bidCode
     * @return List<Map < String, String>>
     * @description
     * @author cwchen
     * @date 2024/3/20 9:40
     */
    @MapKey("planId")
    List<Map<String, String>> getGxWeight(String bidCode);

    /**
     * 获取工程状态
     *
     * @return Map<String, Map < String, String>>
     * @description
     * @author cwchen
     * @date 2024/3/27 11:05
     */
    @MapKey("name")
    Map<String, Map<String, String>> getProStatus();

    /**
     * 添加工序计划时杆塔是否被重复添加
     * @param vo
     * @return int
     * @description
     * @author cwchen
     * @date 2024/3/29 17:51
     */
    int getTowerIsExist(GxPlanVo vo);
}
