package com.matrix.system.shopXcx.api.action; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.matrix.system.common.constance.AppConstance; import com.matrix.system.common.init.UserCacheManager; import com.matrix.component.tools.HttpCurlUtil; 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.activity.dao.ActivitySignReceiveRecordDao; import com.matrix.system.common.bean.BusParameterSettings; import com.matrix.system.common.dao.BusParameterSettingsDao; import com.matrix.system.common.interceptor.HostInterceptor; import com.matrix.system.constance.Dictionary; import com.matrix.system.fenxiao.constant.FenxiaoSettingConstant; import com.matrix.system.fenxiao.dao.ShopSalesmanApplyDao; import com.matrix.system.fenxiao.dao.ShopSalesmanGradeDao; import com.matrix.system.fenxiao.entity.ShopSalesmanApply; import com.matrix.system.fenxiao.entity.ShopSalesmanGrade; import com.matrix.system.fenxiao.service.ShopSalesmanApplyService; import com.matrix.system.hive.bean.SysVipInfo; import com.matrix.system.hive.dao.MoneyCardUseDao; import com.matrix.system.hive.dao.SysVipInfoDao; import com.matrix.system.hive.service.SysVipInfoService; import com.matrix.system.score.dao.ScoreVipDetailDao; import com.matrix.system.shopXcx.api.WeChatApiTools; import com.matrix.system.shopXcx.api.dto.XcxUserSaveUserInfoDto; import com.matrix.system.shopXcx.dao.ShopCouponRecordDao; 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; /** * @author jyy * @description (用户表) * @date 2019-05-31 10:03 */ @Controller @RequestMapping(value = "wxapi/user") public class WxUserAction extends BaseAction { @Autowired private SysVipInfoService sysVipInfoService; @Autowired private SysVipInfoDao sysVipInfoDao; @Autowired private ShopSalesmanApplyService shopSalesmanApplyService; @Autowired BusParameterSettingsDao busParameterSettingsDao; @Autowired private UserCacheManager userCacheManager; @Autowired ShopSalesmanApplyDao salesmanApplyDao; @Autowired WeChatApiTools weChatApiTools; @Autowired private ScoreVipDetailDao scoreVipDetailDao; @Autowired private MoneyCardUseDao moneyCardUseDao; @Autowired ShopCouponRecordDao shopCouponRecordDao; @Autowired ActivitySignReceiveRecordDao activitySignReceiveRecordDao; @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); // 查询用户是否存在 SysVipInfo sysVipInfo = null; synchronized (this) { sysVipInfo = sysVipInfoService.findByOpenId(openId); if (sysVipInfo == null) { // 新增用户 sysVipInfo = new SysVipInfo(); sysVipInfo.setIsSales(SysVipInfo.NOT_SALES); sysVipInfo.setOpenId(openId); sysVipInfo.setSessionKey(sessionKey); sysVipInfo.setCompanyId(HostInterceptor.getCompanyId()); sysVipInfo.setArrivalWay("微商城"); sysVipInfo.setVipName("微信用户"); sysVipInfo.setVipState(Dictionary.VIP_STATE_HY); sysVipInfo.setVipType(Dictionary.VIP_TYPE_NOCARD); sysVipInfo.setIsDeal(SysVipInfo.UNDEAL_VIP); sysVipInfo.setVipNo(openId); sysVipInfoService.add(sysVipInfo); } else { sysVipInfo.setSessionKey(sessionKey); sysVipInfoDao.update(sysVipInfo); } } // 存放redis sysVipInfo.setLevelCard(null); String token = userCacheManager.saveUserInfo(sysVipInfo); LogUtil.info("用户token={}", token); res.putInMap("token", token); res.putInMap("userInfo", sysVipInfo); res.setStatus(AjaxResult.STATUS_SUCCESS); } else { res.setStatus(AjaxResult.STATUS_FAIL); res.setInfo("自动登录失败"); } return res; } @Autowired ShopSalesmanGradeDao shopSalesmanGradeDao; /** * 查询用户信息 */ @RequestMapping(value = "/findUserInfo") public @ResponseBody AjaxResult findUserInfo() { AjaxResult res = new AjaxResult(); SysVipInfo loginUser = userCacheManager.getLoginUser(); SysVipInfo sysVipInfo = sysVipInfoService.findById(loginUser.getId()); if (sysVipInfo != null) { if (SysVipInfo.VALID_FLAG_Y == sysVipInfo.getValidFlag()) { sysVipInfo.setBalance(moneyCardUseDao.selectVipCardTotalMoney(loginUser.getId())); sysVipInfo.setPointAll(scoreVipDetailDao.selectUserTotalScore(loginUser.getId())); } else { sysVipInfo.setBalance(0D); sysVipInfo.setPointAll(0); } res.putInMap("couponCount", shopCouponRecordDao.countUnuseCouponRecord(loginUser.getId())); res.putInMap("prizeCount", activitySignReceiveRecordDao.getSignAwardReceiveCount(loginUser.getId(), loginUser.getCompanyId())); res.putInMap("userInfo", sysVipInfo); //查询会员等级 if (sysVipInfo.getSalesmanGrade() != null) { ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectById(sysVipInfo.getSalesmanGrade()); res.putInMap("vipLevel", shopSalesmanGrade.getName()); } else if (sysVipInfo.getVipLevel() != null) { res.putInMap("vipLevel", sysVipInfo.getVipLevel().getLevelName()); } else { res.putInMap("vipLevel", "初级会员"); } } res.setStatus(AjaxResult.STATUS_SUCCESS); return res; } /** * 根据OpenID查询用户信息 */ @GetMapping(value = "/findUserInfo/{openId}") public @ResponseBody AjaxResult findUserInfo(@PathVariable String openId) { SysVipInfo sysVipInfo = sysVipInfoService.findByOpenId(openId); SysVipInfo bizUserQuery = new SysVipInfo(); bizUserQuery.setNickName(sysVipInfo.getNickName()); bizUserQuery.setAvatarUrl(sysVipInfo.getAvatarUrl()); bizUserQuery.setOpenId(openId); return AjaxResult.buildSuccessInstance(bizUserQuery); } /** * 接收用户信息 */ @PostMapping(value = "/saveUserInfo") public @ResponseBody AjaxResult saveUserInfo(@RequestBody XcxUserSaveUserInfoDto xcxUserSaveUserInfoDto) { SysVipInfo loginUser = userCacheManager.getLoginUser(); SysVipInfo sysVipInfo = new SysVipInfo(); sysVipInfo.setId(loginUser.getId()); BeanUtil.copyProperties(xcxUserSaveUserInfoDto, sysVipInfo); sysVipInfo.setPhone(xcxUserSaveUserInfoDto.getPhoneNumber()); if (StringUtils.isBlank(loginUser.getVipName()) || loginUser.getVipName().equals("微信用户")) { sysVipInfo.setVipName(xcxUserSaveUserInfoDto.getNickName()); } if (StringUtils.isBlank(loginUser.getSex())) { sysVipInfo.setSex(xcxUserSaveUserInfoDto.getGender() == 1 ? "男" : "女"); } int i = sysVipInfoDao.update(sysVipInfo); checkNeedToBeSalesman(sysVipInfo, loginUser); if (i == 0) { return new AjaxResult(AjaxResult.STATUS_FAIL, "更新失败"); } return new AjaxResult(AjaxResult.STATUS_SUCCESS, Collections.singletonList(sysVipInfo)); } void checkNeedToBeSalesman(SysVipInfo sysVipInfo, SysVipInfo loginUser) { //查询是否需要自动成为分销员 if ((loginUser.getIsSales() == null || loginUser.getIsSales() == 2) && StringUtils.isNotBlank(sysVipInfo.getNickName())) {//目前还不是分销员 BusParameterSettings fxSwith = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_SWITCH, HostInterceptor.getCompanyId()); if (fxSwith!=null && "1".equals(fxSwith.getParamValue())) {//开启分销 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.getId()); queryWrapper.eq("apply_status", ShopSalesmanApply.APPLY_STATUS_DSH); ShopSalesmanApply shopSalesmanApply = salesmanApplyDao.selectOne(queryWrapper); if (shopSalesmanApply == null) {//没有待审核记录 shopSalesmanApplyService.applyToBeAnSalesman(loginUser.getId(), null, null, 2); } } } } } }