package com.matrix.system.shopXcx.api; import com.alibaba.fastjson.JSON; import com.matrix.biz.bean.BizUser; import com.matrix.biz.dao.BizUserDao; import com.matrix.biz.service.BizUserService; import com.matrix.component.redis.RedisUserLoginUtils; import com.matrix.component.tools.HttpCurlUtil; import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.tools.LogUtil; import com.matrix.core.tools.StringUtils; import com.matrix.core.web.BaseAction; import com.matrix.system.common.constance.AppConstance; import net.sf.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.Collections; import java.util.Date; /** * @description (用户表) * @author jyy * @date 2019-05-31 10:03 */ @Controller @RequestMapping(value = "wxapi/user") public class WxUserAction extends BaseAction { @Autowired private BizUserService bizUserService; @Autowired private RedisUserLoginUtils redisUserLoginUtils; @Autowired private BizUserDao bizUserDao; @Autowired private WeixinServiceUtil weixinServiceUtil; @Value("${debug}") private String isDebug; /** * 小程序登录 * * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2018年5月23日 * @param code * @return * @throws Exception */ @RequestMapping(value = "/login/{keys}") public @ResponseBody AjaxResult wxLogin(@PathVariable("keys") String code) throws Exception { AjaxResult res = new AjaxResult(); LogUtil.info("code:{}" + code); if (StringUtils.isNotBlank(code)) { String requrl = WeChatApiTools.getXcxLoginUrl(code); String reslutData = HttpCurlUtil.sendGetHttp(requrl, null); JSONObject json = JSONObject.fromObject(reslutData); LogUtil.debug("微信登录获取到登录信息={}", json); if(json.containsKey("errcode")){ res.setStatus(AjaxResult.STATUS_FAIL); res.setInfo("自动登录失败"); LogUtil.debug("微信登录获取到异常信息errcode"); return res; } String openId = json.getString("openid"); String sessionKey = json.getString("session_key"); LogUtil.debug("openId={},sessionKey={}", openId, sessionKey); // 查询用户是否存在 BizUser bizUser = null; synchronized(this){ bizUser = bizUserService.findByOpenId(openId); if (bizUser == null) { // 新增用户 bizUser = new BizUser(); bizUser.setSessionKey(sessionKey); bizUser.setOpenId(openId); bizUser.setLastLoginTime(new Date()); bizUser.setUserType(AppConstance.USER_TYPE_CUSTOMER); bizUserService.add(bizUser); } else { bizUser.setSessionKey(sessionKey); bizUser.setLastLoginTime(new Date()); // 更新用户sessionKey bizUserService.modifyByModel(bizUser); } } // 存放redis String token = redisUserLoginUtils.saveUserInfo(bizUser); LogUtil.info("用户token={}", token); res.putInMap("token", token); res.putInMap("userInfo", bizUser); res.setStatus(AjaxResult.STATUS_SUCCESS); } else { res.setStatus(AjaxResult.STATUS_FAIL); res.setInfo("自动登录失败"); } return res; } /** * 查询用户信息 */ @RequestMapping(value = "/findUserInfo") public @ResponseBody AjaxResult findUserInfo() { BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class); String openId = loginUser.getOpenId(); BizUser bizUser = bizUserService.findByOpenId(openId); //处理用户当前所在店铺 /* if(bizUser.getStaff()!=null){ //当前用户是员工账号 bizUser.setBusiness(bussinesssDao.selectById(bizUser.getStaff().getBusinessId())); bizUser.setRole(bizUser.getStaff().getRole()); }else{ //当前用户是boss账号 bizUser.setBusiness(bussinesssDao.findByUserOpenId(bizUser.getOpenId())); bizUser.setRole(AppConstance.User_ROLE_BOSS); }*/ AjaxResult res = new AjaxResult(); res.putInMap("userInfo", bizUser); res.setStatus(AjaxResult.STATUS_SUCCESS); return res; } /** * 获取其他用户简化信息 * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2018年9月5日 * @param openId * @return */ @RequestMapping(value = "/getOtherUserInfo/{openId}") public @ResponseBody AjaxResult getOtherUserInfo(@PathVariable String openId) { BizUser bizUser = bizUserService.findByOpenId(openId); AjaxResult res = new AjaxResult(); res.putInMap("userInfo", bizUser); res.setStatus(AjaxResult.STATUS_SUCCESS); return res; } /** * 接收用户信息 */ @RequestMapping(value = "/saveUserInfo") public @ResponseBody AjaxResult saveUserInfo(@RequestBody BizUser bizUser) { BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class); bizUser.setUserId(loginUser.getUserId()); // TODO 赋值操作 int i = bizUserService.saveUserInfo(bizUser); if (i == 0) { return new AjaxResult(AjaxResult.STATUS_FAIL, "更新失败"); } return new AjaxResult(AjaxResult.STATUS_SUCCESS, Collections.singletonList(bizUser)); } }