Newer
Older
huludao / src / main / java / com / newfiber / api / pc / service / impl / DiscussionInfoServiceImpl.java
package com.newfiber.api.pc.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.newfiber.api.config.FileVisitProperty;
import com.newfiber.api.core.commons.CustomException;
import com.newfiber.api.core.commons.PageRequestObject;
import com.newfiber.api.core.commons.PageResultObject;
import com.newfiber.api.core.commons.ResultCode;
import com.newfiber.api.pc.dao.DiscussionInfoMapper;
import com.newfiber.api.pc.model.entity.DiscussionDic;
import com.newfiber.api.pc.model.entity.DiscussionInfo;
import com.newfiber.api.pc.model.entity.DiscussionInfoDTO;
import com.newfiber.api.pc.model.entity.DiscussionUser;
import com.newfiber.api.pc.service.DiscussionDicService;
import com.newfiber.api.pc.service.DiscussionInfoService;
import com.newfiber.api.pc.service.DiscussionUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @ClassName DiscussionInfoServiceImpl
 * @Description TODO
 * @Author 张鸿志
 * @Date 2021年6月3日17:49:25 17:49
 * Version 1.0
 **/
@Service
public class DiscussionInfoServiceImpl extends ServiceImpl<DiscussionInfoMapper, DiscussionInfo> implements DiscussionInfoService {

    @Autowired
    private DiscussionUserService discussionUserService;

    @Autowired
    private DiscussionDicService discussionDicService;

    @Autowired
    private FileVisitProperty fileVisitProperty;

    @Override
    public DiscussionInfo saveDiscussion(DiscussionInfo discussionInfo) {
        if(this.insert(discussionInfo)){
            List<DiscussionUser> userList = discussionInfo.getUserList();
            if(!userList.isEmpty()){
                userList.forEach(e->{
                    e.setDiscussionInfoId(discussionInfo.getId());
                });
            }
            if(discussionUserService.insertBatch(userList)){
                return discussionInfo;
            }
        }
        throw new CustomException(500,"添加会商错误!");
    }


    @Override
    public PageResultObject<DiscussionInfo> queryPage(PageRequestObject<DiscussionInfoDTO> pageRequestObject) {
        int current = pageRequestObject.getCurrent();
        int size = pageRequestObject.getSize();
        DiscussionInfoDTO discussionInfoDTO = pageRequestObject.getObject();
        EntityWrapper<DiscussionInfo> wrapper = new EntityWrapper<>();
        if(!StringUtils.isEmpty(discussionInfoDTO.getDiscussionName())){
            wrapper.like("discussion_theme",discussionInfoDTO.getDiscussionName());
        }
        if(!StringUtils.isEmpty(discussionInfoDTO.getDiscussionFrom())){
            wrapper.like("discussion_from",discussionInfoDTO.getDiscussionFrom()+"");
        }
        if(!StringUtils.isEmpty(discussionInfoDTO.getDiscussionType())){
            wrapper.like("discussion_type",discussionInfoDTO.getDiscussionType()+"");
        }
        Page<DiscussionInfo> page = new Page<>(current, size);
        List<DiscussionInfo> records = this.selectPage(page, wrapper).getRecords();
        int count = this.selectCount(wrapper);
        Set<Integer> ids = new HashSet<>();
        if(records.isEmpty()){
            return new PageResultObject<>(current,size,(long)count,records);
        }
        for (DiscussionInfo record : records) {
            ids.add(record.getDiscussionFrom());
            ids.add(record.getDiscussionType());
            ids.add(record.getDiscussionDivision());
        }
        List<DiscussionDic> discussionDics = discussionDicService.selectBatchIds(ids);
        EntityWrapper<DiscussionUser> userEntityWrapper = new EntityWrapper<>();
        userEntityWrapper.in("discussion_info_id",records.stream().map(DiscussionInfo::getId).collect(Collectors.toList()));
        List<DiscussionUser> discussionUsers = discussionUserService.selectList(userEntityWrapper);
        Map<Integer, List<DiscussionUser>> listMap = discussionUsers.stream().collect(Collectors.groupingBy(DiscussionUser::getDiscussionInfoId));
        for (DiscussionInfo record : records) {
            for (DiscussionDic discussionDic : discussionDics) {
                if(record.getDiscussionFrom().equals(discussionDic.getId())){
                    record.setDiscussionFromName(discussionDic.getDicName());
                }
                if(record.getDiscussionType().equals(discussionDic.getId())){
                    record.setDiscussionTypeName(discussionDic.getDicName());
                }
                if(record.getDiscussionDivision().equals(discussionDic.getId())){
                    record.setDiscussionDivisionName(discussionDic.getDicName());
                }
            }
            for (Map.Entry<Integer, List<DiscussionUser>> listEntry : listMap.entrySet()) {
                if(record.getId().equals(listEntry.getKey())){
                    record.setUserList(listEntry.getValue());
                    break;
                }
            }
            if(!StringUtils.isEmpty(record.getDiscussionSummaryFile())){
                record.setFilerealPath(fileVisitProperty.getWebFile() + record.getDiscussionSummaryFile());
            }
        }

        return new PageResultObject<>(current,size,(long)count,records);
    }

