package com.ruoyi.system.service.impl;

import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.Dangan;
import com.ruoyi.system.domain.DanganFile;
import com.ruoyi.system.mapper.DanganFileMapper;
import com.ruoyi.system.mapper.DanganMapper;
import com.ruoyi.system.service.IDanganService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * 档案管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2022-10-20
 */
@Service
public class DanganServiceImpl implements IDanganService
{
    @Autowired
    private DanganMapper danganMapper;
    @Autowired
    private DanganFileMapper danganFileMapper;

    /**
     * 查询档案管理
     * 
     * @param fileId 档案管理ID
     * @return 档案管理
     */
    @Override
    public Dangan selectDanganById(Long fileId)
    {
        return danganMapper.selectDanganById(fileId);
    }

    /**
     * 查询档案管理列表
     * 
     * @param dangan 档案管理
     * @return 档案管理
     */
    @Override
    public List<Dangan> selectDanganList(Dangan dangan)
    {
        return danganMapper.selectDanganList(dangan);
    }

    /**
     * 新增档案管理
     * 
     * @param dangan 档案管理
     * @return 结果
     */
    @Override
    @Transactional
    public int insertDangan(Dangan dangan)
    {
        dangan.setCreateTime(DateUtils.getNowDate());
        int result= danganMapper.insertDangan(dangan);
        if(result>0){
            if(StringUtils.isNotEmpty(dangan.getFileName()) && StringUtils.isNotEmpty(dangan.getFilePath())){
                saveFileInfo(dangan);
            }
        }
        return result;
    }

    /**
     * 修改档案管理
     * 
     * @param dangan 档案管理
     * @return 结果
     */
    @Override
    @Transactional
    public int updateDangan(Dangan dangan)
    {
        dangan.setUpdateTime(DateUtils.getNowDate());
        if(StringUtils.isNotEmpty(dangan.getFileName()) && StringUtils.isNotEmpty(dangan.getFilePath())){
            //删除以前的附件
            danganFileMapper.deleteFileByDanganId(dangan.getDanganId());
            saveFileInfo(dangan);
        }
        return danganMapper.updateDangan(dangan);
    }

    @Override
    public Dangan selectDanganByDanganName(String danganName) {
        return danganMapper.selectDanganByDanganName(danganName);
    }

    /**
     * 删除档案管理对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteDanganByIds(String ids)
    {
        return danganMapper.deleteDanganByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除档案管理信息
     * 
     * @param fileId 档案管理ID
     * @return 结果
     */
    @Override
    public int deleteDanganById(Long fileId)
    {
        return danganMapper.deleteDanganById(fileId);
    }

    //往附件表中添加
    public void saveFileInfo(Dangan dangan){
        if(StringUtils.isNotEmpty(dangan.getFileName()) && StringUtils.isNotEmpty(dangan.getFilePath())){
            String[] fileNames = dangan.getFileName().split(",");
            String[] filePaths = dangan.getFilePath().split(",");
            if(fileNames.length == filePaths.length){
                List<DanganFile> fileInfoList = new ArrayList<DanganFile>();
                for(int i = 0; i < fileNames.length; i++){
                    DanganFile fileInfo = new DanganFile();
                    fileInfo.setFileName(fileNames[i]);
                    fileInfo.setFilePath(filePaths[i]);
                    fileInfo.setDanganId(dangan.getDanganId());
                    fileInfoList.add(fileInfo);
                }
                if(fileInfoList.size() > 0){
                    danganFileMapper.batchFileInfo(fileInfoList);
                }
            }
        }
    }

    /**
     * 校验名称是否唯一
     *
     * @param loginName 档案名称
     * @return 结果
     */
    public String checkDanganNameUnique(String loginName){
        int count = danganMapper.checkDanganNameUnique(loginName);
        if (count > 0)
        {
            return UserConstants.USER_NAME_NOT_UNIQUE;
        }
        return UserConstants.USER_NAME_UNIQUE;
    }
}
