| package com.matrix.system.shopXcx.api.action; | 
|   | 
| import cn.hutool.core.bean.BeanUtil; | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.matrix.component.redis.RedisUserLoginUtils; | 
| 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.entity.ShopSalesmanApply; | 
| 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 RedisUserLoginUtils redisUserLoginUtils; | 
|     @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 = redisUserLoginUtils.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; | 
|     } | 
|   | 
|   | 
|   | 
|     /** | 
|      * 查询用户信息 | 
|      */ | 
|     @RequestMapping(value = "/findUserInfo") | 
|     public @ResponseBody | 
|     AjaxResult findUserInfo() { | 
|         SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class); | 
|         SysVipInfo sysVipInfo = sysVipInfoService.findById(loginUser.getId()); | 
|         sysVipInfo.setPointAll(scoreVipDetailDao.selectUserTotalScore(loginUser.getId())); | 
|         sysVipInfo.setBalance(moneyCardUseDao.selectVipCardTotalMoney(loginUser.getId())); | 
|         AjaxResult res = new AjaxResult(); | 
|         res.putInMap("couponCount", shopCouponRecordDao.countUnuseCouponRecord(loginUser.getId())); | 
|         res.putInMap("prizeCount",activitySignReceiveRecordDao.getSignAwardReceiveCount(loginUser.getId(),loginUser.getCompanyId())); | 
|         res.putInMap("userInfo", sysVipInfo); | 
|         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 = redisUserLoginUtils.getLoginUser(SysVipInfo.class); | 
|         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.getParamValue().equals("1")) {//开启分销 | 
|                 BusParameterSettings applyWay = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_APPLY_WAY, loginUser.getCompanyId()); | 
|                 if (applyWay.getParamValue().equals(FenxiaoSettingConstant.FX_APPLY_WAY_AUTO)) {//自动成为分销员 | 
|                     QueryWrapper<ShopSalesmanApply> 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) {//没有待审核记录 | 
|                         try { | 
|                             shopSalesmanApplyService.applyToBeAnSalesman(loginUser.getId(), null, null, 2); | 
|                         }catch (Exception e){ | 
|                             LogUtil.debug(e.getMessage()); | 
|                         } | 
|   | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
|   | 
| } |