    @Override
    public DiscussionInfo updateDiscussion(DiscussionInfo discussionInfo) {
        if(StringUtils.isEmpty(discussionInfo.getId())){
            throw new CustomException(ResultCode.PARAM_NULL);
        }
        if(this.updateById(discussionInfo)){
            //删除已有的参会人员
            EntityWrapper<DiscussionUser> wrapper = new EntityWrapper();
            wrapper.eq("discussion_info_id",discussionInfo.getId());
            if(discussionUserService.delete(wrapper)){
                List<DiscussionUser> userList = discussionInfo.getUserList();
                if(!userList.isEmpty()){
                    userList.forEach(e->{
                        e.setDiscussionInfoId(discussionInfo.getId());
                    });
                }
                if(discussionUserService.insertBatch(discussionInfo.getUserList())){
                    return discussionInfo;
                }
            }
        }
        return null;
    }

    @Override
    public List<DiscussionInfo> queryData(DiscussionInfoDTO discussionInfoDTO) {
        EntityWrapper<DiscussionInfo> wrapper = new EntityWrapper<>();
        if(!StringUtils.isEmpty(discussionInfoDTO.getDiscussionName())){
            wrapper.like("discussion_theme",discussionInfoDTO.getDiscussionName());
        }
        if(!StringUtils.isEmpty(discussionInfoDTO.getDiscussionFrom())){
            wrapper.like("discussion_from",discussionInfoDTO.getDiscussionFrom()+"");
        }
        if(!StringUtils.isEmpty(discussionInfoDTO.getDiscussionType())){
            wrapper.like("discussion_type",discussionInfoDTO.getDiscussionType()+"");
        }
        List<DiscussionInfo> records = this.selectList(wrapper);
        Set<Integer> ids = new HashSet<>();
        for (DiscussionInfo record : records) {
            ids.add(record.getDiscussionFrom());
            ids.add(record.getDiscussionType());
            ids.add(record.getDiscussionDivision());
        }
        List<DiscussionDic> discussionDics = discussionDicService.selectBatchIds(ids);
        for (DiscussionInfo record : records) {
            for (DiscussionDic discussionDic : discussionDics) {
                if(record.getDiscussionFrom().equals(discussionDic.getId())){
                    record.setDiscussionFromName(discussionDic.getDicName());
                }
                if(record.getDiscussionType().equals(discussionDic.getId())){
                    record.setDiscussionTypeName(discussionDic.getDicName());
                }
                if(record.getDiscussionDivision().equals(discussionDic.getId())){
                    record.setDiscussionDivisionName(discussionDic.getDicName());
                }
            }
        }
        return records;
    }

}