| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- package com.kmall.api.api;
- import com.alibaba.fastjson.JSONObject;
- import com.google.common.collect.Maps;
- import com.kmall.api.annotation.IgnoreAuth;
- import com.kmall.api.entity.*;
- import com.kmall.api.service.*;
- import com.kmall.api.util.ApiBaseAction;
- import com.kmall.api.util.ApiUserUtils;
- import com.kmall.api.util.CommonUtil;
- import com.qiniu.util.StringUtils;
- import org.apache.commons.collections.MapUtils;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.apache.log4j.Logger;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.*;
- import java.math.BigDecimal;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- /**
- * API登录授权
- *
- * @author Scott
- * @email
- * @date 2017-03-23 15:31
- */
- @RestController
- @RequestMapping("/api/auth")
- public class ApiAuthController extends ApiBaseAction {
- private Log logger = LogFactory.getLog(ApiAuthController.class);
- @Autowired
- private ApiUserService userService;
- @Autowired
- private TokenService tokenService;
- @Autowired
- private ApiStoreService apiStoreService;
- @Autowired
- private ApiMerchUserService apiMerchUserService;
- @Autowired
- private ApiThirdMerchantBizService apiThirdMerchantBizService;
- /**
- * 登录
- */
- @IgnoreAuth
- @PostMapping("login_by_weixin")
- public Object loginByWeixin() {
- Map<String, Object> resultObj = Maps.newHashMap();
- JSONObject jsonParam = this.getJsonRequest();
- FullUserInfo fullUserInfo = null;
- Long storeId = jsonParam.getLong("storeId");
- String merchSn = (String)jsonParam.get("merchSn");
- String code = "";
- if (!StringUtils.isNullOrEmpty(jsonParam.getString("code"))) {
- code = jsonParam.getString("code");
- }
- if (null != jsonParam.get("userInfo")) {
- fullUserInfo = jsonParam.getObject("userInfo", FullUserInfo.class);
- }
- UserInfo userInfo = fullUserInfo.getUserInfo();
- if(userInfo == null){
- return toResponsFail("登录失败");
- }
- //获取openid
- String requestUrl = ApiUserUtils.getWebAccess(code);//通过自定义工具类组合出小程序需要的登录凭证 code
- logger.info("》》》组合token为:" + requestUrl);
- JSONObject sessionData = CommonUtil.httpsRequest(requestUrl, "GET", null);
- logger.info("》》》sessionData为:" + sessionData);
- if (null == sessionData) {
- return toResponsFail("登录失败");
- }
- String openId = sessionData.getString("openid");
- if (StringUtils.isNullOrEmpty(openId)) {
- return toResponsFail("登录失败");
- }
- //验证用户信息完整性
- String sha1 = CommonUtil.getSha1(fullUserInfo.getRawData() + sessionData.getString("session_key"));
- if (!fullUserInfo.getSignature().equals(sha1)) {
- return toResponsFail("登录失败");
- }
- Date nowTime = new Date();
- UserVo userVo = userService.queryByOpenId(openId);
- userInfo.setNickName(filterEmoji(userInfo.getNickName()));;
- if (null == userVo) {
- userVo = new UserVo();
- userVo.setPassword(openId);
- userVo.setRegister_time(nowTime);
- userVo.setRegister_ip(this.getClientIp());
- userVo.setLast_login_ip(userVo.getRegister_ip());
- userVo.setLast_login_time(userVo.getRegister_time());
- userVo.setWeixin_openid(sessionData.getString("openid"));
- userVo.setAvatar(userInfo.getAvatarUrl());
- userVo.setGender(userInfo.getGender()); // //性别 0:未知、1:男、2:女
- userVo.setNickname(userInfo.getNickName());
- userVo.setUser_level_id(1);
- userService.save(userVo);
- } else {
- userVo.setLast_login_ip(this.getClientIp());
- userVo.setLast_login_time(nowTime);
- userVo.setAvatar(userInfo.getAvatarUrl());
- userVo.setGender(userInfo.getGender()); // //性别 0:未知、1:男、2:女
- userService.update(userVo);
- }
- Map<String, Object> tokenMap = tokenService.createAndUpdateToken(userVo.getWeixin_openid(), storeId,userVo.getId(),merchSn,"false");
- String token = MapUtils.getString(tokenMap, "token");
- if (null == userInfo || StringUtils.isNullOrEmpty(token)) {
- return toResponsFail("登录失败");
- }
- resultObj.put("token", token);
- resultObj.put("userInfo", userInfo);
- resultObj.put("userId", userVo.getId());
- return toResponsSuccess(resultObj);
- }
- /**
- * 将emoji表情替换成空串
- * @param source
- * @return 过滤后的字符串
- **/
- public static String filterEmoji(String source) {
- if (source != null && source.length() > 0) {
- return source.replaceAll("[\ud800\udc00-\udbff\udfff\ud800-\udfff]", "");
- } else {
- return source;
- }
- }
- /**
- * 根据经纬度选择门店
- */
- @GetMapping("nearbyLists")
- @IgnoreAuth
- public Object nearbyLists(@RequestParam BigDecimal latitude, @RequestParam BigDecimal longitude, @RequestParam String storeId,@RequestParam String thirdPartyMerchCode) {
- Map param = Maps.newHashMap();
- if(org.apache.commons.lang3.StringUtils.isNotEmpty(storeId)){
- param.put("storeId", storeId);
- }
- if(org.apache.commons.lang3.StringUtils.isNotEmpty(thirdPartyMerchCode)){
- param.put("thirdPartyMerchCode", thirdPartyMerchCode);
- }
- param.put("latitude", latitude);
- param.put("longitude", longitude);
- List<StoreVo> storeVoList = apiStoreService.queryNearbyList(param);
- if (null != storeVoList && storeVoList.size() > 0 && null != getOpenId()) {
- tokenService.createAndUpdateToken(getOpenId(), storeVoList.get(0).getId(),getUserId(),storeVoList.get(0).getMerchSn(),"false");
- }
- return toResponsSuccess(storeVoList);
- }
- @GetMapping("updateStoreLoadGoodsById")
- @IgnoreAuth
- public Object updateStoreLoadGoodsById(@RequestParam String storeId) {
- MerchUserVo merchUserVo = new MerchUserVo();
- merchUserVo.setStoreId(Integer.valueOf(storeId));
- merchUserVo.setUserId(Integer.parseInt(String.valueOf(getUserId())));
- merchUserVo.setIsLoadGoods("0");//门店商品是否修改字段更新为否
- apiMerchUserService.updateStoreLoadGoodsById(merchUserVo);
- return toResponsSuccess("成功");
- }
- /**
- * 根据城市获取门店
- */
- @GetMapping("storeListByCity")
- @IgnoreAuth
- public Object storeListByCity(@RequestParam String provinceName, @RequestParam String cityName, @RequestParam String countyName) {
- Map param = Maps.newHashMap();
- param.put("province_name", provinceName);
- param.put("city_name", cityName);
- param.put("county_name", countyName);
- List<StoreVo> storeVoList = apiStoreService.queryList(param);
- return toResponsSuccess(storeVoList);
- }
- /**
- * 选择门店Id
- */
- @PostMapping("chooseStoreId")
- public Object chooseStoreId() {
- JSONObject jsonParam = this.getJsonRequest();
- String openId = getOpenId();
- Long storeId = jsonParam.getLong("storeId");
- String merchSn = (String)jsonParam.get("merchSn");
- String isRefusedLogin = (String)jsonParam.get("isRefusedLogin");
- //
- Map<String, Object> resultObj = Maps.newHashMap();
- Map<String, Object> tokenMap = tokenService.createAndUpdateToken(openId, storeId, getUserId(), merchSn, isRefusedLogin);
- String token = MapUtils.getString(tokenMap, "token");
- resultObj.put("token", token);
- return toResponsSuccess(resultObj);
- }
- @IgnoreAuth
- @PostMapping("updateLoginUser")
- public Object updateLoginUser() {
- JSONObject jsonParam = this.getJsonRequest();
- Long storeId = jsonParam.getLong("storeId");
- Long userId = jsonParam.getLong("userId");
- String merchSn = (String)jsonParam.get("merchSn");
- // Date nowTime = new Date();
- UserVo userVo = userService.queryObject(userId);
- String isLoadGoods = "";
- if (null != userVo) {
- MerchUserVo merchUser = apiMerchUserService.queryObjectByStoreId(storeId,userId);
- MerchUserVo merchUserVo = new MerchUserVo();
- merchUserVo.setStoreId(Integer.parseInt(String.valueOf(storeId)));
- merchUserVo.setMerchSn(merchSn);
- merchUserVo.setUserId(Integer.parseInt(String.valueOf(userId)));
- if(merchUser != null) {
- isLoadGoods = merchUser.getIsLoadGoods();
- merchUserVo.setModTime(new Date());
- merchUserVo.setId(merchUser.getId());
- apiMerchUserService.update(merchUserVo);
- }else{
- merchUserVo.setCreateTime(new Date());
- merchUserVo.setModTime(new Date());
- merchUserVo.setIsLoadGoods("0");
- apiMerchUserService.save(merchUserVo);
- }
- }
- ThirdMerchantBizVo thirdMerchantBizVo = apiThirdMerchantBizService.queryDataByStoreId(storeId);
- if(thirdMerchantBizVo != null){
- thirdMerchantBizVo.setIsLoadGoods(isLoadGoods);
- }
- return toResponsSuccess(thirdMerchantBizVo);
- }
- @GetMapping("getOpenId")
- @IgnoreAuth
- public Object getOpenId(@RequestParam String code) {
- //获取openid
- String requestUrl = ApiUserUtils.getWebAccess(code);//通过自定义工具类组合出小程序需要的登录凭证 code
- logger.info("》》》组合token为:" + requestUrl);
- JSONObject sessionData = CommonUtil.httpsRequest(requestUrl, "GET", null);
- logger.info("》》》sessionData为:" + sessionData);
- if (null == sessionData) {
- return toResponsFail("登录失败");
- }
- String openId = sessionData.getString("openid");
- if (StringUtils.isNullOrEmpty(openId)) {
- return toResponsFail("登录失败");
- }
- return toResponsSuccess(openId);
- }
- }
|