AnnouncementManagerImpl.java 11.4 KB
/*
 * @(#)AnnouncementManagerImpl.java
 *
 * Copyright (c) 2014-2017   版权所有
 * xiniunet. All rights reserved.
 *
 * This software is the confidential and proprietary
 * information of  xiniunet.
 * ("Confidential Information"). You shall not disclose
 * such Confidential Information and shall use it only
 * in accordance with the terms of the contract agreement
 * you entered into with xiniunet.
 */
package com.xiniunet.announcement.biz;

import com.alibaba.dubbo.common.utils.CollectionUtils;
import com.xiniunet.announcement.dal.AnnouncementUserMapper;
import com.xiniunet.announcement.po.AnnouncementUserPO;
import com.xiniunet.announcement.request.*;
import com.xiniunet.announcement.response.*;
import com.xiniunet.foundation.domain.FileAttachmentBind;
import com.xiniunet.foundation.request.FileCreateBindAttachBatchRequest;
import com.xiniunet.foundation.request.IdsGetRequest;
import com.xiniunet.foundation.response.FileCreateBindAttachmentBatchResponse;
import com.xiniunet.foundation.response.IdsGetResponse;
import com.xiniunet.framework.base.BaseManagerImpl;
import com.xiniunet.framework.base.BaseResponse;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.announcement.dal.AnnouncementMapper;
import com.xiniunet.announcement.po.AnnouncementPO;
import com.xiniunet.foundation.service.FoundationService;
import com.xiniunet.task.constant.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.xiniunet.framework.exception.ErrorType;
import com.xiniunet.announcement.domain.*;
import org.springframework.transaction.interceptor.TransactionAspectSupport;


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

/**
 * 公告通知的管理方法实现.
 * @author 
 */
@Transactional
@Service("NoticeAnnouncementManager")
public class AnnouncementManagerImpl extends BaseManagerImpl implements AnnouncementManager {

    @Autowired
    private FoundationService foundationService;

    @Autowired
    private AnnouncementMapper announcementMapper;
    @Autowired
    private AnnouncementUserMapper announcementUserMapper;
    /**
     * 根据Id获取公告通知
     *
     * @param request 获取公告通知请求
     * @param passport 用户护照
     * @return 获取公告通知应答
     */
    @Override
    @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
    public AnnouncementGetResponse get(AnnouncementGetRequest request, Passport passport) {
        AnnouncementGetResponse response = new AnnouncementGetResponse();
        AnnouncementPO entity = announcementMapper.getById(request.getId(), passport);
        if (entity != null) {
            Announcement announcement = this.getMapper().map(entity, Announcement.class);
            response.setAnnouncement(announcement );
        } else {
            response.addError(ErrorType.EXPECTATION_NULL, Message.COMMON_GET_FAILURE);
        }
        return response;
    }


    /**
     * 模糊查询公告通知
     *
     * @param request 模糊查询公告通知请求
     * @param passport 用户护照
     * @return 模糊查询公告通知应答
     */
    @Override
    @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
    public AnnouncementSearchResponse search(AnnouncementSearchRequest request, Passport passport) {
        AnnouncementSearchResponse response = new AnnouncementSearchResponse();
        List<Announcement> modelList = new ArrayList<>();
        Long count = announcementMapper.searchCount(request, passport);
    
        if (count > 0) {
            // 处理分页参数
            if (request.getPageSize() > 0) {
                //如果输入的页码大于实际的分页数,将页码设置为最后一页的页码
                int lastPageNumber = (int) ((count - 1) / request.getPageSize() + 1);
                if (request.getPageNumber() > lastPageNumber) {
                    request.setPageNumber(lastPageNumber);
                }
            }
    
            //通过关键字查询出用户集合
            List<AnnouncementPO> entityList = announcementMapper.search(request, passport);
    
            for (AnnouncementPO entity : entityList) {
                Announcement announcement = this.getMapper().map(entity, Announcement.class);
                modelList.add(announcement);
            }
        }
    
        response.setTotalCount(count);
        response.setResult(modelList);
        return response;
    }
    
