package com.gx.obe.server.management.table.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gx.obe.server.common.utils.IDUtils;
import com.gx.obe.server.common.utils.StringUtils;
import com.gx.obe.server.management.table.dao.ObeBidPriceTableValueMapper;
import com.gx.obe.server.management.table.entity.ObeBidPriceTableValue;
import com.gx.obe.server.management.table.service.ObeBidPriceTableValueService;
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 mazc
 * @Description:
 */
@Service
@Transactional
public class ObeBidPriceTableValueServiceImpl extends ServiceImpl<ObeBidPriceTableValueMapper, ObeBidPriceTableValue> implements ObeBidPriceTableValueService {

    @Autowired
    private ObeBidPriceTableValueMapper obeBidPriceTableValueMapper;

    /**
     * @param ObeBidPriceTableValueList
     * @Description: 批量更新
     * @author mazc
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer updateByBatch(List<ObeBidPriceTableValue> ObeBidPriceTableValueList) {
        return obeBidPriceTableValueMapper.updateBatchList(ObeBidPriceTableValueList);
    }

    /**
     * @param ObeBidPriceTableValueList
     * @Description: 批量插入
     * @author mazc
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer insertByBatch(List<ObeBidPriceTableValue> ObeBidPriceTableValueList) {
        return obeBidPriceTableValueMapper.insertByBatch(ObeBidPriceTableValueList);
    }

    /**
     * @param ObeBidPriceTableValue
     * @param attributes
     * @Description: 指定字段修改
     * @author chenxw
     */
    @Override
    public boolean updateAssignProperty(ObeBidPriceTableValue ObeBidPriceTableValue, String[] attributes) {
        return obeBidPriceTableValueMapper.updateAssignProperty(ObeBidPriceTableValue, attributes) > 0;
    }

    /**
     * @param ObeBidPriceTableValueList
     * @param attributes
     * @Description: 批量指定字段修改
     * @author chenxw
     */
    @Override
    public Integer batchUpdateProperty(List<ObeBidPriceTableValue> ObeBidPriceTableValueList, String[] attributes) {
        return obeBidPriceTableValueMapper.batchUpdateProperty(ObeBidPriceTableValueList, attributes);
    }

    /**
     * @param ObeBidPriceTableValueList
     * @param attributes
     * @return
     * @Description: 批量添加或跟新
     * @author chenxw
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer batchSaveOrUpdate(List<ObeBidPriceTableValue> ObeBidPriceTableValueList, String[] attributes) {
        List<ObeBidPriceTableValue> insertObeBidPriceTableValueList = new ArrayList<>();
        List<ObeBidPriceTableValue> updateObeBidPriceTableValueList = new ArrayList<>();
        for (ObeBidPriceTableValue ObeBidPriceTableValue : ObeBidPriceTableValueList) {
            if (StringUtils.isEmpty(ObeBidPriceTableValue.getId())) {
                ObeBidPriceTableValue.setId(IDUtils.getId());
                insertObeBidPriceTableValueList.add(ObeBidPriceTableValue);
            } else {
                updateObeBidPriceTableValueList.add(ObeBidPriceTableValue);
            }
        }
        int count = 0;
        if (insertObeBidPriceTableValueList.size() > 0) {
            count += obeBidPriceTableValueMapper.insertByBatch(insertObeBidPriceTableValueList);
        }
        if (updateObeBidPriceTableValueList.size() > 0) {
            count += obeBidPriceTableValueMapper.batchUpdateProperty(updateObeBidPriceTableValueList, attributes);
        }
        return count;
    }

    /**
     * @param priceTableId
     * @return
     * @Description: 根据报价表id获取
     * @author chenxw
     */
    public List<ObeBidPriceTableValue> getByPriceTableId(String priceTableId) {
        QueryWrapper<ObeBidPriceTableValue> obeBidPriceTableValueQueryWrapper = new QueryWrapper<>();
        obeBidPriceTableValueQueryWrapper.lambda()
                .eq(ObeBidPriceTableValue::getPriceTableId, priceTableId);
        return obeBidPriceTableValueMapper.selectList(obeBidPriceTableValueQueryWrapper);
    }

}