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.apache.shiro.crypto.hash.SimpleHash; 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.achievement.service.AchievementInterestService; import com.goafanti.achievement.service.AchievementService; import com.goafanti.activity.service.ActivityService; import com.goafanti.banners.service.BannersService; 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.demand.service.DemandService; 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.news.service.NewsService; import com.goafanti.user.service.UserCareerService; import com.goafanti.user.service.UserIdentityService; import com.goafanti.user.service.UserInterestService; import com.goafanti.user.service.UserService; @RestController @RequestMapping(path = "/app/user", method = RequestMethod.GET) public class AppUserController extends BaseApiController { @Resource private UserService userServiceImpl; @Resource private MessageService messageService; @Resource private EasemobUtils easemobUtils; @Resource private BannersService bannersService; @Resource private ActivityService activityService; @Resource private NewsService newsService; @Resource private AchievementService achievementService; @Resource private DemandService demandService; @Resource private UserCareerService userCareerService; @Resource private UserInterestService userInterestService; @Resource private UserIdentityService userIdentityService; @Resource AchievementInterestService achievementInterestService; @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; } /** * 关注功能 */ @RequestMapping(value = "/interestAdd", method = RequestMethod.GET) public Result Addinterest( Integer type,String objectId,String interest) { Result res = new Result(); if (null==type) { res.getError().add(buildError( "分类错误!", "分类错误")); return res; } String uid=null; if (StringUtils.isNotBlank(TokenManager.getUserId())) { uid=TokenManager.getUserId(); } if (Integer.valueOf(interest)==0) { res.setData(achievementInterestService.saveInterest( uid, type, objectId,interest)); }else { res.setData(achievementInterestService.deleteInterest( uid, type, objectId,interest)); } return res; } /** * 我的成果 */ @RequestMapping(value = "/achievementList", method = RequestMethod.GET) private Result achievementList(String pageNo, String pageSize) { Result res = new Result(); Integer pNo = 1; Integer pSize = 10; if (StringUtils.isNumeric(pageSize)) { pSize = Integer.parseInt(pageSize); } if (StringUtils.isNumeric(pageNo)) { pNo = Integer.parseInt(pageNo); } res.setData(achievementService.listAppMyAchievement(pNo, pSize)); return res; } /** * 我的需求 */ @RequestMapping(value = "/demandList", method = RequestMethod.GET) public Result demandList(String pageNo, String pageSize) { Result res = new Result(); Integer pNo = 1; Integer pSize = 10; if (StringUtils.isNumeric(pageSize)) { pSize = Integer.parseInt(pageSize); } if (StringUtils.isNumeric(pageNo)) { pNo = Integer.parseInt(pageNo); } res.setData(demandService.listMyDemand( pNo, pSize)); return res; } /** * 关注列表 */ @RequestMapping(value = "/interestList", method = RequestMethod.GET) public Result interestList(Integer type,String pageNo, String pageSize) { Result res = new Result(); Integer pNo = 1; Integer pSize = 10; if (null==type||type<0||type>5) { res.getError().add(buildError( "类型选择错误", "类型选择错误")); } if (StringUtils.isNumeric(pageSize)) { pSize = Integer.parseInt(pageSize); } if (StringUtils.isNumeric(pageNo)) { pNo = Integer.parseInt(pageNo); } res.setData(demandService.selectinterest(type, pNo, pSize)); return res; } /** * 专家详情 */ @RequestMapping(value = "/expertsDetail", method = RequestMethod.GET) public Result expertsDetail(String uid) { Result res = new Result(); if (StringUtils.isBlank(uid)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"专家必须指定","专家")); return res; } res.setData(userIdentityService.expertsDetail( uid)); return res; } /** * 成果详情 * @param id * @return */ @RequestMapping(value = "/achievementDetail", method = RequestMethod.GET) private Result userDetail(String id ) { Result res = new Result(); if (StringUtils.isBlank(id)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"成果必须指定","成果")); return res; } res.setData(achievementService.selectAppUserOwnerDetail(id)); return res; } /** * 需求详情 */ @RequestMapping(value = "/demandDetail", method = RequestMethod.GET) public Result DemandDetail(String id ) { Result res = new Result(); if (StringUtils.isBlank(id)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"需求必须指定","需求")); return res; } res.setData(demandService.selectDemandDetail( id)); return res; } /** * 获取环信登录账号,如果未注册则先注册 */ @RequestMapping(value = "/easemob", method = RequestMethod.GET) public Result getEasemob() { User u = TokenManager.getUserToken(); if (u != null) { JSONObject res = easemobUtils.send(new EasemobInfo().uri("/users/" + u.getNumber()).method(HttpMethod.GET)); JSONObject resultObj = new JSONObject(); resultObj.put("easemobPass", new SimpleHash("md5", u.getId(), null, 1).toHex()); resultObj.put("easemobName", String.valueOf(u.getNumber())); resultObj.put("nickname", StringUtils.isBlank(u.getNickname()) ? "技淘用户" + u.getNumber() : u.getNickname()); if (res == null || StringUtils.equals("service_resource_not_found", (CharSequence) res.get("error"))) { easemobUtils.sendLater( new EasemobInfo().uri("/users/").data(resultObj.toJSONString()).method(HttpMethod.POST)); } return res().data(resultObj); } else { return res().error(buildError("user only", "必须是登录会员才能访问。")); } } }