package com.schoolinout.system.service.impl;

import com.schoolinout.common.utils.DateUtils;
import com.schoolinout.common.utils.bean.BeanUtils;
import com.schoolinout.system.domain.Parent;
import com.schoolinout.system.domain.ParentStudent;
import com.schoolinout.system.domain.dto.ParentDto;
import com.schoolinout.system.mapper.ParentMapper;
import com.schoolinout.system.mapper.ParentStudentMapper;
import com.schoolinout.system.service.IParentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 家长管理Service业务层处理
 *
 * @author sakura
 * @date 2024-01-09
 */
@Service
public class ParentServiceImpl implements IParentService {
    @Autowired
    private ParentMapper parentMapper;
    @Autowired
    private ParentStudentMapper parentStudentMapper;

    /**
     * 查询家长管理
     *
     * @param id 家长管理主键
     * @return 家长管理
     */
    @Override
    public Parent selectParentById(Long id) {
        return parentMapper.selectParentById(id);
    }

    /**
     * 查询家长管理列表
     *
     * @param parent 家长管理
     * @return 家长管理
     */
    @Override
    public List<Parent> selectParentList(Parent parent) {
        return parentMapper.selectParentList(parent);
    }

    @Override
    @Transactional(rollbackFor = RuntimeException.class)
    public int saveParent(ParentDto dto) {
        int count = 0;
        // 一共要保存两个
        if (dto.getId() == null) {
            // 新增
            // step1：先保存家长
            Parent parent = new Parent();
            BeanUtils.copyBeanProp(parent, dto);
            count += parentMapper.insertParent(parent);

            // step2：再保存对应的关系列表
            List<ParentStudent> parentStudentList = dto.getStudentIds().stream()
                    .map(item -> new ParentStudent(item, parent.getId()))
                    .collect(Collectors.toList());
            count += parentStudentMapper.insertBatch(parentStudentList);
        } else {
            // 修改
            Parent parent = new Parent();
            BeanUtils.copyBeanProp(parent, dto);
            count += parentMapper.updateParent(parent);
            // 更新对应的关系列表
            // 删除所有
            count += parentStudentMapper.delateByParentId(dto.getId());
            // 更新回去
            List<ParentStudent> parentStudentList = dto.getStudentIds().stream()
                    .map(item -> new ParentStudent(item, parent.getId()))
                    .collect(Collectors.toList());
            count += parentStudentMapper.insertBatch(parentStudentList);
        }

        return count;
    }

    /**
     * 新增家长管理
     *
     * @param parent 家长管理
     * @return 结果
     */
    @Override
    public int insertParent(Parent parent) {
        parent.setCreateTime(DateUtils.getNowDate());
        return parentMapper.insertParent(parent);
    }

    /**
     * 修改家长管理
     *
     * @param parent 家长管理
     * @return 结果
     */
    @Override
    public int updateParent(Parent parent) {
        parent.setUpdateTime(DateUtils.getNowDate());
        return parentMapper.updateParent(parent);
    }

    /**
     * 批量删除家长管理
     *
     * @param ids 需要删除的家长管理主键
     * @return 结果
     */
    @Override
    public int deleteParentByIds(Long[] ids) {
        return parentMapper.deleteParentByIds(ids);
    }

    /**
     * 删除家长管理信息
     *
     * @param id 家长管理主键
     * @return 结果
     */
    @Override
    public int deleteParentById(Long id) {
        return parentMapper.deleteParentById(id);
    }
}
