package com.mossle.android.rs; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.ws.rs.FormParam; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.mossle.api.tenant.TenantHolder; import com.mossle.api.user.UserConnector; import com.mossle.api.user.UserDTO; import com.mossle.core.mapper.JsonMapper; import com.mossle.core.util.BaseDTO; import com.mossle.msg.persistence.domain.MsgInfo; import com.mossle.msg.persistence.manager.MsgInfoManager; import com.mossle.pim.persistence.domain.PimDevice; import com.mossle.pim.persistence.manager.PimDeviceManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Component @Path("android/msg") public class AndroidMsgResource { private static Logger logger = LoggerFactory .getLogger(AndroidMsgResource.class); private JsonMapper jsonMapper = new JsonMapper(); private TenantHolder tenantHolder; private MsgInfoManager msgInfoManager; private UserConnector userConnector; private PimDeviceManager pimDeviceManager; @POST @Path("msg") @Produces(MediaType.APPLICATION_JSON) public BaseDTO msg(@HeaderParam("sessionId") String sessionId) throws Exception { logger.info("start"); PimDevice pimDevice = pimDeviceManager.findUniqueBy("sessionId", sessionId); if (pimDevice == null) { BaseDTO result = new BaseDTO(); result.setCode(401); result.setMessage("auth fail"); return result; } String userId = pimDevice.getUserId(); String hql = "from MsgInfo where receiverId=? order by createTime desc"; List<MsgInfo> msgInfos = msgInfoManager.find(hql, userId); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (MsgInfo msgInfo : msgInfos) { UserDTO userDto = null; if ((msgInfo.getSenderId() != null) && (!"".equals(msgInfo.getSenderId()))) { userDto = userConnector.findById(msgInfo.getSenderId()); } Map<String, Object> map = new HashMap<String, Object>(); map.put("id", Long.toString(msgInfo.getId())); if (userDto != null) { map.put("senderUsername", userDto.getUsername()); } else { map.put("senderUsername", "system"); } map.put("content", msgInfo.getContent()); list.add(map); } String json = jsonMapper.toJson(list); BaseDTO result = new BaseDTO(); result.setCode(200); result.setData(json); logger.info("end"); return result; } @POST @Path("view") @Produces(MediaType.APPLICATION_JSON) public BaseDTO view(@HeaderParam("sessionId") String sessionId, @FormParam("msgId") String msgId) throws Exception { logger.info("start"); PimDevice pimDevice = pimDeviceManager.findUniqueBy("sessionId", sessionId); if (pimDevice == null) { BaseDTO result = new BaseDTO(); result.setCode(401); result.setMessage("auth fail"); return result; } String userId = pimDevice.getUserId(); MsgInfo msgInfo = msgInfoManager.get(Long.parseLong(msgId)); UserDTO userDto = null; if ((msgInfo.getSenderId() != null) && (!"".equals(msgInfo.getSenderId()))) { userDto = userConnector.findById(msgInfo.getSenderId()); } Map<String, Object> map = new HashMap<String, Object>(); map.put("id", Long.toString(msgInfo.getId())); if (userDto != null) { map.put("senderUsername", userDto.getUsername()); } else { map.put("senderUsername", "system"); } map.put("content", msgInfo.getContent()); map.put("data", msgInfo.getData()); String json = jsonMapper.toJson(map); BaseDTO result = new BaseDTO(); result.setCode(200); result.setData(json); logger.info("end"); return result; } // ~ ====================================================================== @Resource public void setMsgInfoManager(MsgInfoManager msgInfoManager) { this.msgInfoManager = msgInfoManager; } @Resource public void setTenantHolder(TenantHolder tenantHolder) { this.tenantHolder = tenantHolder; } @Resource public void setUserConnector(UserConnector userConnector) { this.userConnector = userConnector; } @Resource public void setPimDeviceManager(PimDeviceManager pimDeviceManager) { this.pimDeviceManager = pimDeviceManager; } }