package com.njcn.product.cnzutai.zutai.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException;

import com.njcn.oss.constant.OssPath;
import com.njcn.oss.utils.FileStorageUtil;
import com.njcn.product.cnzutai.zutai.pojo.param.ElementParam;
import com.njcn.product.cnzutai.zutai.mapper.CsElementMapper;
import com.njcn.product.cnzutai.zutai.pojo.enums.CsSystemResponseEnum;
import com.njcn.product.cnzutai.zutai.pojo.po.CsElement;
import com.njcn.product.cnzutai.zutai.service.IElementService;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;

/**
 * <p>
 * 组态图元库 服务实现类
 * </p>
 *
 * @author xuyang
 * @since 2023-07-12
 */
@Service
@AllArgsConstructor
public class CsElementServiceImpl extends ServiceImpl<CsElementMapper, CsElement> implements IElementService {

    private final FileStorageUtil fileStorageUtil;

    @Override
    public CsElement addElement(ElementParam param) {
        CsElement po = this.lambdaQuery().eq(CsElement::getStatus,1)
                          .eq(CsElement::getElementCode,param.getElementCode())
                          .eq(CsElement::getElementName,param.getElementName())
                          .eq(CsElement::getElementMark,param.getElementMark()).one();
        if (!Objects.isNull(po)){
            throw new BusinessException(CsSystemResponseEnum.SAME_DATA_ERROR);
        }
        CsElement csElement = new CsElement();
        BeanUtils.copyProperties(param,csElement);
        String path =  fileStorageUtil.uploadMultipart(param.getMultipartFile(), OssPath.ELEMENT);
        csElement.setPath(path);
        csElement.setStatus(1);
        this.saveOrUpdate(csElement);
        return csElement;
    }

    @Override
    public List<CsElement> findElement() {
        List<CsElement> list = this.lambdaQuery().eq(CsElement::getStatus,1).list();
        return list;
    }

    @Override
    public void deleteById(String id) {
        CsElement csElement = this.lambdaQuery().eq(CsElement::getId,id).one();
        csElement.setStatus(0);
        this.updateById(csElement);
    }
}
