package com.ks.daylucky.controller.api.client; import com.alipay.api.AlipayApiException; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.ks.app.entity.AppAlipayInfoWithBLOBs; import com.ks.app.entity.AppInfo; import com.ks.daylucky.exception.UserInfoException; import com.ks.daylucky.exception.UserInfoExtraException; import com.ks.daylucky.pojo.DO.AppConfig; import com.ks.daylucky.pojo.DO.UserInfo; import com.ks.daylucky.pojo.DO.UserInfoExtra; import com.ks.daylucky.pojo.DO.UserMsg; import com.ks.daylucky.pojo.DTO.AlipayUserInfo; import com.ks.daylucky.pojo.DTO.ConfigKeyEnum; import com.ks.daylucky.pojo.DTO.TokenDTO; import com.ks.daylucky.pojo.DTO.UserMsgSettings; import com.ks.daylucky.pojo.VO.AcceptData; import com.ks.daylucky.pojo.VO.UserConfigVO; import com.ks.daylucky.pojo.VO.UserMsgVO; import com.ks.daylucky.service.AppConfigService; import com.ks.daylucky.service.UserInfoExtraService; import com.ks.daylucky.service.UserInfoService; import com.ks.daylucky.service.UserMsgService; import com.ks.daylucky.util.Constant; import com.ks.daylucky.util.RSAUtil; import com.ks.daylucky.util.UserInfoUtil; import com.ks.daylucky.util.annotation.RequestSerializable; import com.ks.daylucky.util.factory.vo.UserMsgVOFactory; import com.ks.lib.common.exception.ParamsException; import net.sf.json.JSONObject; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.yeshi.utils.JsonUtil; import org.yeshi.utils.StringUtil; import org.yeshi.utils.alipay.AlipayXcxUtil; import org.yeshi.utils.entity.alipay.AlipayAppInfo; import org.yeshi.utils.entity.alipay.AlipayCertInfo; import org.yeshi.utils.exception.AlipayXcxException; import javax.annotation.Resource; import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.List; @Controller @RequestMapping(value = "api/client/user", produces = "application/json;charset=utf-8") public class UserController { @Resource private UserInfoService userInfoService; @Resource private UserInfoExtraService userInfoExtraService; @Resource private UserMsgService userMsgService; @Resource private AppConfigService appConfigService; private AlipayAppInfo getAlipayAppInfo(AppInfo app) { AppAlipayInfoWithBLOBs alipay = app.getAlipayInfo(); AlipayAppInfo info = new AlipayAppInfo(alipay.getAlipayAppId(), alipay.getAlipayPrivateKey(), new AlipayCertInfo(new ByteArrayInputStream(alipay.getAlipayAppCertPublicKey()), new ByteArrayInputStream(alipay.getAlipayPublicCert()), new ByteArrayInputStream(alipay.getAlipayRootCert()))); return info; } @RequestSerializable(key = "'getToken-'+#alipayCode") @ResponseBody @RequestMapping("getToken") public String getToken(AcceptData acceptData, String alipayCode, String wxCode) { //支付宝应用 if (!StringUtil.isNullOrEmpty(alipayCode)) { String userId = null; try { userId = AlipayXcxUtil.getUserId(getAlipayAppInfo(acceptData.getApp()), alipayCode); } catch (AlipayApiException e) { e.printStackTrace(); } catch (AlipayXcxException e) { e.printStackTrace(); } if (userId == null) { return JsonUtil.loadFalseResult("token获取失败"); } String identifyCode = userId; UserInfo user = userInfoService.getUserInfo(acceptData.getApp().getId(), identifyCode); //注册 if (user == null) { user = new UserInfo(); user.setAppId(acceptData.getApp().getId()); user.setIdentifyCode(identifyCode); user.setAlipayUid(identifyCode); try { Long uid = userInfoService.addUserInfo(user); user.setId(uid); } catch (UserInfoException e) { return JsonUtil.loadFalseResult("token获取失败"); } catch (ParamsException e) { return JsonUtil.loadFalseResult("token获取失败"); } } TokenDTO tokenDTO = UserInfoUtil.getToken(user.getId()); return JsonUtil.loadTrueResult(tokenDTO); } return JsonUtil.loadFalseResult("不为支付宝应用"); } @ResponseBody @RequestMapping("getUserInfo") public String getUserInfo(AcceptData acceptData) { long uid = acceptData.getUid(); UserInfo user = userInfoService.getUserDetail(uid); if (user == null) { return JsonUtil.loadFalseResult("用户不存在"); } return JsonUtil.loadTrueResult(JsonUtil.getApiCommonGson().toJson(user)); } /** * 支付宝用户信息上传 * * @param acceptData * @param userInfo * @return */ @ResponseBody @RequestMapping("uploadAlipayUserInfo") public String uploadAlipayUserInfo(AcceptData acceptData, String userInfo) { String decryptStr = RSAUtil.decrypt(userInfo); if (StringUtil.isNullOrEmpty(decryptStr)) { return JsonUtil.loadFalseResult("用户信息获取失败"); } AlipayUserInfo alipayUserInfo = JsonUtil.getSimpleGson().fromJson(decryptStr, AlipayUserInfo.class); UserInfo user = new UserInfo(); user.setId(acceptData.getUid()); user.setPortrait(alipayUserInfo.getAvatar()); user.setNickName(alipayUserInfo.getNickName()); user.setAlipayNickName(alipayUserInfo.getNickName()); user.setAlipayPortrait(alipayUserInfo.getAvatar()); if (user.getPortrait() != null && user.getPortrait().endsWith("undefined")) { user.setPortrait(null); } if (StringUtil.isNullOrEmpty(user.getNickName())) { AppConfig config = appConfigService.getConfigCache(acceptData.getApp().getId(), ConfigKeyEnum.defaultNickNamePrefix, acceptData.getVersion()); user.setNickName(config.getValue() + acceptData.getUid()); } if (StringUtil.isNullOrEmpty(user.getPortrait())) { AppConfig config = appConfigService.getConfigCache(acceptData.getApp().getId(), ConfigKeyEnum.defaultPortrait, acceptData.getVersion()); user.setPortrait(config.getValue()); } userInfoService.updateUserInfo(user); user = userInfoService.getUserDetail(user.getId()); return JsonUtil.loadTrueResult(JsonUtil.getApiCommonGson().toJson(user)); } @ResponseBody @RequestMapping("setAlipayUserInfo") public String setAlipayUserInfo(AcceptData acceptData, String portrait, String nickName) { long uid = acceptData.getUid(); UserInfo user = userInfoService.getUserDetail(uid); if (user == null) { return JsonUtil.loadFalseResult("用户不存在"); } UserInfo update = new UserInfo(); update.setId(uid); update.setPortrait(portrait); update.setNickName(nickName); update.setAlipayPortrait(portrait); update.setAlipayNickName(nickName); userInfoService.updateUserInfo(update); return JsonUtil.loadTrueResult(JsonUtil.getApiCommonGson().toJson(user)); } @ResponseBody @RequestMapping("getMsgSettings") public String getMsgSettings(AcceptData acceptData) { UserMsgSettings msgSettings = userInfoExtraService.getUserMsgSettings(acceptData.getUid()); return JsonUtil.loadTrueResult(JsonUtil.getApiCommonGson().toJson(msgSettings)); } @ResponseBody @RequestMapping("setMsgSettings") public String setMsgSettings(AcceptData acceptData, UserMsgSettings settings) { userInfoExtraService.setUserMsgSetting(acceptData.getUid(), settings); UserMsgSettings msgSettings = userInfoExtraService.getUserMsgSettings(acceptData.getUid()); return JsonUtil.loadTrueResult(JsonUtil.getApiCommonGson().toJson(msgSettings)); } @ResponseBody @RequestMapping("setMsgRead") public String setMsgRead(AcceptData acceptData) { try { userInfoExtraService.setMsgRead(acceptData.getUid()); return JsonUtil.loadTrueResult(""); } catch (UserInfoExtraException e) { e.printStackTrace(); return JsonUtil.loadFalseResult("设置出错"); } } @ResponseBody @RequestMapping("getUserMsgList") public String getUserMsgList(AcceptData acceptData, int page) { List msgList = userMsgService.getUserMsgList(acceptData.getUid(), page, Constant.PAGE_SIZE); List voList = new ArrayList<>(); if (msgList != null) { for (UserMsg userMsg : msgList) { voList.add(UserMsgVOFactory.create(userMsg)); } } long count = userMsgService.countUserMsg(acceptData.getUid()); Gson gson = JsonUtil.getConvertDateToShortNameBuilder(new GsonBuilder()).create(); JSONObject data = new JSONObject(); data.put("data", gson.toJson(voList)); data.put("count", count); //设置消息已读 try { userInfoExtraService.setMsgRead(acceptData.getUid()); } catch (UserInfoExtraException e) { e.printStackTrace(); } return JsonUtil.loadTrueResult(data); } @ResponseBody @RequestMapping("getUserConfig") public String getUserConfig(AcceptData acceptData) { //消息未读数 UserInfoExtra extra = userInfoExtraService.getUserInfoExtra(acceptData.getUid()); if (extra == null) { return JsonUtil.loadFalseResult("用户不存在"); } UserConfigVO vo = new UserConfigVO(); vo.setMsgCount(extra.getMsgUnreadCount()); return JsonUtil.loadTrueResult(vo); } }