jpa 动态查询条件,jpa自定义查询语句
写爬虫互联网协议(互联网协议)被封了怎么解决?立即使用
JPA动态查询语句 (代码详解)
我们现在在做一个涉及(同在或大约在)系统,将新增的那些数据都写到数据库的时候是采用作业的装配区(JobPackArea)规范的,(不太理解作业的装配区(JobPackArea)的相关知识点,今天看下相关知识,然后再补充作业的装配区(JobPackArea)的知识点),现在记录作业的装配区(JobPackArea)中的动态查询语句,其实这些语句都是可以用结构化查询语言语句写的,但是结构化查询语言语句写得查询,删除,插入数据等操作不安全,所以采用作业的装配区(JobPackArea)的语句。我们的项目是分为三层结构,第一层是实体层,在该层中专门定义某一实体的相关字段,它的set(),get()方法。第二层是服务层,将服务和大刀都放在一个组件中,在大刀层中定义和数据库相关的操作方法,在服务层中定义相关的业务逻辑层要调用的方法。第三层是安静的层,在这层定义的是和前端交互的组件。
首先讲讲第一层:实体层
定义一个实体
/**
* 邮件实体
*
*/
@实体
@Table(name=mail_tbl )
公共类内部邮件实现可序列化{
private static final long serialVersionUID=4999674279957375152 l;
@Id
@GeneratedValue
私有长id;
私有字符串主题;//主题
私有字符串到邮件;//收件人格式:姓名使用者辩证码姓名使用者辩证码
私串急;//紧急程度
@Column(name=sendDate )
@Temporal(TemporalType .时间戳)
私人日期发送日期;//发布日期
私有字符串内容;//邮件内容
//原文附件
@ onet omany(cascade={ cascade type .合并,级联型.删除})
@JoinColumn(name=mail_id )
@OrderBy(value=id DESC)//注释指明加载附件时按编号的降序排序
private SetAppendFile append files=new HashSetAppendFile();//附件
私有字符串邮件用户//邮件拥有者格式:用户身份
私有字符串sendMail//邮件发送者格式:姓名使用者辩证码
私有int类型;//状态标示:-1删除;0草稿;一发送;2未读收件,3已读收件
公共long getId() {
返回id;
}
公共空的集合id(长id) {
this.id=id
}
公共字符串getSubject() {
返回主题;
}
公共空集合主题(字符串主题){
主题=主题
}
公共字符串getToMails() {
返回邮件;
}
public void setto邮件(字符串到邮件){
这个。致邮件=致邮件;
}
公共字符串getUrgency() {
退货紧急程度;
}
public void set urgency(字符串urgency){
this.urgency=紧迫性;
}
公共日期getSendDate() {
返回发送日期;
}
公共void setSendDate(日期发送日期){
this.sendDate=sendDate
}
公共字符串getContent() {
返回内容;
}
公共void setContent(字符串内容){
this.content=内容;
}
公共字符串getMailUser() {
返回邮件用户;
}
public void setMailUser(String mailUser){
这个。邮件用户=邮件用户;
}
public SetAppendFile getAppendFiles(){
返回附录文件
}
public void setAppendFiles(SetAppendFile appendFiles){
这个。追加文件=追加文件;
}
公共字符串getSendMail() {
返回发送邮件
}
public void set sendMail(String sendMail){
this.sendMail=sendMail
}
public int getType() {
返回类型;
}
公共void setType(int类型){
this.type=type
}
}定义查询实体:
包com。gzydt。OA。公地;
导入Java。util。ArrayList
导入Java。util。hashmap
导入Java。util。列表;
导入Java。util。地图;
/**
* 分页查询参数
*
* @作者黄真伟
* @自2014-11-21
*
*/
公共类QueryParam {
//排序字段,以" "、"-"符号连接排序字段名:"钥匙"表示按"钥匙"字段升序,"-key "表示按"钥匙"字段降序。
private ListString sorts=new ArrayList string();
//起始记录下标,从0开始计算
private int first=0;
//每页最大记录数
private int max=10
//是否分页标志
私人的布尔值isPage=true
//查询参数
private MapString,String param=new HashMapString,String();
公共查询参数(){
}
public int getFirst() {
先退;
}
public void setFirst(int first) {
this.first=首先
}
public int getMax() {
返回最大
}
public void setMax(int max) {
this.max=max
}
公共MapString,String getParam() {
返回参数;
}
public void setParam(MapString,String param) {
this.param=param
}
公共布尔isPage() {
返回系统间寻呼
}
公共空的设置页面(布尔I页){
这个。is page=is page
}
公共列表字符串getSorts() {
返回排序;
}
公共空集合排序(列表字符串排序){
排序=排序
}
}第二层:服务层dao层:定义和数据库相关操作的方法
包com。gzydt。OA。道;
导入Java。util。列表;
导入com。gzydt。OA。公地。查询参数;
导入com。gzydt。OA。实体。追加文件;
导入com。gzydt。OA。实体。内部邮件;
/**
* 邮件发送大刀接口
*
*/
公共接口InnerMailDao {
/**
* 保存邮件
* @param mail
* @返回
*/
公共内部邮件保存(内部邮件邮件);
/**
* 更新邮件
* @param mail
* @返回
*/
公共内部邮件更新(内部邮件邮件);
/**
* 删除邮件
* @param id
*/
公共void删除(长id);
/**
* 查询邮件
* @param queryParam
* @返回
*/
public listinnermail getlist(query param query param);
/**
* 获取单个邮件
* @param id
* @返回
*/
公共内部邮件获得(长id);
/**
* 获取满足条件的邮件的总数
* @param queryParam
* @返回
*/
public int get count(query param query param);
/**
* 新增附件
* @param id
* @param appendFile
*/
public void addAttach(long id,AppendFile AppendFile);
}包com。gzydt。OA。道。impl
导入Java。文字。日期格式;
导入Java。文字。简单的日期格式;
导入Java。util。ArrayList
导入Java。util。日期;
导入Java。util。hashset
导入Java。util。迭代器;
导入Java。util。列表;
导入Java。util。地图;
导入Java。util。设置;
导入javax。坚持。entitymanager
导入javax。坚持。类型化查询;
导入javax。坚持。标准。标准生成器;
导入javax。坚持。标准。条件查询;
导入javax。坚持。标准。谓词;
导入javax。坚持。标准。根;
导入com。gzydt。OA。公地。查询参数;
导入com。gzydt。OA。道。innermaildao
导入com。gzydt。OA。实体。追加文件;
导入com。gzydt。OA。实体。内部邮件;
/**
* 邮件实现类
*/
公共类InnerMailDaoImpl实现InnerMailDao{
私有实体管理器实体管理器;
public void setEntityManager(EntityManager EntityManager){
这个。entityManager=entityManager
}
/**
* 保存邮件
* @param mail
* @返回
*/
@覆盖
公共内部邮件保存(内部邮件邮件){
尝试{
entitymanager。持久(邮件);
entitymanager。flush();
回邮;
} catch(异常e ) {
e。printstacktrace();
返回空
}
}
/**
* 更新邮件
* @param mail
* @返回
*/
@覆盖
公共内部邮件更新(内部邮件邮件){
尝试{
entityManager.merge(邮件);
回邮;
} catch(异常e ) {
e。printstacktrace();
返回空
}
}
/**
* 删除邮件
* @param id
*/
@覆盖
公共空的删除(长id) {
entitymanager。创建查询(从电话记录e中删除,其中e . id=:id ).setParameter(id ,id).执行update();
}
/**
* 查询邮件
* @param queryParam
* @返回
*/
@覆盖
public listinnermail getlist(query param query param){
标准生成器CB=entitymanager。get criteria builder();
CriteriaQueryInnerMails条件查询=CB。创建查询(内部邮件。类);
RootInnerMails register=条件查询。来自(内部邮件。类);
//过滤条件
谓词[]谓词=createPredicate(queryParam,cb,register);
criteriaQuery.where(谓词);
int start=查询参数。get first();
int end=查询参数。get max();
TypedQueryInnerMails类型化查询=entitymanager。创建查询(条件查询);
类型化查询。设置第一个结果(开始).setMaxResults(end);
返回类型化查询。获取结果列表();
}
//设置查询条件
private Predicate[]create Predicate(query param query param,CriteriaBuilder cb,RootInnerMails entity) {
列表谓词谓词=new ArrayList谓词();
//取出查询条件
MapString,String param=query param。get param();
对于(图. Entry entry:param.entrySet()){
String key=entry.getKey().toString();
String value=entry.getValue().toString();
如果(关键。等于(发送日期){
谓词条件Time=createOperateTime(key,cb,value,entity);
if(null!=conditionTime){
谓词。添加(条件时间);
}
}否则{
谓词。添加(cb.like(实体String get(key), % value %);
}
}
return谓词. toArray(新谓词[0]);
}
/**
* 将时间作为查询条件的方法
* @param cb
* @param值
* @param实体
*/
私有谓词createOperateTime(字符串关键字,标准生成器cb,字符串值,RootInnerMails实体){
if(null==value){
返回空
}
string[]操作时间=值。拆分( ~ );
if(operateTime.length!=2){
返回空
}
尝试{
日期格式df=新的简单日期格式( yyyy-MM-DD HH:MM:ss );//格式一定要写正确,
日期t1=df。parse(操作时间[0] 00:00:00 );
日期T2=df。parse(操作时间[1] 23:59:59 );
返回介于(实体Date get(key),t1,T2);
} catch(异常e ) {
e。printstacktrace();
}
返回空
}
/**
* 获取单个邮件
* @param id
* @返回
*/
@覆盖
公共内部邮件获取(长id) {
内部邮件内部邮件=entitymanager。查找(内部邮件。类,id);
迭代器appendfile迭代器=inners邮件。getappendfiles().迭代器();
SetAppendFile attachs=new HashSetAppendFile();
while(iterator.hasNext()){
AppendFile追加文件=新追加文件();
追加文件=迭代器。next();
随员。add(追加文件);
}
innersMails.setAppendFiles(附件);
返回内部邮件;
}
/**
* 获取满足条件的邮件的总数
* @param queryParam
* @返回
*/
@覆盖
public int get count(query param query param){
标准生成器CB=entitymanager。get criteria builder();
CriteriaQueryLong条件查询=CB。创建查询(长整型。类);
rootinnermail邮件s=条件查询。from(内部邮件s . class);
标准查询。选择(CB。非重复计数(邮件));
//过滤条件
谓词[]谓词=创建谓词(查询参数,cb,邮件
criteriaQuery.where(预定义);
TypedQueryLong类型化查询=entitymanager。创建查询(条件查询);
int count=0;
尝试{
count=类型化查询。getsingleresult().int value();
} catch(异常e ) {
e。printstacktrace();
}
返回计数;
}
/**
* 新增附件
* @param id
* @param appendFile
*/
@覆盖
public void addAttach(long id,AppendFile appendFile) {
内部邮件实体=这个。get(id);
entity.getAppendFiles().add(追加文件);
entityManager.merge(实体);
}
}动态查询语句的相关知识
1:查询User表中的字段adminlever的小于给定值的数据
第一种写法:(安全,推荐使用这种)
/**
* 查询某一级别以上的用户
*/
@覆盖
公共列表用户getonleveuper(内部控制杆){
标准生成器CB=entitymanager。get criteria builder();
CriteriaQueryUser criterQuery=CB。创建查询(用户。类);
根用户实体=标准查询。来自(用户。类);
PathInteger adminLever=entity .整数get(管理杠杆);
暴击查询。其中(CB。小于(管理杠杆,杠杆));
TypedQueryUser类型化查询=entitymanager。创建查询(criter query);
返回类型化查询。获取结果列表();
}第二种写法:(不太安全,)
/**
* 查询某一级别以上的用户
*/
@覆盖
公共列表用户getonleveuper(内部控制杆){
ListUser users=entitymanager。创建查询(“来自用户u,其中u .管理级别:管理级别”)。setParameter(管理杠杆),杠杆)。获取结果列表();
回报用户;
}第二种删除数据(有时候会由于某实体和另一实体设置了一对一或者多对一,或者多对多的关系而导致不能正常删除数据),解决方法:
/**
* 删除登记信息
*
* @param id
*登记编号
*/
@覆盖
公共无效句柄删除(长id)引发异常{
收货实体entity=entitymanager。查找(收据实体。类,id);
entityManager.remove(实体);
//下面的的方法删除应为存在外键关联会删除失败
/* entitymanager。创建查询(“从接收实体e中删除,其中e . id=:id”).
setParameter(id ,id).执行update();*/
}service层:接口
包com。gzydt。OA。服务;
导入Java。util。列表;
导入com。gzydt。OA。公地。查询参数;
导入com。gzydt。OA。实体。追加文件;
导入com。gzydt。OA。实体。内部邮件;
/**
* 内部邮件接口
*
*/
公共接口InnerMailService {
/**
* 保存邮件
* @param mail
* @返回
*/
公共内部邮件保存(内部邮件邮件);
/**
* 更新邮件
* @param mail
* @返回
*/
公共内部邮件更新(内部邮件邮件);
/**
* 删除邮件
* @param id
*/
公共void删除(长id);
/**
* 查询邮件
* @param queryParam
* @返回
*/
public listinnermail getlist(query param query param);
/**
* 获取单个邮件
* @param id
* @返回
*/
公共内部邮件获得(长id);
/**
* 获取满足条件的邮件的总数
* @param queryParam
* @返回
*/
public int get count(query param query param);
/**
* 发邮件
* @param内容
*//*
公共void sendMail(字符串内容);*/
/**
* 新增附件
* @param id
* @param appendFile
*/
public void addAttach(long id,AppendFile AppendFile);
}service层:实现类
包com。gzydt。OA。服务。impl
导入Java。util。列表;
导入com。gzydt。OA。公地。查询参数;
导入com。gzydt。OA。道。innermaildao
导入com。gzydt。OA。实体。追加文件;
导入com。gzydt。OA。实体。内部邮件;
导入com。gzydt。OA。服务。innermailservice
/**
* 内部邮件服务类
*
*/
公共类InnerMailServiceImpl实现InnerMailService{
私有内部邮件道
public void setMailDao(InnerMailDao mailDao){
this.mailDao=mailDao
}
/**
* 保存邮件
* @param mail
* @返回
*/
@覆盖
公共内部邮件保存(内部邮件邮件){
返回maildao。保存(邮件);
}
@覆盖
公共内部邮件更新(内部邮件邮件){
返回maildao。更新(邮件);
}
/**
* 删除邮件
* @param id
*/
@覆盖
公共空的删除(长id) {
maildao。删除(id);
}
/**
* 查询邮件
* @param queryParam
* @返回
*/
@覆盖
public listinnermail getlist(query param query param){
返回maildao。getlist(查询参数);
}
/**
* 获取单个邮件
* @param id
* @返回
*/
@覆盖
公共内部邮件获取(长id) {
返回maildao。get(id);
}
/**
* 获取满足条件的邮件的总数
* @param queryParam
* @返回
*/
@覆盖
public int get count(query param query param){
返回maildao。获取计数(查询参数);
}
/* @覆盖
公共作废sendMail(字符串内容){
}*/
/**
* 新增附件
* @param id
* @param appendFile
*/
@覆盖
public void addAttach(long id,AppendFile appendFile) {
mailDao.addAttach(id,追加文件);
}
}在服务层中定义相关的服务配置
?可扩展标记语言版本=1.0 编码=UTF八号?
蓝图默认激活=急切
xmlns= http://www。OSGi。org/xmlns/blue print/v 1。0 .0 xmlns:xsi= http://www。w3。 org/2001/XML架构-实例
xmlns:JPA= http://白羊座。阿帕奇。org/xmlns/JPA/v 1。0 .0 xmlns:tx= http://白羊座。阿帕奇。org/xmlns/transactions/v 1。0 .0
xsi:schemaLocation=
http://www.osgi.org/xmlns/blueprint/v1.0.0http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://cxf.apache.org/blueprint/jaxrshttp://cxf.apache.org/schemas/blueprint/jaxrs.xsd
http://cxf.apache.org/blueprint/corehttp://cxf.apache.org/schemas/blueprint/core.xsd
!-这将获取容器管理的实体管理器并将其注入到
ServiceImpl bean .-
!-道-
bean id= mailDao class= com。gzydt。OA。道。impl。 innermaildaoimpl
JPA:上下文单元名= com。gzydt。JPA。“坚持”
property=entityManager /
tx:事务方法=* 值=必需/
/bean
!-新增结束-
!比恩
bean id= mail service class= com。gzydt。OA。服务。impl。innermailserviceimpl
属性名称=mailDao ref=mailDao /
/bean
!-新增结束-
!服务
service ref= mail service interface= com。gzydt。OA。服务。innermailservice /
!-这个包使用卡拉夫命令来演示核心持久性
运营。请随意移除它。-
命令包xmlns= http://卡拉夫。阿帕奇。org/xmlns/shell/v 1。1 .0
命令名=消息/添加
action class= com。gzydt。OA。命令。添加消息
属性名称= messageService ref= messageService /
/操作
/命令
命令名=消息/列表
action class= com。gzydt。OA。命令。获取消息
属性名称= messageService ref= messageService /
/操作
/命令
命令名=msg/delete
action class= com。gzydt。OA。命令。删除邮件
属性名称= messageService ref= messageService /
/操作
/命令
命令名=部门/添加
action class= com。gzydt。OA。命令。“deptaddcommand”
属性名称=部门服务 ref=部门服务/
/操作
/命令
命令名=部门/列表
action class= com。gzydt。OA。命令。 deptgetcommand
属性名称=部门服务 ref=部门服务/
/操作
/命令
命令名=部门/删除
action class= com。gzydt。OA。命令。 deptdeletecommand
属性名称=部门服务 ref=部门服务/
/操作
/命令
/命令包
/蓝图第三层:restful层
包com。gzydt。OA。资源;
导入Java。文字。解析异常;
导入Java。util。列表;
导入javax。ws。RS。消耗;
导入javax。ws。RS。删除;
导入javax。ws。RS。get
导入javax。ws。RS。标题参数;
导入javax。ws。RS。岗位;
导入javax。ws。RS。放;
导入javax。ws。RS。路径;
导入javax。ws。RS。路径参数;
导入javax。ws。RS。生产;
导入javax。ws。RS。查询参数;
导入javax。ws。RS。核心。媒体类型;
导入javax。ws。RS。核心。回应;
导入org。阿帕奇。cxf。jaxrs。延伸文件系统多部分。附件;
导入组织。阿帕奇。cxf。jaxrs。延伸文件系统多部分。多部分;
/**
* 内部邮件的安静的
*/
@ Path(/mail )
公共接口InnerMailsResource {
/**
* 新增邮件
* @param内容
* @返回
*/
@帖子
@Path(/)
@Consumes(multipart/form-data )
公共响应保存(@Multipart(content )字符串内容,
列表附件附件)引发赶上
/**
* 更新邮件
* @param id
* @param内容
* @返回
*/
@放
@Path(/{id} )
@Consumes(multipart/form-data )
公共响应更新(@PathParam(id )长id,@Multipart(content )字符串内容,
列表附件附件)引发赶上
/**
* 查询邮件
* @param id
* @返回
*/
@GET
@Path(/{id} )
公共响应get(@ path param( id )long id);
/**
* 查询邮件列表
* @param范围
* @param查询
* @返回
*/
@GET
@Path(/list )
公共响应getList(@HeaderParam(range )字符串范围,@QueryParam(查询)字符串查询);
/**
* 删除邮件
* @param id
* @返回
*/
@删除
@Path(/{id} )
公共响应删除(@PathParam(id )长id);
/**
* 发送邮件
* @param内容
* @返回数据格式:{data:{}, toMail:}
*/
@帖子
@ Path(/sendmail/{ id } )
公共响应sendMail(@ path param( id )long id);
/**
* 下载附件
* @param id(附件的id)
* @返回
*/
@GET
@Path(/getAttach/{id} )
@Produces(MediaType .应用八位字节流)
公共响应下载attach(@ path param( id )long id);
}实现类:
包com。gzydt。OA。资源。impl
导入Java。io。文件;
导入Java。io。文件输入流;
导入Java。io。文件输出流;
导入Java。io。io异常;
导入Java。io。inputstream
导入Java。io。输出流;
导入Java。文字。解析异常;
导入Java。文字。简单的日期格式;
导入Java。util。日期;
导入Java。util。hashset
导入Java。util。列表;
进口
java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.activation.DataHandler;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.StreamingOutput;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
/*import org.json.JSONArray;*/
import com.gzydt.oa.commons.QueryParam;
import com.gzydt.oa.entity.AppendFile;
import com.gzydt.oa.entity.InnerMails;
import com.gzydt.oa.resource.InnerMailsResource;
import com.gzydt.oa.service.AppendFileService;
import com.gzydt.oa.service.InnerMailService;
import com.gzydt.oa.util.Constant;
import com.gzydt.oa.util.QueryUtil;
public class InnerMailsResourceImpl implements InnerMailsResource {
private InnerMailService emailService;
public void setEmailService(InnerMailService emailService) {
this.emailService = emailService;
}
private AppendFileService appendFileService;
public void setAppendFileService(AppendFileService appendFileService) {
this.appendFileService = appendFileService;
}
private static final String PATH = "data/oa/upload/mails";
@Override
public Response save(String content, List<Attachment> attachments) throws ParseException {
//去掉懒加载字段
JsonConfig jsonConfig = Constant.jsonDateConfig;
jsonConfig.setExcludes(new String[] { "appendFiles"});
JSONObject preceInfo = JSONObject.fromObject(content);
JSONObject backInfo = new JSONObject();
InnerMails entity = new InnerMails();
Date sendDate = null;
if ( preceInfo.optString("sendDate") != null && preceInfo.optString("sendDate") != "" ) {
//这里的MM必须是要大写,若是写为mm,则是分钟,,格式一定要按照正规的来写<span class="con">yyyy-MM-dd HH:mm:ss</span>,
//该大写就大写,小写就小写,并且中间有空格等,都不能错误。不然时间会出错
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
sendDate = df.parse(preceInfo.optString("sendDate"));
}
preceInfo.put("sendDate", sendDate);
entity = (InnerMails) JSONObject.toBean(preceInfo, InnerMails.class);
if ( !preceInfo.has("type") ) {
entity.setType(0);
}
entity = emailService.save(entity);
// 新增附件到附件表中
Set<AppendFile> appfiles=addAttach(attachments, entity);
entity.setAppendFiles(appfiles);
entity=emailService.update(entity);
if ( null != entity ) {
backInfo = JSONObject.fromObject(entity);
return Response.ok(backInfo.toString(), MediaType.APPLICATION_JSON).build();
}
backInfo.put("message", "保存失败");
return Response.ok(backInfo.toString(), MediaType.APPLICATION_JSON).build();
}
// 保存并关联附件
private Set<AppendFile> addAttach(List<Attachment> attachments,InnerMails entity){
Set<AppendFile> appenFiles=new HashSet<AppendFile>();
for (Attachment attachment : attachments) {
if (attachment.getContentType().toString().startsWith("application/octet-stream")) {
DataHandler dh = attachment.getDataHandler();
long time = new Date().getTime();
String fileName = null;
try {
fileName = new String(dh.getName().getBytes("ISO-8859-1"), "UTF-8");
writeFile(dh, fileName);
} catch (Exception e) {
e.printStackTrace();
}
AppendFile file = new AppendFile();
file.setSerialNumber(time);// 唯一标识
file.setFileName(fileName);// 文件名
file.setExtension(fileName.substring(fileName.lastIndexOf(".") + 1));// 文件后缀
file.setType("email");// 文件类型
emailService.addAttach(entity.getId(), file);
AppendFile result = null;
result = appendFileService.getByNumber(time);
appenFiles.add(result);
}
}
return appenFiles;
}
// 写文件
private void writeFile(DataHandler dh, String fileName) throws IOException {
InputStream is = dh.getInputStream();
File file = new File(PATH);
if ( !file.exists() ) {
file.mkdirs();
}
// LOG.info("附件目录:" + file.getAbsolutePath());
writeToFile(is, PATH + fileName);
}
private void writeToFile(InputStream is, String path) throws IOException {
File file = new File(path);
OutputStream out = new FileOutputStream(file);
int len = 0;
byte[] bytes = new byte[1024];
while ( (len = is.read(bytes)) != -1 ) {
out.write(bytes, 0, len);
}
out.flush();
out.close();
}
@Override
public Response update(long id, String content, List<Attachment> attachments) throws ParseException {
InnerMails entity = emailService.get(id);
JSONObject preceInfo = JSONObject.fromObject(content);
JSONObject backInfo = new JSONObject();
if ( null != entity ) {
entity.setSubject(preceInfo.optString("subject"));
entity.setToMails(preceInfo.optString("toMails"));
entity.setUrgency(preceInfo.optString("urgency"));
Date sendDate = null;
if ( preceInfo.optString("sendDate") != null && preceInfo.optString("sendDate") != "" ) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
sendDate = df.parse(preceInfo.optString("sendDate"));
}
//保存附件
Set<AppendFile> appfiles=addAttach(attachments, entity);
entity.setAppendFiles(appfiles);
entity.setSendDate(sendDate);
entity.setContent(preceInfo.optString("content"));
entity.setMailUser(preceInfo.optString("mailUser"));
entity.setSendMail(preceInfo.optString("sendMail"));
entity.setType(preceInfo.optInt("type"));
addAttach(attachments, entity);
entity = emailService.update(entity);
if ( entity != null ) {
backInfo = JSONObject.fromObject(entity);
return Response.ok(backInfo.toString(), MediaType.APPLICATION_JSON).build();
} else {
backInfo.put("message", "修改失败");
return Response.ok(backInfo.toString(), MediaType.APPLICATION_JSON).build();
}
}
backInfo.put("message", "没有找到指定的邮件");
return Response.ok(backInfo.toString(), MediaType.APPLICATION_JSON).build();
}
@Override
public Response get(long id) {
JSONObject backInfo = new JSONObject();
InnerMails entity = emailService.get(id);
JSONObject jo;
/*JsonConfig JSONConfig = Constant.jsonDateConfigWithHour;
JSONConfig.setExcludes(new String[] {"appendFiles"});*/
// 去掉延迟加载的字段
jo = JSONObject.fromObject(entity);
//修改状态为已读
entity.setType(3);
emailService.update(entity);
if ( null != entity ) {
backInfo = JSONObject.fromObject(jo);
return Response.ok(backInfo.toString(), MediaType.APPLICATION_JSON).build();
}
backInfo.put("message", "没有找到指定的内部邮件");
return Response.ok(backInfo.toString(), MediaType.APPLICATION_JSON).build();
}
@Override
public Response getList(String range, String query) {
QueryParam queryParam = new QueryParam();
int from = 0;
int to = 9;
try {
String[] ranges = range.replace("items=", "").split("-");
from = Integer.parseInt(ranges[0]);
to = Integer.parseInt(ranges[1]);
} catch ( Exception e ) {
e.printStackTrace();
}
queryParam.setFirst(from);
int max = to - from + 1;
if ( max > 0 ) {
queryParam.setMax(max);
}
if(null!=query){
QueryUtil.prepareQuery(query, queryParam);
}
int count=emailService.getCount(queryParam);
List<InnerMails> list=emailService.getlist(queryParam);
JsonConfig jsonconfig=Constant.jsonDateConfig;
jsonconfig.setExcludes(new String[] {"appendFiles"});
String contentRange=String.format("items %d-%d/%d", from,to,count);
JSONArray ja = JSONArray.fromObject(list,jsonconfig);
String entity = ja.toString();
return Response.ok(entity, MediaType.APPLICATION_JSON).header("Content-Range", contentRange).build();
}
@Override
public Response delete(long id) {
JSONObject backInfo=new JSONObject();
try {
emailService.delete(id);
backInfo.put("message", "删除成功");
return Response.ok(backInfo.toString(), MediaType.APPLICATION_JSON).build();
} catch ( Exception e ) {
backInfo.put("message","删除失败");
return Response.ok(backInfo.toString(),MediaType.APPLICATION_JSON).build();
}
}
@Override
public Response sendMail(/*String content,List<Attachment> attachments*/long id){
JSONObject backInfo=new JSONObject();
//通过id找到对应的邮件
InnerMails entity=emailService.get(id);
//将A的邮件mail状态改为发送
entity.setType(1);
entity=emailService.update(entity);
//找到收件人,根据收件人的个数来新增多条邮件
String toMail=entity.getToMails();
String[] toMails=toMail.split(",");
for(String tomail:toMails){
//新增邮件,修改mail1的拥有。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。