ApiAuthController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. package com.kmall.api.api;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.google.common.collect.Maps;
  4. import com.kmall.api.annotation.IgnoreAuth;
  5. import com.kmall.api.entity.*;
  6. import com.kmall.api.service.*;
  7. import com.kmall.api.util.ApiBaseAction;
  8. import com.kmall.api.util.ApiUserUtils;
  9. import com.kmall.api.util.CommonUtil;
  10. import com.qiniu.util.StringUtils;
  11. import org.apache.commons.collections.MapUtils;
  12. import org.apache.commons.logging.Log;
  13. import org.apache.commons.logging.LogFactory;
  14. import org.apache.log4j.Logger;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.web.bind.annotation.*;
  17. import java.math.BigDecimal;
  18. import java.util.Date;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.Map;
  22. /**
  23. * API登录授权
  24. *
  25. * @author Scott
  26. * @email
  27. * @date 2017-03-23 15:31
  28. */
  29. @RestController
  30. @RequestMapping("/api/auth")
  31. public class ApiAuthController extends ApiBaseAction {
  32. private Log logger = LogFactory.getLog(ApiAuthController.class);
  33. @Autowired
  34. private ApiUserService userService;
  35. @Autowired
  36. private TokenService tokenService;
  37. @Autowired
  38. private ApiStoreService apiStoreService;
  39. @Autowired
  40. private ApiMerchUserService apiMerchUserService;
  41. @Autowired
  42. private ApiThirdMerchantBizService apiThirdMerchantBizService;
  43. /**
  44. * 登录
  45. */
  46. @IgnoreAuth
  47. @PostMapping("login_by_weixin")
  48. public Object loginByWeixin() {
  49. Map<String, Object> resultObj = Maps.newHashMap();
  50. JSONObject jsonParam = this.getJsonRequest();
  51. FullUserInfo fullUserInfo = null;
  52. Long storeId = jsonParam.getLong("storeId");
  53. String merchSn = (String)jsonParam.get("merchSn");
  54. String code = "";
  55. if (!StringUtils.isNullOrEmpty(jsonParam.getString("code"))) {
  56. code = jsonParam.getString("code");
  57. }
  58. if (null != jsonParam.get("userInfo")) {
  59. fullUserInfo = jsonParam.getObject("userInfo", FullUserInfo.class);
  60. }
  61. UserInfo userInfo = fullUserInfo.getUserInfo();
  62. if(userInfo == null){
  63. return toResponsFail("登录失败");
  64. }
  65. //获取openid
  66. String requestUrl = ApiUserUtils.getWebAccess(code);//通过自定义工具类组合出小程序需要的登录凭证 code
  67. logger.info("》》》组合token为:" + requestUrl);
  68. JSONObject sessionData = CommonUtil.httpsRequest(requestUrl, "GET", null);
  69. logger.info("》》》sessionData为:" + sessionData);
  70. if (null == sessionData) {
  71. return toResponsFail("登录失败");
  72. }
  73. String openId = sessionData.getString("openid");
  74. if (StringUtils.isNullOrEmpty(openId)) {
  75. return toResponsFail("登录失败");
  76. }
  77. //验证用户信息完整性
  78. String sha1 = CommonUtil.getSha1(fullUserInfo.getRawData() + sessionData.getString("session_key"));
  79. if (!fullUserInfo.getSignature().equals(sha1)) {
  80. return toResponsFail("登录失败");
  81. }
  82. Date nowTime = new Date();
  83. UserVo userVo = userService.queryByOpenId(openId);
  84. userInfo.setNickName(filterEmoji(userInfo.getNickName()));;
  85. if (null == userVo) {
  86. userVo = new UserVo();
  87. userVo.setPassword(openId);
  88. userVo.setRegister_time(nowTime);
  89. userVo.setRegister_ip(this.getClientIp());
  90. userVo.setLast_login_ip(userVo.getRegister_ip());
  91. userVo.setLast_login_time(userVo.getRegister_time());
  92. userVo.setWeixin_openid(sessionData.getString("openid"));
  93. userVo.setAvatar(userInfo.getAvatarUrl());
  94. userVo.setGender(userInfo.getGender()); // //性别 0:未知、1:男、2:女
  95. userVo.setNickname(userInfo.getNickName());
  96. userVo.setUser_level_id(1);
  97. userService.save(userVo);
  98. } else {
  99. userVo.setLast_login_ip(this.getClientIp());
  100. userVo.setLast_login_time(nowTime);
  101. userVo.setAvatar(userInfo.getAvatarUrl());
  102. userVo.setGender(userInfo.getGender()); // //性别 0:未知、1:男、2:女
  103. userService.update(userVo);
  104. }
  105. Map<String, Object> tokenMap = tokenService.createAndUpdateToken(userVo.getWeixin_openid(), storeId,userVo.getId(),merchSn,"false");
  106. String token = MapUtils.getString(tokenMap, "token");
  107. if (null == userInfo || StringUtils.isNullOrEmpty(token)) {
  108. return toResponsFail("登录失败");
  109. }
  110. resultObj.put("token", token);
  111. resultObj.put("userInfo", userInfo);
  112. resultObj.put("userId", userVo.getId());
  113. return toResponsSuccess(resultObj);
  114. }
  115. /**
  116. * 将emoji表情替换成空串
  117. * @param source
  118. * @return 过滤后的字符串
  119. **/
  120. public static String filterEmoji(String source) {
  121. if (source != null && source.length() > 0) {
  122. return source.replaceAll("[\ud800\udc00-\udbff\udfff\ud800-\udfff]", "");
  123. } else {
  124. return source;
  125. }
  126. }
  127. /**
  128. * 根据经纬度选择门店
  129. */
  130. @GetMapping("nearbyLists")
  131. @IgnoreAuth
  132. public Object nearbyLists(@RequestParam BigDecimal latitude, @RequestParam BigDecimal longitude, @RequestParam String storeId,@RequestParam String thirdPartyMerchCode) {
  133. Map param = Maps.newHashMap();
  134. if(org.apache.commons.lang3.StringUtils.isNotEmpty(storeId)){
  135. param.put("storeId", storeId);
  136. }
  137. if(org.apache.commons.lang3.StringUtils.isNotEmpty(thirdPartyMerchCode)){
  138. param.put("thirdPartyMerchCode", thirdPartyMerchCode);
  139. }
  140. param.put("latitude", latitude);
  141. param.put("longitude", longitude);
  142. List<StoreVo> storeVoList = apiStoreService.queryNearbyList(param);
  143. if (null != storeVoList && storeVoList.size() > 0 && null != getOpenId()) {
  144. tokenService.createAndUpdateToken(getOpenId(), storeVoList.get(0).getId(),getUserId(),storeVoList.get(0).getMerchSn(),"false");
  145. }
  146. return toResponsSuccess(storeVoList);
  147. }
  148. @GetMapping("updateStoreLoadGoodsById")
  149. @IgnoreAuth
  150. public Object updateStoreLoadGoodsById(@RequestParam String storeId) {
  151. MerchUserVo merchUserVo = new MerchUserVo();
  152. merchUserVo.setStoreId(Integer.valueOf(storeId));
  153. merchUserVo.setUserId(Integer.parseInt(String.valueOf(getUserId())));
  154. merchUserVo.setIsLoadGoods("0");//门店商品是否修改字段更新为否
  155. apiMerchUserService.updateStoreLoadGoodsById(merchUserVo);
  156. return toResponsSuccess("成功");
  157. }
  158. /**
  159. * 根据城市获取门店
  160. */
  161. @GetMapping("storeListByCity")
  162. @IgnoreAuth
  163. public Object storeListByCity(@RequestParam String provinceName, @RequestParam String cityName, @RequestParam String countyName) {
  164. Map param = Maps.newHashMap();
  165. param.put("province_name", provinceName);
  166. param.put("city_name", cityName);
  167. param.put("county_name", countyName);
  168. List<StoreVo> storeVoList = apiStoreService.queryList(param);
  169. return toResponsSuccess(storeVoList);
  170. }
  171. /**
  172. * 选择门店Id
  173. */
  174. @PostMapping("chooseStoreId")
  175. public Object chooseStoreId() {
  176. JSONObject jsonParam = this.getJsonRequest();
  177. String openId = getOpenId();
  178. Long storeId = jsonParam.getLong("storeId");
  179. String merchSn = (String)jsonParam.get("merchSn");
  180. String isRefusedLogin = (String)jsonParam.get("isRefusedLogin");
  181. //
  182. Map<String, Object> resultObj = Maps.newHashMap();
  183. Map<String, Object> tokenMap = tokenService.createAndUpdateToken(openId, storeId, getUserId(), merchSn, isRefusedLogin);
  184. String token = MapUtils.getString(tokenMap, "token");
  185. resultObj.put("token", token);
  186. return toResponsSuccess(resultObj);
  187. }
  188. @IgnoreAuth
  189. @PostMapping("updateLoginUser")
  190. public Object updateLoginUser() {
  191. JSONObject jsonParam = this.getJsonRequest();
  192. Long storeId = jsonParam.getLong("storeId");
  193. Long userId = jsonParam.getLong("userId");
  194. String merchSn = (String)jsonParam.get("merchSn");
  195. // Date nowTime = new Date();
  196. UserVo userVo = userService.queryObject(userId);
  197. String isLoadGoods = "";
  198. if (null != userVo) {
  199. MerchUserVo merchUser = apiMerchUserService.queryObjectByStoreId(storeId,userId);
  200. MerchUserVo merchUserVo = new MerchUserVo();
  201. merchUserVo.setStoreId(Integer.parseInt(String.valueOf(storeId)));
  202. merchUserVo.setMerchSn(merchSn);
  203. merchUserVo.setUserId(Integer.parseInt(String.valueOf(userId)));
  204. if(merchUser != null) {
  205. isLoadGoods = merchUser.getIsLoadGoods();
  206. merchUserVo.setModTime(new Date());
  207. merchUserVo.setId(merchUser.getId());
  208. apiMerchUserService.update(merchUserVo);
  209. }else{
  210. merchUserVo.setCreateTime(new Date());
  211. merchUserVo.setModTime(new Date());
  212. merchUserVo.setIsLoadGoods("0");
  213. apiMerchUserService.save(merchUserVo);
  214. }
  215. }
  216. ThirdMerchantBizVo thirdMerchantBizVo = apiThirdMerchantBizService.queryDataByStoreId(storeId);
  217. if(thirdMerchantBizVo != null){
  218. thirdMerchantBizVo.setIsLoadGoods(isLoadGoods);
  219. }
  220. return toResponsSuccess(thirdMerchantBizVo);
  221. }
  222. @GetMapping("getOpenId")
  223. @IgnoreAuth
  224. public Object getOpenId(@RequestParam String code) {
  225. //获取openid
  226. String requestUrl = ApiUserUtils.getWebAccess(code);//通过自定义工具类组合出小程序需要的登录凭证 code
  227. logger.info("》》》组合token为:" + requestUrl);
  228. JSONObject sessionData = CommonUtil.httpsRequest(requestUrl, "GET", null);
  229. logger.info("》》》sessionData为:" + sessionData);
  230. if (null == sessionData) {
  231. return toResponsFail("登录失败");
  232. }
  233. String openId = sessionData.getString("openid");
  234. if (StringUtils.isNullOrEmpty(openId)) {
  235. return toResponsFail("登录失败");
  236. }
  237. return toResponsSuccess(openId);
  238. }
  239. }