package com.goafanti.app.controller; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.springframework.http.HttpMethod; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson.JSONObject; import com.goafanti.common.bo.Result; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.constant.ErrorConstants; import com.goafanti.common.controller.BaseApiController; import com.goafanti.common.model.JpushEasemobAccount; import com.goafanti.common.model.MessageConsumer; import com.goafanti.common.model.MessageFromSystem; import com.goafanti.common.model.MessageProducer; import com.goafanti.common.model.User; import com.goafanti.common.utils.DateUtils; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.easemob.EasemobUtils; import com.goafanti.easemob.bo.EasemobInfo; import com.goafanti.message.bo.MessageBo; import com.goafanti.message.bo.MessageListBo; import com.goafanti.message.service.MessageService; import com.goafanti.user.service.UserService; @RestController @RequestMapping(path = "/api/user/app", method = RequestMethod.GET) public class AppApiController extends BaseApiController { @Resource private UserService userServiceImpl; @Resource private MessageService messageService; @Resource private EasemobUtils easemobUtils; @RequestMapping(value = "/uploadImg",method = RequestMethod.POST) public Result uploadAvatar(HttpServletRequest req){ Result res = new Result(); String headPortraitUrl = handleFile(res, "/avatar/", false, req, ""); if(TokenManager.getToken() instanceof User){ User u = new User(); u.setId(TokenManager.getUserId()); u.setHeadPortraitUrl(headPortraitUrl); userServiceImpl.updateByPrimaryKeySelective(u); } res.setData(headPortraitUrl); return res; } @RequestMapping(value = "/updateUser",method = RequestMethod.POST) public Result updateUser(User u){ Result res = new Result(); if(StringUtils.isBlank(u.getNickname())){ res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"用户昵称不能为空")); return res; } List checkData = userServiceImpl.checkExistUser(null, null, null, null, AFTConstants.USER_SOURCE_REGISTER, u.getNickname()); boolean exist = false; boolean needChange = false; if (null != checkData && checkData.size() > 0) { for (User item : checkData) { if (!item.getId().equals(TokenManager.getUserId())) exist = true; } } else { needChange = true; } if (exist) { res.getError().add(buildError(ErrorConstants.USER_NICKNAME_EXIST)); return res; } else if (needChange) { // 修改环信昵称 JpushEasemobAccount jea = messageService.selectSynAccByUid(TokenManager.getUserId()); if (null != jea && StringUtils.isNotBlank(jea.getEasemobName())) { JSONObject resultObj = new JSONObject(); resultObj.put("username", jea.getEasemobName()); resultObj.put("nickname", u.getNickname()); easemobUtils.sendLater( new EasemobInfo().uri("/users/").data(resultObj.toJSONString()).method(HttpMethod.POST)); } } u.setId(TokenManager.getUserId()); userServiceImpl.updateByPrimaryKeySelective(u); return res; } @RequestMapping(value = "/logout",method = RequestMethod.GET) public Result logout(HttpServletRequest request){ Result res = new Result(); TokenManager.logout(); return res; } @RequestMapping(value = "/userInfo",method = RequestMethod.GET) public Result userInfo(HttpServletRequest request){ Result res = new Result(); res.setData(userServiceImpl.selectBaseInfo()); return res; } @RequestMapping(value = "/index", method = RequestMethod.GET) public Result index(){ Result res = new Result(); res.setData(messageService.selectMessageWithGroup()); return res; } @RequestMapping(value = "/listMessage", method = RequestMethod.POST) public Result listMessage(Integer subject,Integer sourceType,Integer pageNo,Integer pageSize){ Result res = new Result(); if(null == subject){ res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "必须指定消息类型")); return res; } User u = TokenManager.getUserToken(); if(u != null){ List boList = messageService.selectSyncMessage(u.getId()); if(boList != null && boList.size()>0){ List producers = new ArrayList(); List consumers = new ArrayList(); MessageProducer mp = null; MessageConsumer mc = null; Date date = new Date(); for(MessageBo bo : boList){ mp = new MessageProducer(); mp.setId(bo.getId()); mp.setSendTime(date); producers.add(mp); mc = new MessageConsumer(); mc.setId(UUID.randomUUID().toString()); mc.setConsumerId(TokenManager.getUserId()); mc.setMessageId(bo.getMessageId()); consumers.add(mc); } if(producers.size()>0)messageService.updateMessageProducer(producers); //新增 message_consumer if(consumers.size()>0)messageService.insertBatchConsumer(consumers); } } res.setData(messageService.listPersonalMessage(subject,sourceType,pageNo,pageSize)); return res; } /** * 同步绑定账号 * @param uuid * @param registrationId * @param userName */ @RequestMapping(value = "/synBindingAccount",method = RequestMethod.POST) private Result synBindingAccount(String uuid,String registrationId,String easemobName,String easemobPass){ Result res = new Result(); //更新 jpush_easemob_account messageService.updateJpushEasemobAccount(uuid, registrationId, easemobName,easemobPass); return res; } /** * 读取消息 * @param messageId * @throws IllegalAccessException * @throws InvocationTargetException */ @RequestMapping(value = "/readMessage",method = RequestMethod.GET) private Result readMessage(String messageId){ Result res = new Result(); if(StringUtils.isBlank(messageId)){ res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"", "消息编号为空")); return res; } //读取消息详情 MessageFromSystem mfs = messageService.selectSystemMessageDetail(messageId); MessageListBo bo = new MessageListBo(); bo.setCreateTime(mfs.getCreateTime()==null?"":DateUtils.formatDate(mfs.getCreateTime(), AFTConstants.YYYYMMDDHHMMSS)); bo.setResourceType(String.valueOf(mfs.getResourceType())); bo.setSubject(String.valueOf(mfs.getSubject())); bo.setMessageId(mfs.getId()); bo.setTitle(mfs.getTitle()); bo.setBody(mfs.getBody()); res.setData(bo); //更新 message_consumer messageService.updateMessageConsumer(messageId); return res; } /** * 查询环信昵称和头像 * @param easemobName * @return */ @RequestMapping(value = "/getNicknameAndHeadPortrait",method = RequestMethod.GET) public Result getNicknameAndHeadPortrait(String easemobName){ Result res = new Result(); User user = userServiceImpl.selectByNumber(easemobName); JSONObject jsonObject = new JSONObject(); jsonObject.put("nickName", user.getNickname()); jsonObject.put("headPortraitUrl", null == user.getHeadPortraitUrl()?"":user.getHeadPortraitUrl()); res.setData(jsonObject); return res; } }