SignInServiceImpl.java 5.24 KB
package com.ruoyi.in.service.impl;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.List;
import java.util.Objects;

import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.exception.file.FileException;
import com.ruoyi.common.exception.file.FileUploadException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.SignInEnum;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.uuid.Seq;
import com.ruoyi.common.utils.uuid.UUID;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.in.mapper.SignInMapper;
import com.ruoyi.in.domain.SignIn;
import com.ruoyi.in.service.ISignInService;
import org.springframework.web.multipart.MultipartFile;

/**
 * 签到Service业务层处理
 *
 * @author guzijian
 * @date 2023-07-05
 */
@Service
public class SignInServiceImpl implements ISignInService {
    @Autowired
    private SignInMapper signInMapper;

    /**
     * 查询签到
     *
     * @param id 签到主键
     * @return 签到
     */
    @Override
    public SignIn selectSignInById(Long id) {
        return signInMapper.selectSignInById(id);
    }

    /**
     * 查询签到列表
     *
     * @param signIn 签到
     * @return 签到
     */
    @Override
    public List<SignIn> selectSignInList(SignIn signIn) {
        return signInMapper.selectSignInList(signIn);
    }

    /**
     * 新增签到
     *
     * @param signIn 签到
     * @return 结果
     */
    @Override
    public int insertSignIn(SignIn signIn) {
        signIn.setCreateTime(DateUtils.getNowDate());
        if (signIn.getType() == null) {
            signIn.setType(SignInEnum.SIGNIN);
        }
        return signInMapper.insertSignIn(signIn);
    }

    /**
     * 修改签到
     *
     * @param signIn 签到
     * @return 结果
     */
    @Override
    public int updateSignIn(SignIn signIn) {
        signIn.setUpdateTime(DateUtils.getNowDate());
        return signInMapper.updateSignIn(signIn);
    }

    /**
     * 批量删除签到
     *
     * @param ids 需要删除的签到主键
     * @return 结果
     */
    @Override
    public int deleteSignInByIds(Long[] ids) {
        return signInMapper.deleteSignInByIds(ids);
    }

    /**
     * 删除签到信息
     *
     * @param id 签到主键
     * @return 结果
     */
    @Override
    public int deleteSignInById(Long id) {
        return signInMapper.deleteSignInById(id);
    }

    @Override
    public int addSignIn(SignIn signIn) throws FileUploadException, IOException {
        // base64转图片
        // 图片路径
        String filePath = RuoYiConfig.getUploadPath();
        // 固定jpg文件
        String fileName = extractFilename("jpg");
        // 获取相对路径
        String absPath = getAbsoluteFile(filePath, fileName).getAbsolutePath();
        startUpload(absPath,signIn.getImage());

        // 把上传的文件路径保存到服务器
        String pathFileName = getPathFileName(filePath, fileName);
        signIn.setImage(pathFileName);

        return signInMapper.insertSignIn(signIn);
    }

    /**
     * 获取相对路径名
     * @param uploadDir
     * @param fileName
     * @return
     * @throws IOException
     */
    public  File getAbsoluteFile(String uploadDir, String fileName) throws IOException
    {
        File desc = new File(uploadDir + File.separator + fileName);

        if (!desc.exists())
        {
            if (!desc.getParentFile().exists())
            {
                desc.getParentFile().mkdirs();
            }
        }
        return desc;
    }

    /**
     * 获取扩展文件名
     * @param extendFileName
     * @return
     */
    public   String extractFilename(String extendFileName)
    {
        return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(),
                FilenameUtils.getBaseName(UUID.randomUUID().toString().replace("-","")), Seq.getId(Seq.uploadSeqType), extendFileName);
    }

    /**
     *
     * @param uploadDir
     * @param fileName
     * @return
     * @throws IOException
     */
    public String getPathFileName(String uploadDir, String fileName) throws IOException
    {
        int dirLastIndex = RuoYiConfig.getProfile().length() + 1;
        String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
        return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
    }

    public void startUpload(String url,String base64) throws FileUploadException {
        FileOutputStream outputStream = null;
        byte[] imageBytes = Base64.getDecoder().decode(base64);
        try {
            outputStream = new FileOutputStream(url);
            outputStream.write(imageBytes);
        } catch (Exception e) {
            throw new FileUploadException("文件上传异常");
        } finally {
            try {
                if (!Objects.isNull(outputStream)) {
                    outputStream.close();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}