package com.gx.obe.server.management.im.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.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.im.dao.ChatRecordMapper;
import com.gx.obe.server.management.im.entity.ChatRecord;
import com.gx.obe.server.management.im.service.ChatRecordService;

/** 
 * @Description: 
 * @author mazc 
 */
@Service
public class ChatRecordServiceImpl extends ServiceImpl<ChatRecordMapper, ChatRecord> implements ChatRecordService {

	@Autowired
	private ChatRecordMapper chatRecordMapper;
	
	/**
	 * @Description: 批量更新
	 * @author mazc
	 * @param ChatRecordList 
	 */
	@Override
	@Transactional(rollbackFor = Exception.class)
	public Integer updateByBatch(List<ChatRecord> ChatRecordList) {
		return chatRecordMapper.updateBatchList(ChatRecordList);
	}
	
	/**
	 * @Description: 批量插入
	 * @author mazc
	 * @param ChatRecordList 
	 */
	@Override
	@Transactional(rollbackFor = Exception.class)
	public Integer insertByBatch(List<ChatRecord> ChatRecordList) {
		return chatRecordMapper.insertByBatch(ChatRecordList);
	}
	
	/**
     * @Description: 指定字段修改
     * @author chenxw
     * @param Record
	 * @param attributes
     */
	@Override
    public boolean updateAssignProperty(ChatRecord Record, String[] attributes) {
		return chatRecordMapper.updateAssignProperty(Record, attributes) > 0;
	}
    
    /**
     * @Description: 批量指定字段修改
     * @author chenxw
     * @param ChatRecordList
	 * @param attributes
     */
	@Override
    public Integer batchUpdateProperty(List<ChatRecord> ChatRecordList, String[] attributes) {
		return chatRecordMapper.batchUpdateProperty(ChatRecordList, attributes);
	}
	
	/** 
	 * @Description: 批量添加或跟新
	 * @author chenxw
	 * @param ChatRecordList
	 * @param attributes
	 * @return 
	 */
	@Override
	@Transactional(rollbackFor = Exception.class)
    public Integer batchSaveOrUpdate(List<ChatRecord> ChatRecordList, String[] attributes) {
        List<ChatRecord> insertChatRecordList = new ArrayList<>();
        List<ChatRecord> updateChatRecordList = new ArrayList<>();
        for (ChatRecord Record : ChatRecordList) {
            if (StringUtils.isEmpty(Record.getId())) {
                Record.setId(IDUtils.getId());
                insertChatRecordList.add(Record);
            } else {
                updateChatRecordList.add(Record);
            }
        }
        int count = 0;
        if (insertChatRecordList.size() > 0) {
            count += chatRecordMapper.insertByBatch(insertChatRecordList);
        }
        if (updateChatRecordList.size() > 0) {
            count += chatRecordMapper.batchUpdateProperty(updateChatRecordList, attributes);
        }
        return count;
    }

	@Override
	public IPage<ChatRecord> getRecordPage(String sendId, String receiveId, int pageNo,
			int pageSize) {
 		 return chatRecordMapper.getRecordPage(new Page<>(pageNo, pageSize), sendId, receiveId);
	}

	@Override
	public IPage<ChatRecord> getGroupRecordPage(String groupId, int pageNo, int pageSize) {
		 return chatRecordMapper.getGroupRecordPage(new Page<>(pageNo, pageSize), groupId);
	}
	@Override
	public IPage<ChatRecord> getNoticeRecordPage(String noticeId, int pageNo, int pageSize) {
		return chatRecordMapper.getNoticeRecordPage(new Page<>(pageNo, pageSize), noticeId);
	}

	@Override
	public boolean saveUpdate(ChatRecord record) {
		if(null == record.getId()) {
			record.setId(IDUtils.getId());
			return  chatRecordMapper.insert(record) > 0;
		}else {
			return chatRecordMapper.updateById(record) > 0;
		}
	}

}