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

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

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.beans.factory.annotation.Autowired;
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;

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

    @Autowired
    private SysDeptMapper sysDeptMapper;

    /**
     * 查询部门管理数据
     *
     * @param param
     * @return
     */
    @Override
    public List<SysDeptQueryVO> selectDeptList(SysDeptQueryParam param) {
        return sysDeptMapper.selectDeptList(param);
    }

    /**
     * 根据部门ID查询信息
     *
     * @param deptId 部门ID
     * @return 部门信息
     */
    @Override
    public SysDept selectDeptById(Long deptId) {
        return sysDeptMapper.selectDeptById(deptId);
    }

    /**
     * 查询部门是否存在用户
     *
     * @param deptId 部门ID
     * @return 结果 true 存在 false 不存在
     */
    @Override
    public boolean checkDeptExistUser(Long deptId) {
        return sysDeptMapper.checkDeptExistUser(deptId) > 0;
    }

    /**
     * 校验部门名称是否唯一
     *
     * @param dept 部门信息
     * @return 结果
     */
    @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;
    }

    /**
     * 新增保存部门信息
     *
     * @param dept 部门信息
     * @return 结果
     */
    @Override
    public int insertDept(SysDept dept) {
        dept.setDeptCode(this.getNextDeptCode());
        return sysDeptMapper.insertDept(dept);
    }

    /**
     * 修改保存部门信息
     *
     * @param dept 部门信息
     * @return 结果
     */
    @Override
    public int updateDept(SysDept dept) {
        return sysDeptMapper.updateDept(dept);
    }

    /**
     * 删除部门管理信息
     *
     * @param deptId 部门ID
     * @param userId
     * @return
     */
    @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 "HZS" + decimalFormat.format(1);
        } else {
            return "HZS" + decimalFormat.format(Integer.parseInt(deptCode.replace("HZS", "")) + 1);
        }
    }

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

}
