portal web service

Service.java 6.4KB

    package com.ekexiu.portal.msg; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.ListIterator; import org.jfw.apt.annotation.Autowrie; import org.jfw.apt.annotation.DefaultValue; import org.jfw.apt.annotation.Nullable; import org.jfw.apt.web.annotation.Path; import org.jfw.apt.web.annotation.operate.Get; import org.jfw.apt.web.annotation.operate.Post; import org.jfw.apt.web.annotation.param.JdbcConn; import org.jfw.util.DateUtil; import org.jfw.util.PageQueryResult; import org.jfw.util.jdbc.JdbcUtil; import org.jfw.util.jdbc.PreparedStatementConfig; import org.jfw.util.jdbc.ResultSetExtractor; import org.jfw.util.json.JsonService; import com.ekexiu.portal.util.WebMsgSocketServlet; @Path("/webMsg") public class Service { public static final List<ActorItem> EMPTY_ACTORS = Collections.<ActorItem> emptyList(); @Autowrie private WebMsgDao webMsgDao; public WebMsgDao getWebMsgDao() { return webMsgDao; } public void setWebMsgDao(WebMsgDao webMsgDao) { this.webMsgDao = webMsgDao; } public static ActorItem build(WebMsgIdx wmi, String owner, SimpleDateFormat sf) { ActorItem item = new ActorItem(); item.setCnt(wmi.getLastCnt()); String actor = wmi.getActor(); if (owner.equals(actor)) { item.setId(wmi.getOwner()); item.setNum(wmi.getNumOfOwner()); } else { item.setId(actor); item.setNum(wmi.getNumOfActor()); } item.setTime(wmi.getLastTime()); item.setTimeStr(sf.format(new Date(wmi.getLastTime()))); return item; } public static List<ActorItem> build(List<WebMsgIdx> list, String owner) { if (list == null || list.isEmpty()) return EMPTY_ACTORS; SimpleDateFormat sf = new SimpleDateFormat(DateUtil.TIMESTAMP_FORMAT); List<ActorItem> ret = new ArrayList<ActorItem>(list.size()); for (ListIterator<WebMsgIdx> it = list.listIterator(); it.hasNext();) { ret.add(build(it.next(), owner, sf)); } return ret; } @Get @Path("/idx/qm") public List<ActorItem> query(@JdbcConn Connection con, String id) throws SQLException { List<WebMsgIdx> list = webMsgDao.query(con, id); return build(list, id); } @Get @Path("/idx/qo") public ActorItem query(@JdbcConn Connection con, String id, String oid) throws SQLException { WebMsgIdx wmi = null; if (id.compareTo(oid) < 0) { wmi = webMsgDao.query(con, id, oid); } else { wmi = webMsgDao.query(con, oid, id); } SimpleDateFormat sf = new SimpleDateFormat(DateUtil.TIMESTAMP_FORMAT); if (wmi != null) { return build(wmi, id, sf); } return null; } @Get @Path("/idx/pq") public PageQueryResult<ActorItem> query(@JdbcConn Connection con, String id, @DefaultValue("1") int pageNo, @DefaultValue("10") int pageSize) throws SQLException { PageQueryResult<WebMsgIdx> wmis = this.webMsgDao.query(con, id, pageSize, pageNo); PageQueryResult<ActorItem> ret = new PageQueryResult<ActorItem>(); ret.setPageNo(ret.getPageNo()); ret.setPageSize(wmis.getPageSize()); ret.setTotal(wmis.getTotal()); ret.setData(build(wmis.getData(), id)); return ret; } @Get @Path("/unReadedCount") public Integer queryUnReadedCount(@JdbcConn Connection con, final String id) throws SQLException { return JdbcUtil.query(con, "SELECT NUM_OF_OWNER FROM WEB_MSG_IDX WHERE OWNER ='' AND SHOW_OF_OWNER='1' UNION ALL SELECT NUM_OF_ACTOR FROM WEB_MSG_IDX WHERE ACTOR ='' AND SHOW_OF_ACTOR='1' ", new ResultSetExtractor<Integer>() { @Override public Integer extractData(ResultSet rs) throws SQLException { int ret = 0; while (rs.next()) { ret += rs.getInt(1); } return ret; } }, new PreparedStatementConfig() { @Override public void config(PreparedStatement ps) throws SQLException { ps.setString(1, id); ps.setString(2, id); } }); } @Post @Path public void send(@JdbcConn Connection con, String sender, String reciver, String cnt) throws SQLException { boolean ownerSend = true; String owner = sender; String actor = reciver; boolean next = true; if (sender.compareTo(reciver) < 0) { ownerSend = false; owner = reciver; actor = sender; } WebMsgCnt wmc = new WebMsgCnt(); wmc.setCnt(cnt); wmc.setReaded(false); wmc.setReciver(reciver); wmc.setSender(sender); WebMsgIdx wmi = null; while (next) { try { long time = System.currentTimeMillis(); wmc.setSendTime(DateUtil.formatTimeStamp(time)); webMsgDao.insert(con, wmc); int numOfUpdate = 0; if (ownerSend) { numOfUpdate = webMsgDao.incActorNum(con, owner, actor, cnt, time); } else { numOfUpdate = webMsgDao.incOwnerNum(con, owner, actor, cnt, time); } if (numOfUpdate == 0) { if (wmi == null) { wmi = new WebMsgIdx(); wmi.setActor(actor); wmi.setLastCnt(cnt); wmi.setNumOfActor(ownerSend ? 1 : 0); wmi.setNumOfOwner(ownerSend ? 0 : 1); wmi.setOwner(owner); wmi.setShowOfActor(true); wmi.setShowOfOwner(true); } wmi.setLastTime(time); webMsgDao.insert(con, wmi); } con.commit(); next = false; WebMsgSocketServlet.sendMessage(reciver, JsonService.toJson(wmc)); } catch (SQLException e) { if ("23505".equals(e.getSQLState())) { con.rollback(); } throw e; } } } @Get @Path("/cnt/load") public List<WebMsgCnt> load(@JdbcConn Connection con, String sender, String reciver, @Nullable String bt, @DefaultValue("true") boolean all) throws SQLException { if (all) { return webMsgDao.queryAll(con, sender, reciver, bt); } else { return webMsgDao.query(con, sender, reciver, bt); } } @Post @Path("/readed") public void readed(@JdbcConn(true) Connection con, String sender, String reciver, String time) throws SQLException { int num = webMsgDao.readed(con, sender, reciver, time); if (num > 0) { String owner = sender; String actor = reciver; boolean ownerSend = true; if (sender.compareTo(reciver) > 0) { owner = reciver; actor = sender; ownerSend = false; } if (ownerSend) { webMsgDao.decActorNum(con, owner, actor, num); } else { webMsgDao.decOwnerNum(con, owner, actor, num); } } } }