SSM+MySQL实现线上办公系统
开发时间:2019.5-2019.7
项目模块
一、在线信息模块
包括:发送信息、删除信息、草稿箱管理、查询信息
二、代码
1.spring配置文件
applicationContext.xml文件作为系统的父容器,用来处理除了controller以外的内容。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<!-- 引入资源文件用于在java中注入属性值 -->
<bean id="prop" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<array>
<value>classpath:db_config.properties</value>
</array>
</property>
</bean>
<!-- 加载属性文件 -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<array>
<value>classpath:db_config.properties</value>
</array>
</property>
</bean>
<!-- 扫描注解,排除控制器扫描 -->
<context:component-scan base-package="com.icss.oa">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- 数据源 c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}" />
<property name="jdbcUrl" value="${url}" />
<property name="user" value="${username}" />
<property name="password" value="${password}" />
<property name="maxPoolSize" value="15" />
<property name="minPoolSize" value="5" />
<property name="initialPoolSize" value="5" />
<property name="acquireIncrement" value="5" />
</bean>
<!-- sessionFactory 将spring和mybatis整合 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/icss/oa/*/mapper/*.xml" />
</bean>
<!-- DAO接口扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描包路径,如果需要扫描多个包中间用半角逗号隔开 -->
<property name="basePackage" value="com.icss.oa.*.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<!-- 事务管理器 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 事务注解支持,需要在要切入事务的类中加入@Transactional注解 -->
<tx:annotation-driven transaction-manager="txManager" />
</beans>
2.SpringMVC配置文件
用来处理与浏览器相关的操作,在扫描组件的时候只扫描控制器。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 扫描注解,只扫描控制器 -->
<context:component-scan base-package="com.icss.oa">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 视图解析器 ,自动给转发地址加上前缀和后缀-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- springMVC注解驱动,mvc:annotation-driven处理动态资源 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 默认请求处理,处理静态资源 -->
<mvc:default-servlet-handler/>
<!-- 文件上传设置 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="utf-8"/>
<!-- 最大文件上传大小限制,当前设置10M -->
<property name="maxUploadSize" value="10485760"/>
<!-- 最大内存临时文件限制,当前设置4k -->
<property name="maxInMemorySize" value="4096"/>
</bean>
</beans>
3、MessageController.java
控制器层。
package com.icss.oa.message.controller;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.icss.oa.common.Pager;
import com.icss.oa.message.pojo.Message;
import com.icss.oa.message.service.MessageService;
import com.icss.oa.system.pojo.Employee;
import com.icss.oa.system.service.EmployeeService;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
/**
* 信息控制器
*
* @author Administrator
*
*/
@Controller
public class MessageController {
@Autowired
private MessageService service;
@Autowired
private EmployeeService empService;
/**
* 增加信息
*
* @param request
* @param response
* @param dept
*/
@RequestMapping("/mes/addMes")
public void addMes(HttpServletRequest request, HttpServletResponse response, Message Message) {
service.addMes(Message);
}
/**
* 增加信息,根据登录名增加,已发信息
*
* @param request
* @param response
* @param dept
*/
@RequestMapping("/mes/addMesByLoginName")
public void addMesByLoginName(HttpServletRequest request, HttpServletResponse response, Integer[] emp,
Message mes) {
for (int i = 0; i < emp.length; i++) {
Date mesSendDate = new Date();
HttpSession session = request.getSession();
String empLoginName = (String) session.getAttribute("empLoginName");
Employee employee = empService.queryEmpByLoginName(empLoginName);
employee.setEmpId(empService.getId(empLoginName));
Integer empId = employee.getEmpId();
Employee mesSender = new Employee();
mesSender.setEmpId(empId);
mes.setMesSender(mesSender);
Employee mesReciver = empService.getById(emp[i]);
mes.setMesReciver(mesReciver);
mes.setMesSendConfirm("已发");
mes.setMesReadConfirm("未读");
mes.setMesSendDate(mesSendDate);
service.addMes(mes);
}
}
/**
* 发件群发到草稿箱
* @param request
* @param response
* @param emp
* @param mes
*/
@RequestMapping("/mes/addDraftByLoginNameNew")
public void addDraftByLoginNameNew(HttpServletRequest request, HttpServletResponse response, Integer[] emp,
Message mes) {
for (int i = 0; i < emp.length; i++) {
Date mesSendDate = new Date();
HttpSession session = request.getSession();
String empLoginName = (String) session.getAttribute("empLoginName");
Employee employee = empService.queryEmpByLoginName(empLoginName);
employee.setEmpId(empService.getId(empLoginName));
Integer empId = employee.getEmpId();
Employee mesSender = new Employee();
mesSender.setEmpId(empId);
mes.setMesSender(mesSender);
Employee mesReciver = empService.getById(emp[i]);
mes.setMesReciver(mesReciver);
mes.setMesSendConfirm("未发");
mes.setMesReadConfirm("未读");
mes.setMesSendDate(mesSendDate);
service.addMes(mes);
}
}
/**
* 增加信息,根据登录名增加,草稿箱
*
* @param request
* @param response
* @param dept
*/
@RequestMapping("/mes/addDraftByLoginName")
public void addDraftByLoginName(HttpServletRequest request, HttpServletResponse response, Message mes) {
Date mesSendDate = new Date();
HttpSession session = request.getSession();
String empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
emp.setEmpId(empService.getId(empLoginName));
Integer empId = emp.getEmpId();
Employee mesSender = new Employee();
mesSender.setEmpId(empId);
mes.setMesSender(mesSender);
mes.setMesSendConfirm("未发");
mes.setMesReadConfirm("未读");
mes.setMesSendDate(mesSendDate);
service.addMes(mes);
}
/**
* 删除信息
*
* @param request
* @param response
* @param Message
*/
@RequestMapping("/mes/deleteMes")
public void delete(HttpServletRequest request, HttpServletResponse response, Integer mesId) {
service.deleteMes(mesId);
}
/**
* 修改信息
*
* @param request
* @param response
* @param Message
*/
@RequestMapping("/mes/updateMes")
public void update(HttpServletRequest request, HttpServletResponse response, Message mes) {
Date mesSendDate = new Date();
HttpSession session = request.getSession();
String empLoginName = (String) session.getAttribute("empLoginName");
Employee employee = empService.queryEmpByLoginName(empLoginName);
employee.setEmpId(empService.getId(empLoginName));
Integer empId = employee.getEmpId();
Employee mesSender = new Employee();
mesSender.setEmpId(empId);
mes.setMesSender(mesSender);
mes.setMesSendDate(mesSendDate);
service.updateMes(mes);
}
/**
* 修改信息
* @param request
* @param response
* @param mes
*/
@RequestMapping("/mes/updateMesNew")
public void updateNew(HttpServletRequest request, HttpServletResponse response, Message mes) {
Date mesSendDate = new Date();
HttpSession session = request.getSession();
String empLoginName = (String) session.getAttribute("empLoginName");
Employee employee = empService.queryEmpByLoginName(empLoginName);
employee.setEmpId(empService.getId(empLoginName));
Integer empId = employee.getEmpId();
Employee mesSender = new Employee();
mesSender.setEmpId(empId);
mes.setMesSender(mesSender);
mes.setMesSendDate(mesSendDate);
mes.setMesSendConfirm("已发");
service.updateMes(mes);
}
/**
* 把未读消息点开变成已读消息
*
* @param request
* @param response
* @param mes
*/
@RequestMapping("/mes/updateUnread")
public void updateUnread(HttpServletRequest request, HttpServletResponse response, Message mes) {
// HttpSession session = request.getSession();
//
// String empLoginName = (String) session.getAttribute("empLoginName");
// Employee employee = empService.queryEmpByLoginName(empLoginName);
// employee.setEmpId(empService.getId(empLoginName));
//
// Integer empId = employee.getEmpId();
// Employee mesSender = new Employee();
// mesSender.setEmpId(empId);
// mes.setMesSendDate(mesSendDate);
HttpSession session = request.getSession();
String empLoginName = (String) session.getAttribute("empLoginName");
Employee employee = empService.queryEmpByLoginName(empLoginName);
employee.setEmpId(empService.getId(empLoginName));
Integer empId = employee.getEmpId();
Employee mesSender = new Employee();
mesSender.setEmpId(empId);
mes.setMesSender(mesSender);
mes.setMesReadConfirm("已读");
service.updateMes(mes);
}
/**
* 条件查询
*
* @param request
* @param response
* @param start
* @param pageSize
* @param mesSendDate
* @param empEmail
* @param mesTitle
* @return
* @throws UnsupportedEncodingException
*/
@RequestMapping("/mes/queryByCondition")
@ResponseBody
public HashMap<String, Object> queryByCondition(HttpServletRequest request, HttpServletResponse response,
Integer pageNum, Integer pageSize, String mesSendDate, String empEmail, String mesTitle, Integer empId,
String mesInfo) throws UnsupportedEncodingException {
if (pageNum == null) {
pageNum = 0;
}
if (pageSize == null) {
pageSize = 5;
}
Pager pager = new Pager(service.getMesCountByCondition(mesSendDate, empEmail, mesTitle, empId, mesInfo),
pageSize, pageNum);
List<Message> list = service.queryMesByCondition(pager, mesSendDate, empEmail, mesTitle, empId, mesInfo);
// 在Map集合中存储分页数据和信息数据
HashMap<String, Object> map = new HashMap<>();
map.put("pager", pager);
map.put("list", list);
return map;
}
/**
* 条件查询 没有收件人
*
* @param request
* @param response
* @param start
* @param pageSize
* @param mesSendDate
* @param empEmail
* @param mesTitle
* @return
*/
@RequestMapping("/mes/queryByCondition1")
@ResponseBody
public HashMap<String, Object> queryByCondition1(HttpServletRequest request, HttpServletResponse response,
Integer pageNum, Integer pageSize, String mesSendDate, String empEmail, String mesTitle) {
if (pageNum == null) {
pageNum = 0;
}
if (pageSize == null) {
pageSize = 5;
}
Pager pager = new Pager(service.getMesCount(), pageSize, pageNum);
List<Message> list = service.queryMesByCondition1(pager, mesSendDate, empEmail, mesTitle);
// 在Map集合中存储分页数据和信息数据
HashMap<String, Object> map = new HashMap<>();
map.put("pager", pager);
map.put("list", list);
return map;
}
/**
* 根据登录名查询
*
* @param request
* @param response
* @param pageNum
* @param pageSize
* @param empLoginName
* @return
*/
@RequestMapping("/mes/queryByEmpLoginName")
@ResponseBody
public HashMap<String, Object> queryByEmpLoginName(HttpServletRequest request, HttpServletResponse response,
Integer pageNum, Integer pageSize, String empLoginName, String mesSendDate, String empEmail,
String mesTitle, Integer empId, String mesInfo) {
HttpSession session = request.getSession();
empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
session.setAttribute("empId", emp.getEmpId()); // 记录用户id
if (pageNum == null) {
pageNum = 0;
}
if (pageSize == null) {
pageSize = 5;
}
Pager pager = new Pager(
service.getMesCountByEmpLoginName(empLoginName, mesSendDate, empEmail, mesTitle, empId, mesInfo),
pageSize, pageNum);
List<Message> list = service.queryMesByLoginName(empLoginName, pager, mesSendDate, empEmail, mesTitle, empId,
mesInfo);
// 在Map集合中存储分页数据和信息数据
HashMap<String, Object> map = new HashMap<>();
map.put("pager", pager);
map.put("list", list);
return map;
}
/**
* 查询草稿箱
*
* @param request
* @param response
* @param mesSendConfirm
* @param pageNum
* @param pageSize
* @param empLoginName
* @return
*/
@RequestMapping("/mes/queryDraft")
@ResponseBody
public HashMap<String, Object> queryDraft(HttpServletRequest request, HttpServletResponse response,
String mesSendConfirm, Integer pageNum, Integer pageSize, String empLoginName) {
HttpSession session = request.getSession();
empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
session.setAttribute("empId", emp.getEmpId()); // 记录用户id
if (pageNum == null) {
pageNum = 0;
}
if (pageSize == null) {
pageSize = 5;
}
Pager pager = new Pager(service.getMesDraftCount("未发", empLoginName), pageSize, pageNum);
List<Message> list = service.queryMesDraft("未发", pager, empLoginName);
// 在Map集合中存储分页数据和信息数据
HashMap<String, Object> map = new HashMap<>();
map.put("pager", pager);
map.put("list", list);
return map;
}
/**
* 查询发件箱
*
* @param request
* @param response
* @param mesSendConfirm
* @param pageNum
* @param pageSize
* @param empLoginName
* @return
*/
@RequestMapping("/mes/queryOutbox")
@ResponseBody
public HashMap<String, Object> queryOutbox(HttpServletRequest request, HttpServletResponse response,
String mesSendConfirm, Integer pageNum, Integer pageSize, String empLoginName) {
HttpSession session = request.getSession();
empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
session.setAttribute("empId", emp.getEmpId()); // 记录用户id
if (pageNum == null) {
pageNum = 0;
}
if (pageSize == null) {
pageSize = 5;
}
Pager pager = new Pager(service.getMesDraftCount("已发", empLoginName), pageSize, pageNum);
List<Message> list = service.queryMesDraft("已发", pager, empLoginName);
// 在Map集合中存储分页数据和信息数据
HashMap<String, Object> map = new HashMap<>();
map.put("pager", pager);
map.put("list", list);
return map;
}
/**
* 查询收件箱
*
* @param request
* @param response
* @param pageNum
* @param pageSize
* @param empLoginName
* @return
*/
@RequestMapping("/mes/queryInbox")
@ResponseBody
public HashMap<String, Object> queryInbox(HttpServletRequest request, HttpServletResponse response, Integer pageNum,
Integer pageSize, String empLoginName) {
HttpSession session = request.getSession();
empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
session.setAttribute("empId", emp.getEmpId()); // 记录用户id
if (pageNum == null) {
pageNum = 0;
}
if (pageSize == null) {
pageSize = 5;
}
Pager pager = new Pager(service.getMesInboxCount(empLoginName), pageSize, pageNum);
List<Message> list = service.queryMesInbox(pager, empLoginName);
// 在Map集合中存储分页数据和信息数据
HashMap<String, Object> map = new HashMap<>();
map.put("pager", pager);
map.put("list", list);
return map;
}
/**
* 未读消息
*
* @param request
* @param response
* @param mesSendConfirm
* @param mesReadConfirm
* @param pageNum
* @param pageSize
* @param empLoginName
* @return
*/
@RequestMapping("/mes/queryUnread")
@ResponseBody
public HashMap<String, Object> queryUnread(HttpServletRequest request, HttpServletResponse response,
String mesSendConfirm, String mesReadConfirm, Integer pageNum, Integer pageSize, String empLoginName) {
HttpSession session = request.getSession();
empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
session.setAttribute("empId", emp.getEmpId()); // 记录用户id
if (pageNum == null) {
pageNum = 0;
}
if (pageSize == null) {
pageSize = 5;
}
Pager pager = new Pager(service.getMesUnreadCount("已发", "未读", empLoginName), pageSize, pageNum);
List<Message> list = service.queryMesUnread("已发", "未读", pager, empLoginName);
// 在Map集合中存储分页数据和信息数据
HashMap<String, Object> map = new HashMap<>();
map.put("pager", pager);
map.put("list", list);
return map;
}
/**
* 根据id查询信息
*
* @param request
* @param response
* @param mesId
* @return
*/
@RequestMapping("/mes/queryById")
@ResponseBody
public Message queryById(HttpServletRequest request, HttpServletResponse response, Integer mesId) {
Message mes = service.queryMesById(mesId);
return mes;
}
/**
* 全文检索信息
*
* @throws IOException
* @throws ParseException
* @throws InvalidTokenOffsetsException
*/
@RequestMapping("mes/queryByIndex")
@ResponseBody
public List<Message> queryByIndex(HttpServletRequest request, HttpServletResponse response, String queryStr)
throws ParseException, IOException, InvalidTokenOffsetsException {
return service.queryMesByIndex(queryStr);
}
/**
* 批量删除
*/
@RequestMapping("mes/deleteMany")
public void deleteMany(HttpServletRequest request, HttpServletResponse response, Integer[] ids)
throws ParseException, IOException, InvalidTokenOffsetsException {
for (int i = 0; i < ids.length; i++) {
service.deleteMes(ids[i]);
}
}
/**
* 群发邮件
*/
@RequestMapping("mes/addMany")
public void insertMany(HttpServletRequest request, HttpServletResponse response, Integer[] emp, Message mes) {
for (int i = 0; i < emp.length; i++) {
Employee employee = empService.getById(emp[i]);
mes.setMesReciver(employee);
service.addMes(mes);
}
}
/**
* 获得未读消息的数量
*
* @param request
* @param response
* @param count
*/
@RequestMapping("mes/getUnreadCount")
@ResponseBody
public Integer getUnreadCount(HttpServletRequest request, HttpServletResponse response, Integer count,
String empLoginName) {
HttpSession session = request.getSession();
empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
session.setAttribute("empId", emp.getEmpId()); // 记录用户id
count = service.getMesUnreadCount("已发", "未读", empLoginName);
return count;
}
/**
* 获得收件箱个数
*
* @param request
* @param response
* @param count
* @param empLoginName
* @return
*/
@RequestMapping("mes/getInboxCount")
@ResponseBody
public Integer getInboxCount(HttpServletRequest request, HttpServletResponse response, Integer count,
String empLoginName) {
HttpSession session = request.getSession();
empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
session.setAttribute("empId", emp.getEmpId()); // 记录用户id
count = service.getMesInboxCount(empLoginName);
return count;
}
/**
* 获得发件箱个数
*
* @param request
* @param response
* @param count
* @param empLoginName
* @return
*/
@RequestMapping("mes/getOutboxCount")
@ResponseBody
public Integer getOutboxCount(HttpServletRequest request, HttpServletResponse response, Integer count,
String empLoginName) {
HttpSession session = request.getSession();
empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
session.setAttribute("empId", emp.getEmpId()); // 记录用户id
count = service.getMesDraftCount("已发", empLoginName);
return count;
}
/**
* 获得草稿箱个数
*
* @param request
* @param response
* @param count
* @param empLoginName
* @return
*/
@RequestMapping("mes/getDraftCount")
@ResponseBody
public Integer getDraftCount(HttpServletRequest request, HttpServletResponse response, Integer count,
String empLoginName) {
HttpSession session = request.getSession();
empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
session.setAttribute("empId", emp.getEmpId()); // 记录用户id
count = service.getMesDraftCount("未发", empLoginName);
return count;
}
/**
* 总数
*
* @param request
* @param response
* @param count
* @param empLoginName
* @return
*/
@RequestMapping("mes/getCount")
@ResponseBody
public Integer getCount(HttpServletRequest request, HttpServletResponse response, Integer count,
String empLoginName) {
HttpSession session = request.getSession();
empLoginName = (String) session.getAttribute("empLoginName");
Employee emp = empService.queryEmpByLoginName(empLoginName);
session.setAttribute("empId", emp.getEmpId()); // 记录用户id
count = service.getMesCountByEmpLoginName(empLoginName, null, null, null, null, null);
return count;
}
}
4、MessageService.java
package com.icss.oa.message.service;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.util.CharArraySet;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.Term;
import org.apache.lucene.document.TextField;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
import org.apache.lucene.util.Version;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.icss.oa.common.Pager;
import com.icss.oa.message.dao.MessageMapper;
import com.icss.oa.message.index.MessageIndexDao;
import com.icss.oa.message.pojo.Message;
import com.icss.oa.system.dao.EmployeeMapper;
import com.icss.oa.system.pojo.Employee;
/**
* 在线信息业务层
*
* @author bhl
*
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class MessageService {
@Autowired
private MessageMapper mapper;
@Autowired
private EmployeeMapper empMapper;
@Autowired
private MessageIndexDao indexDao;
/**
* 根据id查询信息
*
* @param mesId
* @return
*/
public Message queryMesById(Integer mesId) {
return mapper.queryById(mesId);
}
/**
* 添加信息
*
* @param mes
*/
public void addMes(Message mes) {
mapper.insert(mes);
// 获得插入员工的自动编号
int mesId = mapper.getLastInsertId();
try {
/********** 生成索引 *************/
// 创建索引文档
Document document = new Document();
document.add(new TextField("mesId", String.valueOf(mesId), Store.YES));
document.add(new TextField("mesTitle", mes.getMesTitle(), Store.YES));
document.add(new TextField("mesInfo", mes.getMesInfo(), Store.YES));
// 调用索引dao
indexDao.create(document);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 删除信息
*
* @param mesId
*/
public void deleteMes(Integer mesId) {
mapper.delete(mesId);
// 索引
try {
Term term = new Term("mesId", String.valueOf(mesId));
// 调用索引dao
indexDao.delete(term);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 修改信息
*
* @param mes
*/
public void updateMes(Message mes) {
mapper.update(mes);
// 索引
try {
Term term = new Term("mesId", String.valueOf(mes.getMesId()));
// 创建索引文档
Document document = new Document();
document.add(new TextField("empId", String.valueOf(mes.getMesId()), Store.YES));
document.add(new TextField("mesTitle", mes.getMesTitle(), Store.YES));
document.add(new TextField("mesInfo", mes.getMesInfo(), Store.YES));
// 调用索引dao
indexDao.update(term, document);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回信息总记录数
*
* @return
*/
@Transactional(readOnly = true)
public int getMesCount() {
return mapper.getCount();
}
/**
* 全部的模糊查询
*
* @param pager
* @param mesSendDate
* @param empEmail
* @param mesTitle
* @param mesReciver
* @param mesInfo
* @return
*/
@Transactional(readOnly = true)
public List<Message> queryMesByCondition(Pager pager, String mesSendDate, String empEmail, String mesTitle,
Integer mesReciver, String mesInfo) {
return mapper.queryByCondition(pager.getStart(), pager.getPageSize(), mesSendDate, empEmail, mesTitle,
mesReciver, mesInfo);
}
/**
* 全部的模糊查询 没有收件人
*
* @param pager
* @param mesSendDate
* @param empEmail
* @param mesTitle
* @return
*/
@Transactional(readOnly = true)
public List<Message> queryMesByCondition1(Pager pager, String mesSendDate, String empEmail, String mesTitle) {
return mapper.queryByCondition1(pager.getStart(), pager.getPageSize(), mesSendDate, empEmail, mesTitle);
}
/**
* 根据条件查询总记录数
*
* @param mesSendDate
* @param empEmail
* @param mesTitle
* @param mesReciver
* @param mesInfo
* @return
*/
@Transactional(readOnly = true)
public Integer getMesCountByCondition(String mesSendDate, String empEmail, String mesTitle, Integer mesReciver,
String mesInfo) {
return mapper.getCountByCondition(mesSendDate, empEmail, mesTitle, mesReciver, mesInfo);
}
/**
* 全文检索员工
*
* @throws ParseException
* @throws IOException
* @throws InvalidTokenOffsetsException
*/
@Transactional(readOnly = true)
public List<Message> queryMesByIndex(String queryStr)
throws IOException, InvalidTokenOffsetsException, ParseException {
// 设置常见停用词(的,么,啊,着之类的东东)
String[] self_stop_words = { "的", "着", "啊", "么", "嘛", "是" };
CharArraySet cas = new CharArraySet(Version.LUCENE_47, 0, true);
for (int i = 0; i < self_stop_words.length; i++) {
cas.add(self_stop_words[i]);
}
// 加入系统默认停用词
Iterator<Object> itor = StandardAnalyzer.STOP_WORDS_SET.iterator();
while (itor.hasNext()) {
cas.add(itor.next());
}
// 中文分词器(设置停用词)
Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_47, cas);
// 创建查询解析器对象,多字段搜索
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_47,
new String[] { "mesId", "mesTitle", "mesInfo" }, analyzer);
// 创建查询对象
Query query = queryParser.parse(queryStr);
// 调用索引dao
List<Message> list = indexDao.search(query);
return list;
}
/**
* 根据登录名查询信息
*
* @param empLoginName
* @param pager
* @return
*/
@Transactional(readOnly = true)
public List<Message> queryMesByLoginName(String empLoginName, Pager pager, String mesSendDate, String empEmail,
String mesTitle, Integer mesReciver, String mesInfo) {
return mapper.queryByLoginName(empLoginName, pager.getStart(), pager.getPageSize(), mesSendDate, empEmail,
mesTitle, mesReciver, mesInfo);
}
/**
* 根据登录名查询响应的总记录数
*
* @param empLoginName
* @return
*/
@Transactional(readOnly = true)
public int getMesCountByEmpLoginName(String empLoginName, String mesSendDate, String empEmail, String mesTitle,
Integer mesReciver, String mesInfo) {
return mapper.getCountByEmpLoginName(empLoginName, mesSendDate, empEmail, mesTitle, mesReciver, mesInfo);
}
/**
* 草稿箱和发件箱查询
*
* @param mesSendConfirm
* @param start
* @param pageSize
* @param empLoginName
* @return
*/
@Transactional(readOnly = true)
public List<Message> queryMesDraft(String mesSendConfirm, Pager pager, String empLoginName) {
return mapper.queryDraft(mesSendConfirm, pager.getStart(), pager.getPageSize(), empLoginName);
}
/**
* 草稿箱和发件箱个数
*
* @param mesSendConfirm
* @param empLoginName
* @return
*/
@Transactional(readOnly = true)
public Integer getMesDraftCount(String mesSendConfirm, String empLoginName) {
return mapper.getCountDraft(mesSendConfirm, empLoginName);
}
/**
* 收件箱查询
*
* @param start
* @param pageSize
* @param empLoginName
* @return
*/
@Transactional(readOnly = true)
public List<Message> queryMesInbox(Pager pager, String empLoginName) {
return mapper.queryInbox(pager.getStart(), pager.getPageSize(), empLoginName);
}
/**
* 收件箱个数
*
* @param empLoginName
* @return
*/
@Transactional(readOnly = true)
public Integer getMesInboxCount(String empLoginName) {
return mapper.getCountInbox(empLoginName);
}
/**
* 未读消息查询
*
* @param pager
* @param empLoginName
* @param mesSendConfirm
* @param mesReadConfirm
* @return
*/
@Transactional(readOnly = true)
public List<Message> queryMesUnread(String mesSendConfirm, String mesReadConfirm, Pager pager,
String empLoginName) {
return mapper.queryUnread(mesSendConfirm, mesReadConfirm, pager.getStart(), pager.getPageSize(), empLoginName);
}
/**
* 未读消息查询
*
* @param empLoginName
* @param mesSendConfirm
* @param mesReadConfirm
* @return
*/
@Transactional(readOnly = true)
public Integer getMesUnreadCount(String mesSendConfirm, String mesReadConfirm, String empLoginName) {
return mapper.getCountUnread(mesSendConfirm, mesReadConfirm, empLoginName);
}
/**
* 群发邮件
*
* @param mes
* @param ids
*/
public void groupSend(Message mes, Integer[] ids,String empLoginName) {
Employee sender = empMapper.queryByLoginName(empLoginName);
mes.setMesSender(sender);
for (int i = 0; i < ids.length; i++) {
Employee mesReciver = new Employee();
mesReciver.setEmpId(ids[i]);
mes.setMesReciver(mesReciver);
mapper.insert(mes);
// 获得插入信息的自动编号
int mesId = mapper.getLastInsertId();
try {
/********** 生成索引 *************/
// 创建索引文档
Document document = new Document();
document.add(new TextField("mesId", String.valueOf(mesId), Store.YES));
document.add(new TextField("mesTitle", mes.getMesTitle(), Store.YES));
document.add(new TextField("mesInfo", mes.getMesInfo(), Store.YES));
// 调用索引dao
indexDao.create(document);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
5、MessageMapper.java
package com.icss.oa.message.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.icss.oa.message.pojo.Message;
/**
* 在线信息dao层
*
* @author bhl
*
*/
public interface MessageMapper {
void insert(Message mes); // 增加信息
void update(Message mes); // 修改信息
void delete(Integer mesId); // 删除信息
Message queryById(Integer mesId); // 根据id查询信息
int getCount(); // 获得总数
// 条件查询个数
int getCountByCondition(@Param("mesSendDate") String mesSendDate, // 日期
@Param("empEmail") String empEmail, // 邮箱
@Param("mesTitle") String mesTitle, // 题目
@Param("mesReciver") Integer mesReciver, // 收件人
@Param("mesInfo") String mesInfo // 邮件信息
); // 根据条件获得总记录数
// 条件查询
List<Message> queryByCondition(@Param("start") Integer start, @Param("pageSize") Integer pageSize, // 分页
@Param("mesSendDate") String mesSendDate, // 日期
@Param("empEmail") String empEmail, // 邮箱
@Param("mesTitle") String mesTitle, // 题目
@Param("mesReciver") Integer mesReciver, // 收件人
@Param("mesInfo") String mesInfo // 邮件信息
);
// 条件查询1
List<Message> queryByCondition1(@Param("start") Integer start, @Param("pageSize") Integer pageSize, // 分页
@Param("mesSendDate") String mesSendDate, // 日期
@Param("empEmail") String empEmail, // 邮箱
@Param("mesTitle") String mesTitle // 题目
);
// 获得最后一个添加的信息的id
int getLastInsertId();
// 根据登录名获得信息
List<Message> queryByLoginName(@Param("empLoginName") String empLoginName, @Param("start") Integer start,
@Param("pageSize") Integer pageSize,
@Param("mesSendDate") String mesSendDate, // 日期
@Param("empEmail") String empEmail, // 邮箱
@Param("mesTitle") String mesTitle, // 题目
@Param("mesReciver") Integer mesReciver, // 收件人
@Param("mesInfo") String mesInfo // 邮件信息
);
// 根据登录名获得个数
int getCountByEmpLoginName(@Param("empLoginName") String empLoginName,
@Param("mesSendDate") String mesSendDate, // 日期
@Param("empEmail") String empEmail, // 邮箱
@Param("mesTitle") String mesTitle, // 题目
@Param("mesReciver") Integer mesReciver, // 收件人
@Param("mesInfo") String mesInfo // 邮件信息
);
// 草稿箱以及发件箱
List<Message> queryDraft(@Param("mesSendConfirm") String mesSendConfirm, // 是否发送
@Param("start") Integer start, @Param("pageSize") Integer pageSize,
@Param("empLoginName") String empLoginName);
// 草稿箱以及发件箱的个数
int getCountDraft(@Param("mesSendConfirm") String mesSendConfirm, @Param("empLoginName") String empLoginName);
// 收件箱
List<Message> queryInbox(@Param("start") Integer start, @Param("pageSize") Integer pageSize,
@Param("empLoginName") String empLoginName);
// 收件箱的个数
int getCountInbox(@Param("empLoginName") String empLoginName);
// 未读消息查询
List<Message> queryUnread(@Param("mesSendConfirm") String mesSendConfirm, // 是否发送
@Param("mesReadConfirm") String mesReadConfirm, @Param("start") Integer start,
@Param("pageSize") Integer pageSize, @Param("empLoginName") String empLoginName);
// 未读消息的个数
int getCountUnread(@Param("mesSendConfirm") String mesSendConfirm, @Param("mesReadConfirm") String mesReadConfirm,
@Param("empLoginName") String empLoginName);
}
6、MessageMapping.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.icss.oa.message.dao.MessageMapper">
<!-- 结果集映射 -->
<resultMap id="BaseResultMap" type="com.icss.oa.message.pojo.Message">
<id column="mes_id" property="mesId" jdbcType="INTEGER" />
<result column="mes_send_confirm" property="mesSendConfirm"
jdbcType="VARCHAR" />
<result column="mes_read_confirm" property="mesReadConfirm"
jdbcType="VARCHAR" />
<result column="mes_send_date" property="mesSendDate" jdbcType="TIMESTAMP" />
<result column="mes_info" property="mesInfo" jdbcType="VARCHAR" />
<result column="mes_title" property="mesTitle" jdbcType="VARCHAR" />
<association property="mesSender" javaType="com.icss.oa.system.pojo.Employee">
<id column="mes_sender" property="empId" jdbcType="INTEGER" />
<result column="sender_name" property="empName" jdbcType="VARCHAR" />
<result column="sender_login_name" property="empLoginName"
jdbcType="VARCHAR" />
<result column="sender_email" property="empEmail" jdbcType="VARCHAR" />
</association>
<association property="mesReciver" javaType="com.icss.oa.system.pojo.Employee">
<id column="mes_reciver" property="empId" jdbcType="INTEGER" />
<result column="reciver_name" property="empName" jdbcType="VARCHAR" />
<result column="reciver_login_name" property="empLoginName"
jdbcType="VARCHAR" />
<result column="reciver_email" property="empEmail" jdbcType="VARCHAR" />
</association>
</resultMap>
<!-- 插入信息,已经发送的方法发件箱,没有发送成功的放到草稿箱 -->
<insert id="insert" parameterType="com.icss.oa.message.pojo.Message">
insert into message
values(default, #{mesTitle}, #{mesSendConfirm},
#{mesReadConfirm},
#{mesSendDate}, #{mesInfo},
#{mesSender.empId},#{mesReciver.empId})
</insert>
<!-- 修改信息,在草稿箱才可以用到,发件箱不可以用到 -->
<update id="update" parameterType="com.icss.oa.message.pojo.Message">
update message set mes_title =
#{mesTitle},
mes_sender = #{mesSender.empId},
mes_reciver =
#{mesReciver.empId},
mes_send_confirm = #{mesSendConfirm},
mes_read_confirm =
#{mesReadConfirm},
mes_send_date = #{mesSendDate},
mes_info = #{mesInfo}
where mes_id=#{mesId}
</update>
<!-- 删除信息 -->
<delete id="delete" parameterType="java.lang.Integer">
delete from message
where
mes_id = #{mesId}
</delete>
<!-- 根据id查询信息 -->
<select id="queryById" resultMap="BaseResultMap" parameterType="java.lang.Integer">
SELECT m.*,e1.emp_id mes_sender,e2.emp_id
mes_reciver,e1.emp_name
sender_name,e2.emp_name reciver_name,
e1.emp_email sender_email,
e2.emp_email reciver_email
FROM message m
LEFT OUTER JOIN employee as e1
ON m.`mes_sender` = e1.`emp_id`
LEFT OUTER JOIN employee as e2
ON
m.`mes_reciver` = e2.`emp_id`
where mes_id=#{mesId}
order by
mes_send_date desc
</select>
<!-- 查询全部信息 -->
<select id="query" resultMap="BaseResultMap">
SELECT m.*,e1.emp_id
mes_sender,e2.emp_id
mes_reciver,e1.emp_name
sender_name,e2.emp_name
reciver_name,
e1.emp_email sender_email,
e2.emp_email reciver_email
FROM
message m
LEFT OUTER JOIN employee as e1
ON m.`mes_sender` = e1.`emp_id`
LEFT OUTER JOIN employee as e2
ON
m.`mes_reciver` = e2.`emp_id`
order by
mes_send_date desc
</select>
<!-- 简单的查询,把查询结果分页 -->
<select id="queryByPage" resultMap="BaseResultMap"
parameterType="java.util.HashMap">
SELECT m.*,e1.emp_id mes_sender,e2.emp_id
mes_reciver,e1.emp_name sender_name,e2.emp_name reciver_name,
e1.emp_email sender_email, e2.emp_email reciver_email
FROM message m
LEFT OUTER JOIN employee as e1
ON m.`mes_sender` = e1.`emp_id`
LEFT
OUTER JOIN employee as e2
ON m.`mes_reciver` = e2.`emp_id`
order by
mes_send_date desc
LIMIT
#{start}, #{pageSize}
</select>
<!-- 另一个分页查询 -->
<select id="queryByPage1" resultMap="BaseResultMap"
parameterType="java.util.HashMap">
SELECT m.*,e1.emp_id mes_sender,e2.emp_id
mes_reciver,e1.emp_name sender_name,e2.emp_name reciver_name,
e1.emp_email sender_email, e2.emp_email reciver_email
FROM message m
LEFT OUTER JOIN employee as e1
ON m.`mes_sender` = e1.`emp_id`
LEFT
OUTER JOIN employee as e2
ON m.`mes_reciver` = e2.`emp_id`
order by
mes_send_date desc
LIMIT
#{start}, #{pageSize}
</select>
<!-- 整合的模糊查询 -->
<select id="queryByCondition" parameterType="com.icss.oa.message.pojo.Message"
resultMap="BaseResultMap">
SELECT m.*,e1.emp_id mes_sender,e2.emp_id mes_reciver,e1.emp_name
sender_name,e2.emp_name reciver_name,
e1.emp_email sender_email,
e2.emp_email reciver_email
FROM message m
LEFT OUTER JOIN employee as e1
ON m.`mes_sender` = e1.`emp_id`
LEFT OUTER JOIN employee as e2
ON
m.`mes_reciver` = e2.`emp_id`
<where>
<if test="mesTitle != null and mesTitle != '' ">
and mes_title like
concat('%',#{mesTitle,jdbcType=VARCHAR},'%')
</if>
<if test="empEmail != null and empEmail != '' ">
and e2.`emp_email` like
concat('%',#{empEmail,jdbcType=VARCHAR},'%')
</if>
<if test="mesSendDate != null and mesSendDate != '' ">
and mes_send_date like concat('%', #{mesSendDate}, '%')
</if>
<if test="mesReciver != null and mesReciver != '' ">
and mes_reciver = #{mesReciver}
</if>
<if test="mesInfo != null and mesInfo != '' ">
and mes_info like
concat('%',#{mesInfo,jdbcType=VARCHAR},'%')
</if>
</where>
order by mes_send_date desc
LIMIT #{start}, #{pageSize}
</select>
<!-- 整合的模糊查询 没有收件人 -->
<select id="queryByCondition1" parameterType="com.icss.oa.message.pojo.Message"
resultMap="BaseResultMap">
SELECT m.*,e1.emp_id mes_sender,e2.emp_id mes_reciver,e1.emp_name
sender_name,e2.emp_name reciver_name,
e1.emp_email sender_email,
e2.emp_email reciver_email
FROM message m
LEFT OUTER JOIN employee as e1
ON m.`mes_sender` = e1.`emp_id`
LEFT OUTER JOIN employee as e2
ON
m.`mes_reciver` = e2.`emp_id`
<where>
<if test="mesTitle != null and mesTitle != '' ">
and mes_title like
concat('%',#{mesTitle,jdbcType=VARCHAR},'%')
</if>
<if test="empEmail != null and empEmail != '' ">
and e2.`emp_email` like
concat('%',#{empEmail,jdbcType=VARCHAR},'%')
</if>
<if test="mesSendDate != null and mesSendDate != '' ">
and mes_send_date like concat('%', #{mesSendDate}, '%')
</if>
</where>
order by mes_send_date desc
LIMIT #{start}, #{pageSize}
</select>
<!-- 查询总记录数 -->
<select id="getCount" resultType="java.lang.Integer">
select count(*)
from message
</select>
<!-- 根据条件查询记录数 -->
<select id="getCountByCondition" resultType="java.lang.Integer">
select count(*)
from message m
LEFT OUTER JOIN employee as e1
ON
m.`mes_sender` = e1.`emp_id`
LEFT OUTER JOIN employee as e2
ON
m.`mes_reciver` = e2.`emp_id`
<where>
<if test="mesTitle != null and mesTitle != '' ">
and mes_title like
concat('%',#{mesTitle,jdbcType=VARCHAR},'%')
</if>
<if test="empEmail != null and empEmail != '' ">
and e2.`emp_email` like
concat('%',#{empEmail,jdbcType=VARCHAR},'%')
</if>
<if test="mesSendDate != null and mesSendDate != '' ">
and mes_send_date like concat('%', #{mesSendDate}, '%')
</if>
<if test="mesReciver != null and mesReciver != '' ">
and mes_reciver=#{mesReciver}
</if>
<if test="mesInfo != null and mesInfo != '' ">
and mes_info like
concat('%',#{mesInfo,jdbcType=VARCHAR},'%')
</if>
</where>
order by mes_send_date desc
</select>
<!-- 获得最后一次添加的信息的id -->
<select id="getLastInsertId" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</select>
<!-- 根据登录名查询在线信息 -->
<select id="queryByLoginName" parameterType="com.icss.oa.message.pojo.Message"
resultMap="BaseResultMap">
SELECT m.*,e1.emp_id mes_sender,e2.emp_id
mes_reciver,e1.emp_name
sender_name,e2.emp_name reciver_name,
e1.emp_email sender_email,
e2.emp_email reciver_email,
e1.emp_login_name sender_login_name,
e2.emp_login_name
reciver_login_name
FROM message m
LEFT OUTER JOIN
employee as e1 ON
m.`mes_sender` = e1.`emp_id`
LEFT OUTER JOIN employee
as e2 ON
m.`mes_reciver` = e2.`emp_id`
<!-- where e1.emp_login_name=#{empLoginName} OR e2.emp_login_name=#{empLoginName} -->
<where>
(e1.emp_login_name=#{empLoginName}
OR
e2.emp_login_name=#{empLoginName})
<if test="mesTitle != null and mesTitle != '' ">
and mes_title like
concat('%',#{mesTitle,jdbcType=VARCHAR},'%')
</if>
<if test="empEmail != null and empEmail != '' ">
and e2.`emp_email` like
concat('%',#{empEmail,jdbcType=VARCHAR},'%')
</if>
<if test="mesSendDate != null and mesSendDate != '' ">
and mes_send_date like concat('%', #{mesSendDate}, '%')
</if>
<if test="mesReciver != null and mesReciver != '' ">
and mes_reciver = #{mesReciver}
</if>
<if test="mesInfo != null and mesInfo != '' ">
and mes_info like
concat('%',#{mesInfo,jdbcType=VARCHAR},'%')
</if>
</where>
order by mes_send_date desc
LIMIT #{start}, #{pageSize}
</select>
<!-- 根据登录名查询相应的记录数 -->
<select id="getCountByEmpLoginName" resultType="java.lang.Integer">
select count(*)
from message m
LEFT OUTER JOIN employee as e1
ON
m.`mes_sender` =
e1.`emp_id`
LEFT OUTER JOIN employee as e2
ON
m.`mes_reciver` =
e2.`emp_id`
<where>
(e1.emp_login_name=#{empLoginName}
OR
e2.emp_login_name=#{empLoginName})
<if test="mesTitle != null and mesTitle != '' ">
and mes_title like
concat('%',#{mesTitle,jdbcType=VARCHAR},'%')
</if>
<if test="empEmail != null and empEmail != '' ">
and e2.`emp_email` like
concat('%',#{empEmail,jdbcType=VARCHAR},'%')
</if>
<if test="mesSendDate != null and mesSendDate != '' ">
and mes_send_date like concat('%', #{mesSendDate}, '%')
</if>
<if test="mesReciver != null and mesReciver != '' ">
and mes_reciver = #{mesReciver}
</if>
<if test="mesInfo != null and mesInfo != '' ">
and mes_info like
concat('%',#{mesInfo,jdbcType=VARCHAR},'%')
</if>
</where>
</select>
<!-- 草稿箱以及发件箱的查询 -->
<select id="queryDraft" parameterType="java.lang.String"
resultMap="BaseResultMap">
SELECT m.*,e1.emp_id mes_sender,e2.emp_id
mes_reciver,e1.emp_name
sender_name,e2.emp_name reciver_name,
e1.emp_email sender_email,
e2.emp_email reciver_email,
e1.emp_login_name sender_login_name,
e2.emp_login_name
reciver_login_name
FROM message m
LEFT OUTER JOIN employee as e1 ON
m.`mes_sender` = e1.`emp_id`
LEFT OUTER JOIN employee as e2 ON
m.`mes_reciver` = e2.`emp_id`
WHERE
mes_send_confirm=#{mesSendConfirm}
and
e1.emp_login_name=#{empLoginName}
order by mes_send_date desc
LIMIT
#{start}, #{pageSize}
</select>
<!-- 查询草稿箱以及发件箱的个数 -->
<select id="getCountDraft" resultType="java.lang.Integer">
SELECT count(*)
FROM
message m
LEFT OUTER JOIN employee as e1 ON m.`mes_sender` =
e1.`emp_id`
LEFT OUTER JOIN employee as e2 ON m.`mes_reciver` =
e2.`emp_id`
WHERE
mes_send_confirm=#{mesSendConfirm}
and
e1.emp_login_name=#{empLoginName}
</select>
<!-- 收件箱的查询 -->
<select id="queryInbox" parameterType="java.lang.String"
resultMap="BaseResultMap">
SELECT m.*,e1.emp_id mes_sender,e2.emp_id
mes_reciver,e1.emp_name
sender_name,e2.emp_name reciver_name,
e1.emp_email sender_email,
e2.emp_email reciver_email,
e1.emp_login_name sender_login_name,
e2.emp_login_name
reciver_login_name
FROM message m
LEFT OUTER JOIN employee as e1 ON
m.`mes_sender` = e1.`emp_id`
LEFT OUTER JOIN employee as e2 ON
m.`mes_reciver` = e2.`emp_id`
WHERE
e2.emp_login_name=#{empLoginName}
order by mes_send_date desc
LIMIT #{start}, #{pageSize}
</select>
<!-- 查询收件箱的个数 -->
<select id="getCountInbox" resultType="java.lang.Integer">
SELECT count(*)
FROM
message m
LEFT OUTER JOIN employee as e1 ON m.`mes_sender` =
e1.`emp_id`
LEFT OUTER JOIN employee as e2 ON m.`mes_reciver` =
e2.`emp_id`
WHERE
e2.emp_login_name=#{empLoginName}
</select>
<!-- 未读消息的查询 -->
<select id="queryUnread" parameterType="java.lang.String"
resultMap="BaseResultMap">
SELECT m.*,e1.emp_id mes_sender,e2.emp_id
mes_reciver,e1.emp_name
sender_name,e2.emp_name reciver_name,
e1.emp_email sender_email,
e2.emp_email reciver_email,
e1.emp_login_name sender_login_name,
e2.emp_login_name
reciver_login_name
FROM message m
LEFT OUTER JOIN employee as e1 ON
m.`mes_sender` = e1.`emp_id`
LEFT OUTER JOIN employee as e2 ON
m.`mes_reciver` = e2.`emp_id`
WHERE
e2.emp_login_name=#{empLoginName}
AND mes_send_confirm=#{mesSendConfirm}
AND
mes_read_confirm=#{mesReadConfirm}
order by mes_send_date desc
LIMIT
#{start}, #{pageSize}
</select>
<!-- 查询未读消息的个数 -->
<select id="getCountUnread" resultType="java.lang.Integer">
SELECT count(*)
FROM
message m
LEFT OUTER JOIN employee as e1 ON m.`mes_sender` =
e1.`emp_id`
LEFT OUTER JOIN employee as e2 ON m.`mes_reciver` =
e2.`emp_id`
WHERE
e2.emp_login_name=#{empLoginName}
AND
mes_send_confirm=#{mesSendConfirm}
AND
mes_read_confirm=#{mesReadConfirm}
</select>
</mapper>
全文索引
package com.icss.oa.message.index;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import com.icss.oa.message.pojo.Message;
@Repository
public class MessageIndexDao {
// 在线信息索引目录,使用资源文件的键值对
@Value("#{prop.mes_index_path}")
private String mesIndexPath;
// 中文分词器
public Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_47);
/**
* 增加索引
*
* @throws IOException
*/
public void create(Document document) throws IOException {
// 设置索引的分词器
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_47, analyzer);
// 索引目录对象
Directory directory = FSDirectory.open(new File(mesIndexPath));
// 索引写入对象
IndexWriter indexWriter = new IndexWriter(directory, config);
// 增加索引
indexWriter.addDocument(document);
// 提交
indexWriter.commit();
// 关闭
indexWriter.close();
}
/**
* 更新索引
*
* @throws IOException
*/
public void update(Term term, Document document) throws IOException {
// 设置索引的分词器
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_47, analyzer);
// 索引目录对象
Directory directory = FSDirectory.open(new File(mesIndexPath));
// 索引写入对象
IndexWriter indexWriter = new IndexWriter(directory, config);
// 修改索引
indexWriter.updateDocument(term, document);
// 提交
indexWriter.commit();
// 关闭
indexWriter.close();
}
/**
* 删除索引
*
* @throws IOException
*/
public void delete(Term term) throws IOException {
// 设置索引的分词器
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_47, analyzer);
// 索引目录对象
Directory directory = FSDirectory.open(new File(mesIndexPath));
// 索引写入对象
IndexWriter indexWriter = new IndexWriter(directory, config);
// 删除索引
indexWriter.deleteDocuments(term);
// 提交
indexWriter.commit();
// 关闭
indexWriter.close();
}
/**
* 全文检索
*
* @throws IOException
* @throws InvalidTokenOffsetsException
*/
public List<Message> search(Query query) throws IOException, InvalidTokenOffsetsException{
// 设置索引的分词器
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_47, analyzer);
// 索引目录对象
Directory directory = FSDirectory.open(new File(mesIndexPath));
// 搜索对象
IndexReader indexReader = DirectoryReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
// 过滤对象(附加的删选条件,效率比较低,因为需要二次遍历数据)
Filter filter = null;
// 排序对象(默认按照相关度排序,就是匹配的越多越靠前,类似于百度)
Sort sort = new Sort();
// 得到满足条件的前100行记录
TopDocs topDocs = indexSearcher.search(query, 100, sort);
// 总记录数
int recordCount = topDocs.totalHits;
// 文档集合
ArrayList<Message> mesList = new ArrayList<>();
// ============高亮和截取某个字段的文本摘要设置=============
// 设置环绕的首尾字符串
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<font color=red>", "</font>");
// 语法高亮显示设置
Highlighter highlighter = new Highlighter(formatter, new QueryScorer(query));
// 100是是表示摘要的字数
highlighter.setTextFragmenter(new SimpleFragmenter(100));
// ===================================================
// 遍历文档
for (int i = 0; i < recordCount; i++) {
// 获得原始文档
ScoreDoc scoreDoc = topDocs.scoreDocs[i];
// 获得文档内部编号
int docSn = scoreDoc.doc;
// 获得Document文档
Document document = indexSearcher.doc(docSn);
// 获得员工编号
Integer mesId = Integer.parseInt(document.get("mesId"));
// 获得员工姓名
String mesTitle = document.get("mesTitle");
// 获得员工电话
String mesInfo = document.get("mesInfo");
// 把员工自我介绍进行截取摘要以及添加高亮
TokenStream tream = analyzer.tokenStream("mesInfo", new StringReader(mesInfo));
String mesInfoFragment = highlighter.getBestFragment(tream, mesInfo);
// 把姓名增加高亮
tream = analyzer.tokenStream("mesTitle", new StringReader(mesTitle));
String mesTitleFragment = highlighter.getBestFragment(tream, mesTitle);
// 如果内容没有包含搜索关键字或原始内容不足100字
if (mesInfoFragment == null) {
int minLen = mesInfo.length() >= 100 ? 100 : mesInfo.length();
mesInfoFragment = mesInfo.substring(0, minLen);
}
if (mesTitleFragment == null) {
int minLen = mesTitle.length() >= 100 ? 100 : mesTitle.length();
mesTitleFragment = mesTitle.substring(0, minLen);
}
// 封装到Employee对象
Message mes = new Message();
mes.setMesId(mesId);
mes.setMesTitle(mesTitleFragment);
mes.setMesInfo(mesInfoFragment);
// 放到集合中
mesList.add(mes);
}
return mesList;
}
}
总结
gitee链接:https://gitee.com/bao-hailu/oa.git