package com.njcn.serviceimpl.system;

import com.njcn.mapper.system.SystemMapper;
import com.njcn.pojo.system.SubSystem;
import com.njcn.service.system.SystemService;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import tk.mybatis.mapper.entity.Example;

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

/**
 * @author hongawen
 * @date: 2019/9/24 11:17
 */
@Service
public class SystemServiceImpl implements SystemService {

    @Resource
    private SystemMapper systemMapper;

    /**
     * 获取激活的系统
     */
    @Override
    public List<SubSystem> getActiveSystem() {
        Example example=new Example(SubSystem.class);
        example.createCriteria().andEqualTo("active",1).andEqualTo("state",1);
        return systemMapper.selectByExample(example);
    }

    /**
     * 获取所有子系统
     */
    @Override
    public List<SubSystem> getSystems() {
        Example example=new Example(SubSystem.class);
        example.createCriteria().andEqualTo("state",1);
        example.setOrderByClause("DEFAULT_SYSTEM desc,SYSTEM_ENAME desc");
        return systemMapper.selectByExample(example);
    }

    /**
     * 隐藏子系统
     * 需要注意，如果当前的是默认，需要将另外一个设置为默认项目，如果当前不是默认项目则直接隐藏
     * @param systemIndex 系统索引
     */
    @Override
    public void hideSystem(String systemIndex) {
        SubSystem subSystem= new SubSystem();
        subSystem.setSystemIndex(systemIndex);
        subSystem=systemMapper.selectByPrimaryKey(subSystem);
        if(subSystem.getDefaultSystem()==1){
            Example example=new Example(SubSystem.class);
            example.createCriteria().andEqualTo("state",1).andNotEqualTo("systemIndex",systemIndex).andEqualTo("active",1);
            List<SubSystem> subSystems=systemMapper.selectByExample(example);
            if(!CollectionUtils.isEmpty(subSystems)){
                SubSystem temp=subSystems.get(0);
                temp.setDefaultSystem(1);
                systemMapper.updateByPrimaryKey(temp);
            }
        }
        subSystem.setActive(0);
        subSystem.setDefaultSystem(0);
        systemMapper.updateByPrimaryKey(subSystem);
    }

    /**
     * 激活显示子系统
     * 需要注意，如果所有的系统都是隐藏的，那么需要将当前激活的子系统设置为默认系统
     * @param systemIndex 系统索引
     */
    @Override
    public void displaySystem(String systemIndex) {
        SubSystem subSystem= new SubSystem();
        subSystem.setSystemIndex(systemIndex);
        subSystem=systemMapper.selectByPrimaryKey(subSystem);
        Example example=new Example(SubSystem.class);
        example.createCriteria().andEqualTo("state",1).andEqualTo("active",1);
        List<SubSystem> subSystems=systemMapper.selectByExample(example);
        if(CollectionUtils.isEmpty(subSystems)){
            subSystem.setDefaultSystem(1);
        }
        subSystem.setActive(1);
        systemMapper.updateByPrimaryKey(subSystem);
    }

    /**
     * 设置子系统为默认
     * 需要注意 需要将其他子系统设置为非默认
     * @param systemIndex 系统索引
     */
    @Override
    public void defaultSystem(String systemIndex) {
        systemMapper.unDefaultSubSystem(systemIndex);
        systemMapper.defaultSubSystem(systemIndex);
    }
}
