package com.wn.web;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.google.gson.Gson;
import com.wn.dao.GroupChatDao;
import com.wn.model.BaseResult;
import com.wn.model.ChatBean;
import com.wn.model.GroupChatBean;
import com.wn.util.BaseUtils;
import com.wn.util.CommonUtils;
import com.wn.util.DbUtils;
import com.wn.util.PrintWriterUtils;
import com.wn.util.VideoUtils;
/**
* Author : wangning
* Date : 2022年11月13日 下午10:37:54
* Email : maoning20080809@163.com
* Description : 群聊
*/
@WebServlet("/groupchat")
public class GroupChatServlet extends BaseServlet {
private GroupChatDao groupChatDao = new GroupChatDao();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String method = request.getParameter("method");
System.out.println("GroupChatServlet 方法名:" + method);
if("insertGroupChat".equals(method)) {
processInsertGroupChat(request, response);
} else if("getGroupChat".equals(method)) {
processGetGroupChat(request, response);
} else if("uploadGroupChatImages".equals(method)) {
processUploadImages(request, response);
} else if("uploadGroupChatVoice".equals(method)) {
processUploadGroupChatVoice(request, response);
} else if("uploadGroupChatVideo".equals(method)) {
processUploadGroupChatVideo(request, response);
} else if("testInsertGroupChat".equals(method)) {
testInsertGroupChat(request, response);
} else if("testGetGroupChat".equals(method)) {
testGetGroupChat(request, response);
}
super.doPost(request, response);
}
//插入群聊信息
private void processInsertGroupChat(HttpServletRequest request, HttpServletResponse response) throws IOException {
Connection con = null;
BaseResult<String> baseResult = new BaseResult<String>();
try {
con = DbUtils.getInstance().getConnection();
String groupChatStr = request.getParameter("groupChat");
//String groupChatStr = (String)request.getAttribute("groupChat");
GroupChatBean groupChatBean = new Gson().fromJson(groupChatStr, GroupChatBean.class);
boolean isSuccess = groupChatDao.insertGroupChat(con, groupChatBean);
System.out.println("插入群聊返回值:" + isSuccess);
baseResult.setSuccess(true);
} catch (Exception e) {
e.printStackTrace();
baseResult.setSuccess(false);
} finally {
PrintWriterUtils.basePrintWriterObject(response, baseResult);
DbUtils.getInstance().close(con);
}
}
//获取群聊信息
private void processGetGroupChat(HttpServletRequest request, HttpServletResponse response) throws IOException {
BaseResult<String> baseResult = new BaseResult<String>();
Connection con = null;
try {
con = DbUtils.getInstance().getConnection();
String messageId = request.getParameter("messageId");
//String messageId = (String)request.getAttribute("messageId");
System.out.println("processGetGroupChat 参数:" + messageId);
GroupChatBean groupChatBean = groupChatDao.getGroupChatByMessageId(con,messageId);
if(groupChatBean == null) {
baseResult.setSuccess(false);
} else {
String groupChatBeanGson = new Gson().toJson(groupChatBean);
System.out.println("processGetGroupChat 返回值:" + groupChatBeanGson);
baseResult.setSuccess(true);
baseResult.setData(groupChatBeanGson);
}
} catch (Exception e) {
e.printStackTrace();
baseResult.setSuccess(false);
} finally {
PrintWriterUtils.basePrintWriterObject(response, baseResult);
DbUtils.getInstance().close(con);
}
}
//上传群聊图片
private void processUploadImages(HttpServletRequest request, HttpServletResponse response) throws IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
factory.setSizeThreshold(1024 * 1024);
List items = null;
String filename = "";
ArrayList<String> paramList = new ArrayList<String>();
BaseResult<String> baseResult = new BaseResult<String>();
Connection con = null;
try {
con = DbUtils.getInstance().getConnection();
items = upload.parseRequest(request);
Iterator iter = items.iterator();
while(iter.hasNext()) {
FileItem item = (FileItem)iter.next();
if(!item.isFormField()) {
filename = System.currentTimeMillis() + ".jpg";
String resultPath = BaseUtils.getUploadPath(request);
File f = new File(resultPath);
if(!f.exists()) {
f.mkdirs();
}
String imgsrc = resultPath + filename;
InputStream is = item.getInputStream();
FileOutputStream fos = new FileOutputStream(imgsrc);
byte b[] = new byte[1024 * 1024];
int length = 0;
while(-1 != (length = is.read(b))) {
fos.write(b, 0, length);
}
fos.flush();
fos.close();
System.out.println("上传群聊图片路径:" + filename);
} else {
//获取其他参数
String value = item.getString("UTF-8");
paramList.add(value);
}
}
GroupChatBean groupChatBean = getGroupChatBean(paramList, filename, "");
boolean isSuccess = true;
groupChatDao.insertGroupChat(con,groupChatBean);
if(isSuccess) {
String groupChatBeanGson = new Gson().toJson(groupChatBean);
baseResult.setSuccess(true);
baseResult.setData(groupChatBeanGson);
} else {
baseResult.setSuccess(false);
}
} catch(Exception e) {
e.printStackTrace();
baseResult.setSuccess(false);
} finally {
DbUtils.getInstance().close(con);
PrintWriterUtils.basePrintWriterObject(response, baseResult);
}
}
//上传群聊小视频
private void processUploadGroupChatVideo(HttpServletRequest request, HttpServletResponse response) throws IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
factory.setSizeThreshold(1024 * 1024);
List items = null;
//小视频文件
String filename = "";
ArrayList<String> paramList = new ArrayList<String>();
//小视频缩略图
String videoFrame = "";
BaseResult<String> baseResult = new BaseResult<String>();
Connection con = null;
try {
con = DbUtils.getInstance().getConnection();
String videoFrameFileName = "";
items = upload.parseRequest(request);
Iterator iter = items.iterator();
while(iter.hasNext()) {
FileItem item = (FileItem)iter.next();
if(!item.isFormField()) {
filename = System.currentTimeMillis() + ".mp4";
String resultPath = BaseUtils.getUploadPath(request);
File f = new File(resultPath);
if(!f.exists()) {
f.mkdirs();
}
String videosrc = resultPath + filename;
InputStream is = item.getInputStream();
FileOutputStream fos = new FileOutputStream(videosrc);
byte b[] = new byte[1024 * 1024];
int length = 0;
while(-1 != (length = is.read(b))) {
fos.write(b, 0, length);
}
fos.flush();
fos.close();
//生成群聊小视频对应的缩略图
videoFrameFileName = System.currentTimeMillis() + ".jpg";
videoFrame = resultPath + videoFrameFileName;
File videoFrameFile = new File(videoFrame);
if(!videoFrameFile.exists()) {
videoFrameFile.createNewFile();
}
VideoUtils.fetchImage(videosrc, videoFrame);
System.out.println("上传群聊小视频路径:" + filename +" , 缩略图路径: " + videoFrameFileName);
} else {
//获取其他参数
String value = item.getString("UTF-8");
paramList.add(value);
}
}
GroupChatBean groupChatBean = getGroupChatBean(paramList, filename, videoFrameFileName);
boolean isSuccess = groupChatDao.insertGroupChat(con,groupChatBean);
if(isSuccess) {
String chatBeanGson = new Gson().toJson(groupChatBean);
baseResult.setSuccess(true);
baseResult.setData(chatBeanGson);
} else {
baseResult.setSuccess(false);
}
} catch(Exception e) {
e.printStackTrace();
baseResult.setSuccess(false);
} finally {
PrintWriterUtils.basePrintWriterObject(response, baseResult);
DbUtils.getInstance().close(con);
}
}
//上传群聊语音
private void processUploadGroupChatVoice(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("上传群聊语音");
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
factory.setSizeThreshold(1024 * 1024);
List items = null;
//语音文件
String filename = "";
ArrayList<String> paramList = new ArrayList<String>();
BaseResult<String> baseResult = new BaseResult<String>();
Connection con = null;
try {
con = DbUtils.getInstance().getConnection();
items = upload.parseRequest(request);
Iterator iter = items.iterator();
while(iter.hasNext()) {
FileItem item = (FileItem)iter.next();
if(!item.isFormField()) {
filename = System.currentTimeMillis() + ".mp3";
String resultPath = BaseUtils.getUploadPath(request);
File f = new File(resultPath);
if(!f.exists()) {
f.mkdirs();
}
String videosrc = resultPath + filename;
InputStream is = item.getInputStream();
FileOutputStream fos = new FileOutputStream(videosrc);
byte b[] = new byte[1024 * 1024];
int length = 0;
while(-1 != (length = is.read(b))) {
fos.write(b, 0, length);
}
fos.flush();
fos.close();
System.out.println("上传群聊语音频路径:" + filename);
} else {
//获取其他参数
String value = item.getString("UTF-8");
paramList.add(value);
}
}
GroupChatBean groupChatBean = getGroupChatBean(paramList, filename, "");
System.out.println("上传的群聊语音:" + new Gson().toJson(groupChatBean));
boolean isSuccess = groupChatDao.insertGroupChat(con,groupChatBean);
System.out.println("上传的群聊语音返回:" + isSuccess);
if(isSuccess) {
String groupChatGson = new Gson().toJson(groupChatBean);
baseResult.setSuccess(true);
baseResult.setData(groupChatGson);
} else {
baseResult.setSuccess(false);
}
} catch(Exception e) {
e.printStackTrace();
baseResult.setSuccess(false);
} finally {
PrintWriterUtils.basePrintWriterObject(response, baseResult);
DbUtils.getInstance().close(con);
}
}
/**
* 获取群聊对象
* @param paramList
* @param filePath 文件路径
* @param videoFrame 小视频缩略图
* @return
*/
private GroupChatBean getGroupChatBean(ArrayList<String> paramList, String filePath,String videoFrame){
GroupChatBean groupChatBean = new GroupChatBean();
String account = paramList.get(0);
String groupId = paramList.get(1);
int contentType = Integer.parseInt(paramList.get(2));
String messageId = paramList.get(3);
String addTime = paramList.get(4);
groupChatBean.setAccount(account);
groupChatBean.setGroupId(groupId);
groupChatBean.setContent("");
groupChatBean.setContentType(contentType);
groupChatBean.setMessageId(messageId);
groupChatBean.setAddTime(addTime);
groupChatBean.setMediaUrl(filePath);
if(contentType == CommonUtils.Chat.CONTENT_TYPE_VIDEO
|| contentType == CommonUtils.Chat.CONTENT_TYPE_VOICE) {
//设置时间
groupChatBean.setSecond(Integer.parseInt(paramList.get(5)));
}
return groupChatBean;
}
//测试插入群聊信息
private void testInsertGroupChat(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("测试插入群聊信息 testInsertGroupChat");
GroupChatBean groupChatBean = new GroupChatBean();
groupChatBean.setId(1);
groupChatBean.setAccount("test1");
groupChatBean.setAddTime("20080808080808");
groupChatBean.setContent("test 666666888888");
groupChatBean.setContentType(1);
groupChatBean.setMediaUrl("http://www.baidu.com/");
Random random = new Random();
groupChatBean.setGroupId("g" + random.nextInt(10000));
groupChatBean.setMessageId("msg" + random.nextInt(1000000));
String groupChatBeanString = new Gson().toJson(groupChatBean);
request.setAttribute("groupChat", groupChatBeanString);
processInsertGroupChat(request, response);
}
//测试获取群聊信息
private void testGetGroupChat(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("测试插入群聊信息 testGetGroupChat");
request.setAttribute("messageId", "msg356716");
processGetGroupChat(request, response);
}
}