/*
 * Author: wangjian
 * 生成ServiceImpl
 */
package com.tofly.dispatch.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tofly.dispatch.common.FlowConstant;
import com.tofly.dispatch.dto.BatchDispatchSchemeDto;
import com.tofly.dispatch.dto.DispatchSchemeInfoDto;
import com.tofly.dispatch.entity.DispatchSchemeInfo;
import com.tofly.dispatch.mapper.DispatchSchemeInfoMapper;
import com.tofly.dispatch.service.DispatchSchemeInfoService;
import com.tofly.dispatch.service.DispatchService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * 调度方案执行设备
 *
 * @author xqf
 * @date Mon Mar 14 00:00:00 CST 2022
 */
@Service("dispatchSchemeInfoService")
public class DispatchSchemeInfoServiceImpl extends ServiceImpl<DispatchSchemeInfoMapper, DispatchSchemeInfo> implements DispatchSchemeInfoService {

    @Autowired
    private DispatchService dispatchService;

    /**
     * 保存开关阀启停泵
     * @param dtos 数据信息
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Object saveDispatchScheme(BatchDispatchSchemeDto dtos) {

        int count = dispatchService.upDispatchCount(dtos.getDispatchId());
        if(count!= FlowConstant.INTEGER_ONE){
            return FlowConstant.DISPATCH_ERROR;
        }
        List<String> lists = new ArrayList<>();
        List<DispatchSchemeInfo> infos = new ArrayList<>();
        for (DispatchSchemeInfoDto dto:dtos.getDto()) {

            DispatchSchemeInfo info = new DispatchSchemeInfo();
            BeanUtils.copyProperties(dto,info);
            info.setDispatchId(dtos.getDispatchId());
            if(info.getIsValid()==null){
                info.setIsValid(FlowConstant.SHORT_ONE);
            }
            info.setIsDel(FlowConstant.SHORT_ZERO);
            if(lists.contains(info.getDeviceNumber())){
                return FlowConstant.NUMBER_EXISTS;
            }
            infos.add(info);
        }
        //删除历史
        this.remove(new QueryWrapper<DispatchSchemeInfo>()
                .lambda().eq(DispatchSchemeInfo::getDispatchId,dtos.getDispatchId()));
        //新增最新
        for (DispatchSchemeInfo info:infos) {
            save(info);
        }
        return true;
    }

}
