package com.docus.server.service.impl;

import com.docus.core.util.ListUtils;
import com.docus.core.util.property.Setters;
import com.docus.infrastructure.web.request.SearchDTO;
import com.docus.infrastructure.web.response.PageResult;
import com.docus.server.convert.SchCollectorVersionLogConvert;
import com.docus.server.dto.scheduling.management.schcollectorversionlog.AddSchCollectorVersionLogDTO;
import com.docus.server.dto.scheduling.management.schcollectorversionlog.DeleteSchCollectorVersionLogDTO;
import com.docus.server.dto.scheduling.management.schcollectorversionlog.EditSchCollectorVersionLogDTO;
import com.docus.server.entity.scheduling.management.SchCollectorVersionLog;
import com.docus.server.entity.scheduling.management.SchSystemParams;
import com.docus.server.infrastructure.dao.ISchCollectorVersionLogDao;
import com.docus.server.infrastructure.dao.ISchSystemParamsDao;
import com.docus.server.service.ISchCollectorVersionLogService;
import com.docus.server.vo.scheduling.management.schcollectorversionlog.SchCollectorVersionLogVO;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * 采集器版本更新日志管理 服务实现类
 *
 * @author AutoGenerator
 * @since 2023-07-15
 */
@Service
public class SchCollectorVersionLogServiceImpl implements ISchCollectorVersionLogService {
    @Resource
    private ISchCollectorVersionLogDao iSchCollectorVersionLogDao;
    @Resource
    private ISchSystemParamsDao iSchSystemParamsDao;

    /**
     * 按主键查询
     *
     * @param id 主键Id
     * @return 实体
     */
    @Override
    public SchCollectorVersionLogVO findById(String id) {
        return SchCollectorVersionLogConvert.INSTANCE.convertVO(iSchCollectorVersionLogDao.findById(id));
    }

    /**
     * 关键字搜索
     *
     * @param searchDTO 搜索参数
     * @return 分页列表
     */
    @Override
    public PageResult<SchCollectorVersionLogVO> search(SearchDTO searchDTO) {
        PageResult<SchCollectorVersionLogVO> result = SchCollectorVersionLogConvert.INSTANCE.convertVO(iSchCollectorVersionLogDao.search(searchDTO));

        if (CollectionUtils.isEmpty(result.getList())) {
            return new PageResult<>();
        }

        List<SchSystemParams> schSystemParams = iSchSystemParamsDao.findBy("paramValue", ListUtils.distinctSelect(result.getList(), SchCollectorVersionLogVO::getCollectorId));
        Map<String, SchSystemParams> taskConfigRetryLogMap = ListUtils.toMap(schSystemParams, SchSystemParams::getParamValue);

        Setters.<SchCollectorVersionLogVO>instance().list(result.getList()).cycleSetProperties(p -> {
            String collectorId = String.valueOf(p.getCollectorId());
            if (taskConfigRetryLogMap.containsKey(collectorId)) {
                p.setCollectorName(taskConfigRetryLogMap.get(collectorId).getParamName());
            }
        });

        return result;
    }

    /**
     * 新增
     *
     * @param addSchCollectorVersionLogDTO 编辑参数
     * @return 成功或失败
     */
    @Override
    public boolean add(AddSchCollectorVersionLogDTO addSchCollectorVersionLogDTO) {
        SchCollectorVersionLog schCollectorVersionLog = SchCollectorVersionLogConvert.INSTANCE.convertDO(addSchCollectorVersionLogDTO);
        return iSchCollectorVersionLogDao.add(schCollectorVersionLog);
    }

    /**
     * 编辑
     *
     * @param editSchCollectorVersionLogDTO 编辑参数
     * @return 成功或失败
     */
    @Override
    public boolean edit(EditSchCollectorVersionLogDTO editSchCollectorVersionLogDTO) {
        SchCollectorVersionLog schCollectorVersionLog = SchCollectorVersionLogConvert.INSTANCE.convertDO(editSchCollectorVersionLogDTO);
        return iSchCollectorVersionLogDao.edit(schCollectorVersionLog);
    }

    /**
     * 批量删除
     *
     * @param deleteSchCollectorVersionLogDTO 删除参数
     * @return 成功或失败
     */
    @Override
    public int delete(DeleteSchCollectorVersionLogDTO deleteSchCollectorVersionLogDTO) {
        return iSchCollectorVersionLogDao.delete(deleteSchCollectorVersionLogDTO.getIds());
    }
}

