package com.matrix.system.shopXcx.api.action; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.matrix.biz.bean.BizUser; 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.bean.BusParameterSettings; import com.matrix.system.common.constance.AppConstance; import com.matrix.system.common.dao.BusParameterSettingsDao; import com.matrix.system.common.interceptor.HostInterceptor; import com.matrix.system.fenxiao.constant.FenxiaoSettingConstant; import com.matrix.system.fenxiao.dao.ShopSalesmanApplyDao; import com.matrix.system.fenxiao.entity.ShopSalesmanApply; import com.matrix.system.fenxiao.service.ShopSalesmanApplyService; import com.matrix.system.shopXcx.api.WeChatApiTools; 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.*; import java.util.Collections; import java.util.Date; /** * @author jyy * @description (用户表) * @date 2019-05-31 10:03 */ @Controller @RequestMapping(value = "wxapi/user") public class WxUserAction extends BaseAction { @Autowired private BizUserService bizUserService; @Autowired private ShopSalesmanApplyService shopSalesmanApplyService; @Autowired BusParameterSettingsDao busParameterSettingsDao; @Autowired private RedisUserLoginUtils redisUserLoginUtils; @Autowired ShopSalesmanApplyDao salesmanApplyDao; @Autowired WeChatApiTools weChatApiTools; @Autowired private WeixinServiceUtil weixinServiceUtil; @Value("${debug}") private String isDebug; /** * 小程序登录 * * @param code * @return * @throws Exception * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2018年5月23日 */ @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, HostInterceptor.getCompanyId()); 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.setIsSales(BizUser.NOT_SALES); bizUser.setOpenId(openId); bizUser.setLastLoginTime(new Date()); bizUser.setUserType(AppConstance.USER_TYPE_CUSTOMER); bizUser.setCompanyId(HostInterceptor.getCompanyId()); 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); AjaxResult res = new AjaxResult(); res.putInMap("userInfo", bizUser); res.setStatus(AjaxResult.STATUS_SUCCESS); return res; } /** * 根据OpenID查询用户信息 */ @GetMapping(value = "/findUserInfo/{openId}") public @ResponseBody AjaxResult findUserInfo(@PathVariable String openId) { BizUser bizUser = bizUserService.findByOpenId(openId); BizUser bizUserQuery=new BizUser(); bizUserQuery.setNickName(bizUser.getNickName()); bizUserQuery.setAvatarUrl(bizUser.getAvatarUrl()); bizUserQuery.setOpenId(openId); return AjaxResult.buildSuccessInstance(bizUserQuery); } /** * 接收用户信息 */ @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 ((loginUser.getIsSales() == null || loginUser.getIsSales() == 2) && StringUtils.isNotBlank(bizUser.getNickName())) {//目前还不是分销员 BusParameterSettings fxSwith = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_SWITCH, HostInterceptor.getCompanyId()); if (fxSwith.getParamValue().equals("1")) {//开启分销 BusParameterSettings applyWay = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_APPLY_WAY, loginUser.getCompanyId()); if (applyWay.getParamValue().equals(FenxiaoSettingConstant.FX_APPLY_WAY_AUTO)) {//自动成为分销员 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_id", loginUser.getOpenId()); queryWrapper.eq("apply_status", ShopSalesmanApply.APPLY_STATUS_DSH); ShopSalesmanApply shopSalesmanApply = salesmanApplyDao.selectOne(queryWrapper); if (shopSalesmanApply == null) {//没有待审核记录 shopSalesmanApplyService.applyToBeAnSalesman(loginUser.getOpenId(), null, null, 2); } } } } if (i == 0) { return new AjaxResult(AjaxResult.STATUS_FAIL, "更新失败"); } return new AjaxResult(AjaxResult.STATUS_SUCCESS, Collections.singletonList(bizUser)); } }