package com.zcxk.evaluation.service.impl;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zcxk.dict.DictUtil;
import com.zcxk.evaluation.dao.EvaluationCycleMapper;
import com.zcxk.evaluation.entity.EvaluationCycleEntity;
import com.zcxk.evaluation.service.EvaluationCycleService;
import com.zcxk.model.LoginUser;
import com.zcxk.org.OrgInfoUtil;
import com.zcxk.util.UserUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

/**
 * 考评周期Service接口
 *
 * @author: WYY
 * @date 2021-05-08 09:09
 */
@Service
public class EvaluationCycleServiceImpl extends ServiceImpl<EvaluationCycleMapper, EvaluationCycleEntity> implements EvaluationCycleService {

    @Resource
    EvaluationCycleMapper evaluationCycleMapper;
    @Autowired
    private OrgInfoUtil orgInfoUtil;
    @Autowired
    private DictUtil dictUtil;
    /**
     * 自定义分页查询，含关联实体对像
     */
    @Override
    public IPage<EvaluationCycleEntity> findPage(IPage<EvaluationCycleEntity> page, EvaluationCycleEntity evaluationCycleEntity) {
        LoginUser currentUser = UserUtil.getCurrentUser();
        if(currentUser!=null) {
            evaluationCycleEntity.setTenantId(currentUser.getTenantId());
            evaluationCycleEntity.setProgramItems(currentUser.getProgramItemList());
            evaluationCycleEntity.setUserType(currentUser.getType());
            //1是公司，2是公司及以下，3部门，4部门及以下，5自定义
            evaluationCycleEntity.setPermissonType(currentUser.getPermissonType());
        }
        Page<EvaluationCycleEntity> iPage = evaluationCycleMapper.findPage(page, evaluationCycleEntity);
        for(EvaluationCycleEntity item:iPage.getRecords()) {
            item.setCompanyOrgName(orgInfoUtil.getOrgName(item.getCompanyOrgId()));
            item.setTypeName(dictUtil.getDictName("SC_EVALUATION_CYCLE ", item.getType()));
        }
        return iPage;
    }
    /**
     * 查列表
     */
    @Override
    public List<EvaluationCycleEntity> findList(EvaluationCycleEntity evaluationCycleEntity) {
        LoginUser currentUser = UserUtil.getCurrentUser();
        if(currentUser!=null) {
            evaluationCycleEntity.setTenantId(currentUser.getTenantId());
            evaluationCycleEntity.setProgramItems(currentUser.getProgramItemList());
            evaluationCycleEntity.setUserType(currentUser.getType());
            //1是公司，2是公司及以下，3部门，4部门及以下，5自定义
            evaluationCycleEntity.setPermissonType(currentUser.getPermissonType());
        }
        return evaluationCycleMapper.findList(evaluationCycleEntity);
    }

    /**
     * 批量删除
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean delEvaluationCycleByIds(Long[] ids) {
        return this.removeByIds(Arrays.asList(ids));
    }

    /**
     * 单个删除
     */
    @Override
    public boolean delEvaluationCycleById(Long id) {
        return this.removeById(id);
    }

    /**
     * 保存
     */
    @Override
    public boolean addEvaluationCycle(EvaluationCycleEntity evaluationCycle) {
        if (this.save(evaluationCycle)) {
            return true;
        }
        return false;
    }

    @Override
    public boolean addBatchEvaluationCycle(List<EvaluationCycleEntity> evaluationCycles) {
        for (EvaluationCycleEntity item : evaluationCycles) {
            this.save(item);
        }
        return true;
    }

    /**
     * 修改根居ID
     */
    @Override
    public boolean updateEvaluationCycleById(EvaluationCycleEntity evaluationCycle) {
        if (this.updateById(evaluationCycle)) {
            return true;
        }
        return false;
    }

    /**
     * 根居ID获取对象
     */
    @Override
    public EvaluationCycleEntity findEvaluationCycleById(Long id) {
        return evaluationCycleMapper.findEvaluationCycleById(id);
    }
}