    /**
     * 高级查询公告通知
     *
     * @param request 高级查询公告通知请求
     * @param passport 用户护照
     * @return 高级查询公告通知应答
     */
    @Override
    @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
    public AnnouncementFindResponse find(AnnouncementFindRequest request, Passport passport) {
        AnnouncementFindResponse response = new AnnouncementFindResponse();
        List<Announcement> modelList = new ArrayList<>();
        Long count = announcementMapper.findCount(request, passport);
        if (count >0) {
            // 处理分页参数
            if (request.getPageSize() > 0) {
                //如果输入的页码大于实际的分页数,将页码设置为最后一页的页码
                int lastPageNumber = (int) ((count - 1) / request.getPageSize() + 1);
                if (request.getPageNumber() > lastPageNumber) {
                    request.setPageNumber(lastPageNumber);
                }
            }
    
            List<AnnouncementPO> entityList = announcementMapper.find(request, passport);
            for (AnnouncementPO entity : entityList) {
                Announcement announcement = this.getMapper().map(entity, Announcement.class);
                modelList.add(announcement);
            }
        }
    
        response.setTotalCount(count);
        response.setResult(modelList);
        return response;
    }


    
    /**
     * 创建公告通知
     *
     * @param request 创建公告通知请求
     * @param passport 用户护照
     * @return 创建公告通知应答
     */
    @Override
    public AnnouncementCreateResponse create(AnnouncementCreateRequest request, Passport passport) {
        AnnouncementCreateResponse response = new AnnouncementCreateResponse();

        AnnouncementPO entity = this.getMapper().map(request, AnnouncementPO.class);
        if(entity.getId() == null) {
            long id = foundationService.getNewId();
            entity.setId(id);
        }

        // 先检查关键数据是否有重复,在检查通过后才能做插入操作
        checkValidate(entity,passport,response);
        if(response.hasError()) {
            return response;
        }
        //如果owerUserId没有传直接取passport的user
        if(request.getOwnerUserId() == null ){
            entity.setOwnerUserId(passport.getUserId());
            entity.setOwnerUserName(passport.getUserName());
        }
        List<AnnouncementUserPO> userPOList = new ArrayList<>();
        if(CollectionUtils.isNotEmpty(request.getUserList()) ){
            IdsGetRequest idsGetRequest = new IdsGetRequest();
            idsGetRequest.setCount(request.getUserList().size());
            IdsGetResponse idsGetResponse = foundationService.getNewIds(idsGetRequest);
            List<Long> listUserIds = idsGetResponse.getIds();
            int index = 0;
            for(AnnouncementUser announcementUser: request.getUserList()){
                AnnouncementUserPO announcementUserPO = this.getMapper().map(announcementUser,AnnouncementUserPO.class);
                announcementUserPO.setAnnouncementId(entity.getId());
                announcementUserPO.setId(listUserIds.get(index));
                userPOList.add(announcementUserPO);
                index++;
            }
        }
        //批量创建通知用户信息
        if (CollectionUtils.isNotEmpty(userPOList)) {
            if (userPOList.size() != announcementUserMapper.insertBatch(userPOList, passport)) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                response.addError(ErrorType.EXPECTATION_NULL, Message.COMMON_CREATE_FAILURE);
                return response;
            }
        }

        if(CollectionUtils.isNotEmpty(request.getAttachmentList()) ){
            //处理文件列表的创建绑定
            FileCreateBindAttachBatchRequest fileCreateBindAttachBatchRequest = this.getMapper().map(request,FileCreateBindAttachBatchRequest.class);
            List<FileAttachmentBind> attachmentList = fileCreateBindAttachBatchRequest.getAttachmentList();
            if(CollectionUtils.isNotEmpty(attachmentList)){
                for(FileAttachmentBind fileAttachmentBind : attachmentList){
                    fileAttachmentBind.setBusinessId(entity.getId());
                    fileAttachmentBind.setBusinessType("ANNOUNCEMENT");
                }
                fileCreateBindAttachBatchRequest.setAttachmentList(attachmentList);
            }
            FileCreateBindAttachmentBatchResponse fileCreateBindAttachmentBatchResponse = foundationService.fileCreateBindAttachmentBatch(fileCreateBindAttachBatchRequest,passport);
            if(fileCreateBindAttachmentBatchResponse.hasError()){
                //TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                response.addErrors(fileCreateBindAttachmentBatchResponse.getErrors());
                return response;
            }
        }
        if (announcementMapper.insert(entity, passport) == 0) {
            response.addError(ErrorType.EXPECTATION_NULL, Message.COMMON_CREATE_FAILURE);
            return response;
        }

        response.setId(entity.getId());
        return response;
    }
    
    /**
     * 更新公告通知
     *
     * @param request 更新公告通知请求
     * @param passport 用户护照
     * @return 更新公告通知应答
     */
    @Override
public AnnouncementUpdateResponse update(AnnouncementUpdateRequest request, Passport passport) {
        AnnouncementUpdateResponse response = new AnnouncementUpdateResponse();

        AnnouncementPO entity = this.getMapper().map(request, AnnouncementPO.class);
        // 先检查关键数据是否有重复,在检查通过后才能做插入操作
        checkValidate(entity,passport,response);
        if(response.hasError()) {
            return response;
        }

        Long result=announcementMapper.update(entity, passport);
        if (result != 1) {
            response.addError(ErrorType.BUSINESS_ERROR, Message.COMMON_UPDATE_FAILURE);
            return response;
        }
        response.setResult(result);
        return response;
    }
    
    /**
     * 删除公告通知
     *
     * @param request 删除公告通知请求
     * @param passport 用户护照
     * @return 删除公告通知应答
     */
    @Override
    public AnnouncementDeleteResponse delete(AnnouncementDeleteRequest request, Passport passport) {
        AnnouncementDeleteResponse response = new AnnouncementDeleteResponse();
         Long result= announcementMapper.delete(request.getId(), passport);
         response.setResult(result);
        return response;
    }
    
    

    /**
     * 验证对象
     * @param announcement 公告通知
     * @param passport 用户护照
     */
    private void checkValidate(AnnouncementPO announcement, Passport passport, BaseResponse response) {
        // TODO
    }
}