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.UserInfo; import com.ks.daylucky.pojo.DO.UserMsg; 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.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.UserInfoUtil; 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.List; @Controller @RequestMapping("api/client/user") public class UserController { @Resource private UserInfoService userInfoService; @Resource private UserInfoExtraService userInfoExtraService; @Resource private UserMsgService userMsgService; 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; } @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); try { Long uid = userInfoService.addUserInfo(user); user.setId(uid); } catch (UserInfoException 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)); } @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); long count = userMsgService.countUserMsg(acceptData.getUid()); Gson gson = JsonUtil.getConvertDateToShortNameBuilder(new GsonBuilder().excludeFieldsWithoutExposeAnnotation()).create(); JSONObject data = new JSONObject(); data.put("data", gson.toJson(msgList)); data.put("count", count); return JsonUtil.loadTrueResult(data); } }