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

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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.management.evaluation.dao.SupplierEvaluationFactorMapper;
import com.gx.obe.server.management.evaluation.entity.SupplierEvaluationFactor;
import com.gx.obe.server.management.evaluation.service.SupplierEvaluationFactorService;

/**
 * @Description:
 * @author mazc
 */
@Service
@Transactional
public class SupplierEvaluationFactorServiceImpl extends ServiceImpl<SupplierEvaluationFactorMapper, SupplierEvaluationFactor> implements SupplierEvaluationFactorService {
    
    @Autowired
    private SupplierEvaluationFactorMapper supplierEvaluationFactorMapper;
    
    /**
     * @Description: 批量更新
     * @author mazc
     * @param ObeSupplierEvaluationFactorList
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer updateByBatch(List<SupplierEvaluationFactor> ObeSupplierEvaluationFactorList) {
        return supplierEvaluationFactorMapper.updateBatchList(ObeSupplierEvaluationFactorList);
    }
    
    /**
     * @Description: 批量插入
     * @author mazc
     * @param ObeSupplierEvaluationFactorList
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer insertByBatch(List<SupplierEvaluationFactor> ObeSupplierEvaluationFactorList) {
        return supplierEvaluationFactorMapper.insertByBatch(ObeSupplierEvaluationFactorList);
    }
    
    @Override
    public List<SupplierEvaluationFactor> getSupplierEvaluationFactorByFactorCodeAndSupplierId(String factorCode, String supplierId) {
        QueryWrapper<SupplierEvaluationFactor> queryWrapper = new QueryWrapper<SupplierEvaluationFactor>();
        queryWrapper.lambda().eq(SupplierEvaluationFactor::getFactorCode, factorCode)
                             .eq(SupplierEvaluationFactor::getSupplierId, supplierId);
        return supplierEvaluationFactorMapper.selectList(queryWrapper);
    }
    
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int batchSaveOrUpdate(List<SupplierEvaluationFactor> supplierEvaluationFactorList, String[] attributes) {
        List<SupplierEvaluationFactor> insertSupplierEvaluationFactor = new ArrayList<SupplierEvaluationFactor>();
        List<SupplierEvaluationFactor> UpdateSupplierEvaluationFactor = new ArrayList<SupplierEvaluationFactor>();
        for (SupplierEvaluationFactor supplierEvaluationFactor : supplierEvaluationFactorList) {
            if (null == supplierEvaluationFactor.getId()) {
                supplierEvaluationFactor.setId(IDUtils.getId());
                insertSupplierEvaluationFactor.add(supplierEvaluationFactor);
            } else {
                UpdateSupplierEvaluationFactor.add(supplierEvaluationFactor);
            }
        }
        int iCount = 0;
        iCount += supplierEvaluationFactorMapper.insertByBatch(insertSupplierEvaluationFactor);
        iCount += supplierEvaluationFactorMapper.batchUpdateProperty(UpdateSupplierEvaluationFactor, attributes);
        return iCount;
    }
    
    @Override
    public boolean updateEventById(SupplierEvaluationFactor supplierEvaluationFactor) {
        return supplierEvaluationFactorMapper.updateById(supplierEvaluationFactor) > 0;
    }
    
    @Override
    public List<SupplierEvaluationFactor> getEntityListByTenderId(String tenderId) {
        QueryWrapper<SupplierEvaluationFactor> queryWrapper = new QueryWrapper<SupplierEvaluationFactor>();
        queryWrapper.lambda().eq(SupplierEvaluationFactor::getTenderId, tenderId);
        return supplierEvaluationFactorMapper.selectList(queryWrapper);
    }
    
    @Override
    public int deleteByTenderId(String tenderId) {
        QueryWrapper<SupplierEvaluationFactor> queryWrapper = new QueryWrapper<SupplierEvaluationFactor>();
        queryWrapper.lambda().eq(SupplierEvaluationFactor::getTenderId, tenderId);
        return supplierEvaluationFactorMapper.delete(queryWrapper);
    }
    
    /**
     * @Description: 指定字段修改
     * @author chenxw
     * @param supplierEvaluationFactor
     * @param attributes
     * @return
     */
    @Override
    public boolean updateAssignProperty(SupplierEvaluationFactor supplierEvaluationFactor, String[] attributes) {
        return supplierEvaluationFactorMapper.updateAssignProperty(supplierEvaluationFactor, attributes) > 0;
    }
    
}