package org.jeecg.modules.weituo.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.jeecg.modules.weituo.convert.WeituoConvert;
import org.jeecg.modules.weituo.dto.WeituoInsertCommand;
import org.jeecg.modules.weituo.dto.WeituoUpdateCommand;
import org.jeecg.modules.weituo.entity.ItdmWeituoInfo;
import org.jeecg.modules.weituo.entity.ItdmWeituoYangpin;
import org.jeecg.modules.weituo.entity.ItdmWeituoYangpinExtend;
import org.jeecg.modules.weituo.mapper.ItdmWeituoInfoMapper;
import org.jeecg.modules.weituo.mapper.ItdmWeituoYangpinExtendMapper;
import org.jeecg.modules.weituo.mapper.ItdmWeituoYangpinMapper;
import org.jeecg.modules.weituo.service.IItdmWeituoInfoService;
import org.jeecg.modules.weituo.vo.ItdmWeituoInfoInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;

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

/**
 * @Description: 委托信息
 * @Author: jeecg-boot
 * @Date: 2023-05-17
 * @Version: V1.0
 */
@Service
public class ItdmWeituoInfoServiceImpl extends ServiceImpl<ItdmWeituoInfoMapper, ItdmWeituoInfo> implements IItdmWeituoInfoService {


    @Autowired
    private ItdmWeituoYangpinMapper yangpinMapper;

    @Autowired
    private ItdmWeituoYangpinExtendMapper yangpinExtendMapper;


    @Transactional
    @Override
    public void saveWeituo(WeituoInsertCommand command) {

        ItdmWeituoInfo itdmWeituoInfo = WeituoConvert.INSTANCE.convert(command);


        this.baseMapper.insert(itdmWeituoInfo);


        for (WeituoInsertCommand.WeituoYangpin yangpin : command.getYangpins()) {
            ItdmWeituoYangpin itdmWeituoYangpin = WeituoConvert.INSTANCE.convert(yangpin, itdmWeituoInfo.getId());
            this.yangpinMapper.insert(itdmWeituoYangpin);

            for (WeituoInsertCommand.WeituoYangPinShiYan shiYan : command.getPinShiYans().stream()
                    .filter(i -> i.getYangpinKeyId().equals(yangpin.getKey())).collect(Collectors.toList())) {

                ItdmWeituoYangpinExtend yangpinExtend = WeituoConvert.INSTANCE.convert(shiYan, itdmWeituoYangpin.getId(), itdmWeituoInfo.getId());
                this.yangpinExtendMapper.insert(yangpinExtend);


            }

        }


    }

    @Transactional
    @Override
    public void updateWeituo(WeituoUpdateCommand command) {
        ItdmWeituoInfo itdmWeituoInfo = WeituoConvert.INSTANCE.convert(command);


        this.baseMapper.updateById(itdmWeituoInfo);


        this.yangpinMapper.delete(Wrappers.lambdaQuery(ItdmWeituoYangpin.class).eq(ItdmWeituoYangpin::getWeituoId, command.getId()));
        this.yangpinExtendMapper.delete(Wrappers.lambdaQuery(ItdmWeituoYangpinExtend.class).eq(ItdmWeituoYangpinExtend::getWeituoId, command.getId()));

        for (WeituoUpdateCommand.WeituoYangpin yangpin : command.getYangpins()) {
            ItdmWeituoYangpin itdmWeituoYangpin = WeituoConvert.INSTANCE.convert(yangpin, command.getId());
            this.yangpinMapper.insert(itdmWeituoYangpin);

            for (WeituoUpdateCommand.WeituoYangPinShiYan shiYan : command.getPinShiYans().stream()
                    .filter(i -> i.getYangpinKeyId().equals(yangpin.getKey())).collect(Collectors.toList())) {

                if (yangpin.getKey().equals(shiYan.getYangpinKeyId())) {
                    ItdmWeituoYangpinExtend yangpinExtend = WeituoConvert.INSTANCE.convert(shiYan, itdmWeituoYangpin.getId(), itdmWeituoInfo.getId());
                    this.yangpinExtendMapper.insert(yangpinExtend);
                }


            }

        }
    }


    @Override
    public ItdmWeituoInfoInfoVO findById(String id) {

        ItdmWeituoInfoInfoVO itdmWeituoInfo = WeituoConvert.INSTANCE.convert(id);
        List<ItdmWeituoYangpin> yangpinExtendList = yangpinMapper.selectList(Wrappers.lambdaQuery(ItdmWeituoYangpin.class).eq(ItdmWeituoYangpin::getWeituoId, id));
        List<ItdmWeituoYangpinExtend> yangpinExtends = yangpinExtendMapper.selectList(
                Wrappers.lambdaQuery(ItdmWeituoYangpinExtend.class).eq(ItdmWeituoYangpinExtend::getWeituoId, id));
        itdmWeituoInfo.setYangpins(WeituoConvert.INSTANCE.convertList(yangpinExtendList));
        itdmWeituoInfo.setPinShiYans(WeituoConvert.INSTANCE.convertShiyanList(yangpinExtends));
        itdmWeituoInfo.setData(WeituoConvert.INSTANCE.convert(this.baseMapper.selectById(id)));
        return itdmWeituoInfo;
    }

    @Override
    @Transactional
    public void deleteById(String id) {
        this.baseMapper.deleteById(id);
        this.yangpinMapper.delete(Wrappers.lambdaQuery(ItdmWeituoYangpin.class).eq(ItdmWeituoYangpin::getWeituoId, id));
        this.yangpinExtendMapper.delete(Wrappers.lambdaQuery(ItdmWeituoYangpinExtend.class).eq(ItdmWeituoYangpinExtend::getWeituoId, id));

    }


    @Override
    @Transactional
    public void deleteByIds(List<String> id) {
        this.baseMapper.deleteBatchIds(id);
        this.yangpinMapper.delete(Wrappers.lambdaQuery(ItdmWeituoYangpin.class).in(ItdmWeituoYangpin::getWeituoId, id));
        this.yangpinExtendMapper.delete(Wrappers.lambdaQuery(ItdmWeituoYangpinExtend.class).in(ItdmWeituoYangpinExtend::getWeituoId, id));


    }
}
