jpa 动态查询条件,jpa自定义查询语句

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: