package com.hzs.system.sys.service.impl;

import java.text.DecimalFormat;
import java.util.List;

import com.hzs.common.core.enums.EOrderPrefix;
import com.hzs.common.domain.system.sys.SysDept;
import com.hzs.system.sys.param.SysDeptQueryParam;
import com.hzs.system.sys.vo.SysDeptQueryVO;
import org.springframework.stereotype.Service;
import com.hzs.common.core.constant.UserConstants;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.system.sys.mapper.SysDeptMapper;
import com.hzs.system.sys.service.ISysDeptService;

import javax.annotation.Resource;

/**
 * 部门管理 服务实现
 */
@Service
public class SysDeptServiceImpl implements ISysDeptService {

    @Resource
    private SysDeptMapper sysDeptMapper;

    @Override
    public List<SysDeptQueryVO> selectDeptList(SysDeptQueryParam param) {
        return sysDeptMapper.selectDeptList(param);
    }

    @Override
    public SysDept selectDeptById(Long deptId) {
        return sysDeptMapper.selectDeptById(deptId);
    }

    @Override
    public boolean checkDeptExistUser(Long deptId) {
        return sysDeptMapper.checkDeptExistUser(deptId) > 0;
    }

    @Override
    public String checkDeptNameUnique(SysDept dept) {
        long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId();
        SysDept info = sysDeptMapper.checkDeptNameUnique(dept.getDeptName());
        if (StringUtils.isNotNull(info) && info.getDeptId() != deptId) {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    @Override
    public int insertDept(SysDept dept) {
        dept.setDeptCode(this.getNextDeptCode());
        return sysDeptMapper.insertDept(dept);
    }

    @Override
    public int updateDept(SysDept dept) {
        return sysDeptMapper.updateDept(dept);
    }

    @Override
    public int deleteDeptById(Long deptId, Long userId) {
        return sysDeptMapper.deleteDeptById(deptId, userId);
    }

    /**
     * 获取下一个部门编号
     *
     * @return
     */
    private String getNextDeptCode() {
        DecimalFormat decimalFormat = new DecimalFormat("0000");
        String deptCode = sysDeptMapper.getMaxDeptCode();
        if (StringUtils.isEmpty(deptCode)) {
            return EOrderPrefix.DEFAULT.getValue() + decimalFormat.format(1);
        } else {
            return EOrderPrefix.DEFAULT.getValue() + decimalFormat.format(Integer.parseInt(deptCode.replace(EOrderPrefix.DEFAULT.getValue(), "")) + 1);
        }
    }

    @Override
    public List<Long> queryRepeatDept(List<Long> userIdList) {
        return sysDeptMapper.queryRepeatDept(userIdList);
    }

}
