package com.ruoyi.bst.part.service.impl;

import java.util.List;

import com.github.pagehelper.PageHelper;
import com.ruoyi.bst.store.service.StoreService;
import com.ruoyi.bst.storeStaff.domain.enums.StoreStaffPermission;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ServiceUtil;
import com.ruoyi.common.utils.collection.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.bst.part.mapper.PartMapper;
import com.ruoyi.bst.part.domain.Part;
import com.ruoyi.bst.part.domain.PartVO;
import com.ruoyi.bst.part.domain.PartQuery;
import com.ruoyi.bst.part.service.PartService;

/**
 * 分区Service业务层处理
 *
 * @author ruoyi
 * @date 2025-04-18
 */
@Service
public class PartServiceImpl implements PartService
{
    @Autowired
    private PartMapper partMapper;
    @Autowired
    private StoreService storeService;

    /**
     * 查询分区
     *
     * @param id 分区主键
     * @return 分区
     */
    @Override
    public PartVO selectPartById(Long id, boolean scope)
    {
        if (id == null) {
            return null;
        }
        PartQuery query = new PartQuery();
        query.setPartId(id);
        query.setScope(scope);
        query.addStorePermission(StoreStaffPermission.PART_VIEW.getCode());
        return this.selectOne(query);
    }

    @Override
    public PartVO selectOne(PartQuery query) {
        PageHelper.startPage(1, 1);
        List<PartVO> list = partMapper.selectPartList(query);
        return CollectionUtils.firstElement(list);
    }

    /**
     * 查询孩子
     */

    /**
     * 查询分区列表
     *
     * @param part 分区
     * @return 分区
     */
    @Override
    public List<PartVO> selectPartList(PartQuery part)
    {
        return partMapper.selectPartList(part);
    }

    /**
     * 新增分区
     *
     * @param part 分区
     * @return 结果
     */
    @Override
    public int insertPart(Part part)
    {
        part.setCreateTime(DateUtils.getNowDate());
        if (part.getParentId() != null) {
            PartVO parentPart = partMapper.selectPartByPartId(part.getParentId());
            ServiceUtil.assertion(parentPart.getParentId()!=null,"该分区下不允许再添加分区");
        }
        return partMapper.insertPart(part);
    }

    /**
     * 修改分区
     *
     * @param part 分区
     * @return 结果
     */
    @Override
    public int updatePart(Part part)
    {
        if (part.getParentId() != null) {
            PartVO parentPart = partMapper.selectPartByPartId(part.getParentId());
            ServiceUtil.assertion(parentPart.getParentId()!=null,"该分区下不允许再添加分区");
        }
        return partMapper.updatePart(part);
    }

    /**
     * 批量删除分区
     *
     * @param partIds 需要删除的分区主键
     * @return 结果
     */
    @Override
    public int deletePartByPartIds(List<Long> partIds)
    {
        return partMapper.deletePartByPartIds(partIds);
    }

    /**
     * 删除分区信息
     *
     * @param partId 分区主键
     * @return 结果
     */
    @Override
    public int deletePartByPartId(Long partId)
    {
        return partMapper.deletePartByPartId(partId);
    }

}
