package com.xingxi.master.tag.service.impl;

import com.xingxi.common.core.text.Convert;
import com.xingxi.common.enums.EDelFlag;
import com.xingxi.common.exception.BusinessException;
import com.xingxi.common.utils.DateUtils;
import com.xingxi.common.utils.ShiroUtils;
import com.xingxi.master.product.domain.ProdTag;
import com.xingxi.master.product.mapper.ProdTagMapper;
import com.xingxi.master.tag.domain.Tag;
import com.xingxi.master.tag.mapper.TagMapper;
import com.xingxi.master.tag.service.ITagService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 标签Service业务层处理
 *
 * @author xingxi
 * @date 2025-03-06
 */
@Service
public class TagServiceImpl implements ITagService {
    @Resource
    private TagMapper tagMapper;
    @Resource
    private ProdTagMapper prodTagMapper;

    /**
     * 查询标签
     *
     * @param tagId 标签主键
     * @return 标签
     */
    @Override
    public Tag selectTagByTagId(Long tagId) {
        return tagMapper.selectTagByTagId(tagId);
    }

    /**
     * 查询标签列表
     *
     * @param tag 标签
     * @return 标签
     */
    @Override
    public List<Tag> selectTagList(Tag tag) {
        tag.setDelFlag(EDelFlag.NO.getVal());
        return tagMapper.selectTagList(tag);
    }

    /**
     * 新增标签
     *
     * @param tag 标签
     * @return 结果
     */
    @Override
    public int insertTag(Tag tag) {
        tag.setDelFlag(EDelFlag.NO.getVal());
        tag.setCreateUser(ShiroUtils.getLoginName());
        tag.setCreateTime(DateUtils.getNowDate());
        return tagMapper.insertTag(tag);
    }

    /**
     * 新增标签
     *
     * @param tagList 标签
     * @return 结果
     */
    @Override
    public int batchInsertTag(List<Tag> tagList) {
        return tagMapper.batchInsertTag(tagList);
    }

    /**
     * 修改标签
     *
     * @param tag 标签
     * @return 结果
     */
    @Override
    public int updateTag(Tag tag) {
        tag.setUpdateUser(ShiroUtils.getLoginName());
        tag.setUpdateTime(DateUtils.getNowDate());
        return tagMapper.updateTag(tag);
    }

    /**
     * 批量删除标签
     *
     * @param tagIds 需要删除的标签主键
     * @return 结果
     */
    @Override
    public int deleteTagByTagIds(String tagIds) {
        return tagMapper.deleteTagByTagIds(Convert.toStrArray(tagIds));
    }

    /**
     * 删除标签信息
     *
     * @param tagId 标签主键
     * @return 结果
     */
    @Override
    public int deleteTagByTagId(Long tagId) {
        return tagMapper.deleteTagByTagId(tagId);
    }

    /**
     * 逻辑删除标签
     *
     * @param tagId 标签主键
     * @return 结果
     */
    @Override
    public int logicDeleteTagByTagId(Long tagId) {
        return tagMapper.logicDeleteTagByTagId(tagId);
    }

    /**
     * 逻辑批量删除标签
     *
     * @param tagIds 需要删除的数据主键集合
     * @return 结果
     */
    @Override
    public int logicDeleteTagByTagIds(String tagIds) {
        String[] ids = Convert.toStrArray(tagIds);
        for (String id : ids) {
            ProdTag cond = new ProdTag();
            cond.setTagId(Long.parseLong(id));
            cond.setDelFlag(EDelFlag.NO.getVal());
            List<ProdTag> prodTagList = prodTagMapper.selectProdTagList(cond);
            if (prodTagList.size() > 0) {
                throw new BusinessException("标签使用中，不能删除");
            }
        }
        return tagMapper.logicDeleteTagByTagIds(Convert.toStrArray(tagIds));
    }

    /**
     * 逻辑批量删除标签
     *
     * @param tag 标签
     * @return 结果
     */
    @Override
    public int logicDeleteTagByCondition(Tag tag) {
        return tagMapper.logicDeleteTagByCondition(tag);
    }
}
