AdminForumMessageController.java 7.8 KB
Newer Older
街头小贩's avatar
街头小贩 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
package com.apobates.forum.thrones.admin.controller;

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.apobates.forum.letterbox.entity.ForumLetterTypeEnum;
import com.apobates.forum.letterbox.entity.proxy.ForumLetterReplica;
import com.apobates.forum.letterbox.service.ForumLetterService;
import com.apobates.forum.letterbox.service.InboxService;
import com.apobates.forum.letterbox.service.OutboxService;
import com.apobates.forum.member.entity.Member;
import com.apobates.forum.member.service.MemberService;
import com.apobates.forum.member.storage.core.MemberSessionBean;
import com.apobates.forum.thrones.admin.controller.form.ForumMessageFullForm;
import com.apobates.forum.thrones.admin.exception.ResourceNotFoundException;
import com.apobates.forum.utils.FrontPageURL;
import com.apobates.forum.utils.TipMessage;
import com.apobates.forum.utils.lang.EnumArchitecture;
import com.apobates.forum.utils.persistence.Page;
import com.apobates.forum.utils.persistence.PageRequest;
import com.apobates.forum.utils.persistence.Pageable;

/**
 * 消息控制器
 *
 * @author xiaofanku
 * @since 20190719
 */
@Controller
@RequestMapping(value = "/message")
public class AdminForumMessageController {
    @Autowired
    private InboxService inboxService;
    @Autowired
    private OutboxService outboxService;
    @Autowired
    private ForumLetterService forumLetterService;
    @Autowired
    private MemberService memberService;
    @Value("${site.pageSize}")
    private int pageSize;
    
    //当前管理员收到的消息
    @GetMapping(path = "/")
    public String listInboxPage(
            @RequestParam(value = "p", required = false, defaultValue = "1") int page,
            MemberSessionBean mbean,
            HttpServletRequest request,
            Model model) {
        FrontPageURL fpbuild = new FrontPageURL(request.getContextPath() + "/message/").addPageSize("number", pageSize);
        Pageable pr = new PageRequest(page, fpbuild.getPageSize());
        Page<ForumLetterReplica> rs = inboxService.getInBox(mbean.getMid(), pr);
        model.addAttribute("rs", rs.getResult().collect(Collectors.toList()));
        model.addAttribute("pageData", fpbuild.toPageData(pr, rs.getTotalElements()));
        return "admin/message/index";
    }
    
    //当前管理员发送的消息
    @GetMapping(path = "/sent")
    public String listSentPage(
            @RequestParam(value = "p", required = false, defaultValue = "1") int page,
            MemberSessionBean mbean,
            HttpServletRequest request,
            Model model) {
        FrontPageURL fpbuild = new FrontPageURL(request.getContextPath() + "/message/sent").addPageSize("number", pageSize);
        Pageable pr = new PageRequest(page, fpbuild.getPageSize());
        Page<ForumLetterReplica> rs = outboxService.getSent(mbean.getMid(), pr);
        model.addAttribute("rs", rs.getResult().collect(Collectors.toList()));
        model.addAttribute("pageData", fpbuild.toPageData(pr, rs.getTotalElements()));
        return "admin/message/sent";
    }
    
    //查看
    @GetMapping(path = "/view")
    public String showMessageDetails(
            @RequestParam("id") long id,
            MemberSessionBean mbean,
            HttpServletRequest request,
            Model model) {
        ForumLetterReplica data = forumLetterService.getOneLazyReceiver(id).orElseThrow(()->new ResourceNotFoundException("查看的消息不存在或暂时无法访问"));
        model.addAttribute("letter", data);
        //
        boolean isInbox = false;
        long senderMember = 0;
街头小贩's avatar
街头小贩 已提交
96 97
        String receiver;
        String sender;
街头小贩's avatar
街头小贩 已提交
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
        //
        if (data.getAuthor() == mbean.getMid()) { //我发送的消息
            receiver = data.getTargetReceiverNicknames();
            sender = "我";
        } else {
            sender = data.getNickname();
            receiver = "我";
            isInbox = true;
            senderMember = data.getAuthor();
        }
        model.addAttribute("senderMember", senderMember);
        model.addAttribute("isInbox", isInbox);
        model.addAttribute("receiver", receiver);
        model.addAttribute("sender", sender);
        return "admin/message/view";
    }
    
    //新消息
    @GetMapping(path = "/create")
    public String createMessageForm(
            @RequestParam(value = "receiver", required = false, defaultValue = "0") long receiver,
            @RequestParam(value = "names", required = false, defaultValue = "") String receiverNames,
            @RequestParam(value = "label", required = false, defaultValue = "-1") int label,
            HttpServletRequest request,
            Model model) {
        ForumMessageFullForm form = new ForumMessageFullForm();
        if (receiver > 0) {
            form.setUid("u" + receiver);
            form.setSnames(receiverNames);
            form.setLabel(label + "");
        }
        model.addAttribute("form", form);
        return "admin/message/create";
    }
    
    @PostMapping(path = "/create")
    public String createMessageAction(
            @ModelAttribute("form") ForumMessageFullForm form,
            MemberSessionBean mbean,
            HttpServletRequest request,
            Model model) {
        String receiverNickname = "*";
        long receiver = 0L;
        //
        Member m = memberService.get(form.getMemberId()).orElse(null);
        if (null != m) {
            receiverNickname = m.getNickname();
            receiver = m.getId();
        }
147
        long messageId = forumLetterService.create(form.getEnumLabel(), form.getTitle(), form.getContent(), receiver, receiverNickname, mbean.getMid(), mbean.getNickname());
街头小贩's avatar
街头小贩 已提交
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
        if (messageId > 0) {
            return "redirect:/message/sent";
        }
        model.addAttribute("errors", "发送消息操作失败");
        model.addAttribute("form", form);
        return "admin/message/create";
    }
    
    //删除消息(发件人不可以操作)
    @PostMapping(path = "/delete", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public TipMessage removeMessageAction(
            @RequestParam("id") long id,
            MemberSessionBean mbean,
            HttpServletRequest request,
            Model model) {
街头小贩's avatar
街头小贩 已提交
164
        return TipMessage.Builder.of(()->inboxService.remove(mbean.getMid(), Arrays.asList(id)) == 1).success("消息删除成功").error("操作失败");
街头小贩's avatar
街头小贩 已提交
165 166 167 168 169 170 171 172 173 174
    }
    
    //阅读消息(发件人不可以操作)
    @PostMapping(path = "/read", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public TipMessage readMessageAction(
            @RequestParam("id") long id,
            MemberSessionBean mbean,
            HttpServletRequest request,
            Model model) {
街头小贩's avatar
街头小贩 已提交
175
        return TipMessage.Builder.of(()->inboxService.readed(mbean.getMid(), Arrays.asList(id)) == 1).success("消息标记成功").error("操作失败");
街头小贩's avatar
街头小贩 已提交
176 177 178 179 180 181 182 183 184
    }
    
    @GetMapping(path = "/label/json", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public Map<Integer, String> getAllRoles(HttpServletRequest request, Model model) {
        //滤掉0
        return EnumArchitecture.getInstance(ForumLetterTypeEnum.class).entrySet().stream().filter(x -> x.getKey() > 0).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
    }
}